Пошук

Показ дописів із міткою приклад. Показати всі дописи
Показ дописів із міткою приклад. Показати всі дописи

неділя, 10 січня 2010 р.

XI. Рядкові величини

ЗАДАЧА № 58

Постановка задачі:

Нехай дано деякий текст. Обчислити, скільки разів повторюється наперед заданий символ а.

Аналіз алгоритму:

Для розв’язання задачі, по-перше, необхідна рядкова величина для зберігання тексту (для зберігання великого тексту можна зарезервувати масив). Для спрощення задачі будемо вважати, що текст має довжину не більше 255 символів, тобто для його зберігання достатньо одного рядка. Крім цього, нам необхідна змінна символьного типу для зберігання заданого символу а, кількість яких ми будемо обчислювати.

Оскільки рядок фактично можна вважати масивом символьних величин, для його обробки необхідно організувати цикл від першого до останнього символу рядка (length(St)), що буде переглядати кожен елемент рядка та порівнювати його з шуканим символом. У випадку збігу елементів, що порівнюються, лічильник збільшується на одиницю.

Текст програми:

Program Task_58;

Uses crt;

Var і, count:word;

{і – змінна циклу, count – кількість знайдених символів}

a:char; {a – шуканий символ}

St:string; {St – даний текст}

Begin

Clrscr;

Write(‘Введіть текст: ‘);

Readln(St);

Write(‘Введіть шуканий символ: ‘);

Readln(a);

Count:=0; (Початкове значення лічильника}

For i:=1 to length(St) do

If St[i] = a Then count:=count+l;

Writeln(‘Шуканих символів в тексті: ‘, count);

Readkey;

End.

ЗАДАЧА № 59

Постановка задачі:

У даному тексті замінити всі символи «:» на символи «–» і навпаки.

Аналіз алгоритму:

Для виконання заміни в тексті одного символу іншим слід знайдений символ (або групу символів) спочатку вилучити процедурою insert, а потім з тієї ж самої позиції вставити бажаний символ (або групу символів). Зверніть увагу на те, що команди розгалуження повинні бути обов’язково вкладеними, тому що якщо ми знайдемо символ «:»і виконаємо заміну, то на його місці з’явиться символ «–», який теж підлягає заміні (для символу «–» міркування будуть такими самими).

У результаті текст після закінчення роботи програми відтвориться у початковому вигляді.

Текст програми:

Program Task_59;

Uses crt;

Var і:word; {і – змінна циклу}

St:string; {St – даний текст}

Begin

Clrscr;

Write(‘Введіть текст: ‘);

Readln(St);

For i:=1 to length(St) do

If St[i] = ‘:’ Then

Begin Delete (St, i, 1) ; Insert (‘–’St, 1) ; End

Else

If St[i]=‘–’ Then

Begin Delete(St, i, 1); Insert(‘:’, St, 1); End;

Writeln(‘Результуючий рядок: ‘, St);

Readkey;

End.

ЗАДАЧА № 60

Постановка задачі:

У даному тексті замінити всі символи « . » на послідовність символів « … ». Якщо у тексті зустрічаються підряд три крапки, то залишати їх без змін.

Аналіз алгоритму:

У цій задачі після виконання замін збільшується довжина рядка, причому після шуканого символу становиться такий самий. Тому, якщо цикл організувати, як і в попередньому випадку, весь текст, починаючи з першої крапки, заміниться на крапки (подумайте чому). Отже, доцільно скористатися циклом з передумовою, що дозволяє змінну циклу змінювати на будь–який крок (а не тільки на одиницю, як в циклі з параметром). Для того, щоб не виконувати заміну у випадку наявності трьох крапок в тексті, будемо перевіряти не тільки поточну, а й наступну за нею позицію (не забудьте при цьому про можливість виходу за межі рядка!!!). Останній символ рядка тут перевірятиметься окремо.

Зверніть увагу, що у випадку, коли довжина результуючого рядка буде складати більш ніж 255 символів, зайві символи будуть втрачатися. Для спрощення задачі ми їх не враховуємо, але для сильних учнів можна запропонувати організувати збереження цих символів у додатковому рядочку.


Текст програми:

Program Task_60;

Uses crt;

Var i:word; {i – змінна циклу}

St: string; {St – даний текст}

Begin

Clrscr;

Write(‘Введіть текст: ‘);

Readln(St); i:=1;

While i

Begin

If (St[i]=‘.‘) and (St[i+1]<>‘.‘) Then

Begin Insert(‘..‘, St, i+l); i:=i+2; End;

i:=i+1;

End;

If St[length(St)]=‘.‘ Then St:=St+’..‘;

Writeln(‘Результуючий рядок: ‘, St);

Readkey;

End.

ЗАДАЧА № 61

Постановка задачі:

Перевірити, чи однаково читається дане слово зліва направо і навпаки.

Аналіз алгоритму:

Для розв’язування цієї задачі слід спочатку отримати новий рядок, який є оберненим відносно даного, а потім порівняти даний та отриманий рядки. Якщо вони збігаються, слово є поліндромом (читається в обох напрямках однаково, наприклад, «дід», «потоп», «Пилип» тощо), у протилежному випадку – ні.

Текст програми:

Program Task_61;

Var і:byte; {і – змінна циклу}

St, Rez:string;

{St – даний текст, Rez – результуючий (перегорнутий) рядок}

Begin

Clrscr;

Write(‘Введіть текст: ‘);

Readln(St);

Rez:= ‘‘; {Очищення рядка}

For і:– length(St) downto 1 do

Rez := Rez+St[i]; {Перегортання рядка}

If Rez = St Then Writeln(‘Слово є паліндромом. ‘)

Else Writeln("Слово не є паліндромом. ‘);

Readkey;

End.


ЗАДАЧА № 62

Постановка задачі:

Визначити, скільки разів у даному тексті зустрічається послідовність символів «абв».

Аналіз алгоритму:

Організовуємо прохід по рядку за допомогою циклу з параметром, причому враховуємо, що слід перевірити три послідовно розташованих символи (зверніть увагу на можливість виходу за межі рядка!). Один з методів вибору кількох послідовних символів уже розглядався раніше (і–ий, і+1–ий та і+2–ий елементи), тому розглянемо інший метод, що полягає у використанні функції копіювання Copy. Нагадуємо, що ця функція містить у якості параметрів вихідний рядок, номер початку копіювання (виділення) та кількість вибраних символів, тобто для вибору трьох символів з будь–якого місця рядка ця функція буде мати вигляд:

Cоpy(St, i, 3)

Порівнюючи виділені (скопійовані) символи з еталоном, нарощуємо лічильник при виконанні поставлених умов.

Текст програми:

Program Task_62;

Uses crt;

Var і:byte; {і – змінна циклу}

St:string; {St – даний текст}

Count:byte; {Count – лічильник послідовностей}

Begin

Clrscr;

Write(‘Введіть текст: ‘);

Readln(St);

Count:=0; {Початкове значення лічильника}

For i:=1 to length(St)– 2 do

If Copy(St, i, 3) = ‘абв’ Then count:=count+1;

Writeln(‘Кількість шуканих послідовностей: ‘, count);

Readkey;

End.

ЗАДАЧА № 63

Постановка задачі:

Нехай дано формулу. Визначити коректність формули щодо кількості відкритих та закритих дужок. Вважається, що закриті дужки не стоять перед відкритими. Якщо дужки у формулі відсутні – повідомити про це.

Аналіз алгоритму:

Для визначення коректності формули слід підрахувати кількість відкритих та закритих дужок, причому баланс дужок вважається вірним не тільки якщо ці значення дорівнюють одне одному, а й якщо відкрита дужка передує закритій. Останнє перевіряється тим, що кількість відкритих дужок має завжди бути більшою або рівною кількості закритих.

Звідси випливає, що для розв’язку даної задачі зручно скористатися циклом з передумовою, який буде слідкувати за досягненням кінця рядка, та відслідковувати правильність розташування відкритих та закритих дужок.

Щоб визначити, чи є в формулі дужки взагалі, достатньо перевірити на нуль кількість одних чи других дужок. Визначимо змінні count–left та count–right як кількість відповідно лівих (відкритих) та правих (закритих) дужок.

Текст програми:

Program Task_63;

Var і:byte; {і – змінна циклу}

St:string; {St – даний текст}

count_left, count_right:byte;

{count_left – лічильник лівих дужок,

 count_right – лічильник правих дужок}

Begin

Clrscr;

Write(‘Введіть формулу: ‘);

Readln(St);

Count_left:=0; {Початкове значення лічильника)

Count_right:=0;

і:= 1;

While (i<=length(St)) and (Count_left>=Count_right)) do

Begin

If St[i] = ‘(‘ Then count_left:=count_left+1;

If St[i] = ‘)’ Then count_right:=count right+1;

і: =i+l ;

End;

If (count_left=0) and (count_right=0)

Then wrіteln(‘Формула не має дужок. ‘)

Else

If count_left=count_right Then Writeln( ‘Формула коректна’)

else writeln(‘Формула не коректна. ‘);

Readkey;

End.

VIII. Двовимірні масиви

ЗАДАЧА № 49

Постановка задачі:

Дано натуральні числа п, т. Обчислити значення елементів матриці Сij, (і = 1, 2,…, п, j=1, 2,…, т), якщо:

Текст програми:

Program Task_49;

Uses crt;

Const n = 20; m = 15;

Var C:array[1..n, 1..m] of integer;

i, j:integer; {i, j – змінні циклу}

Begin

Clrscr;

For i:=1 to n do

Begin

For j:=1 to m do

Begin

If і

Else C[i,j]:=i*i + j*j;

Write(C[i,j]:5);

End;

Writeln;

End;

Readkey;

End.

ЗАДАЧА № 50

Постановка задачі:

Дано квадратну матрицю розмірності п. Надрукувати суму елементів бічної діагоналі.

Аналіз алгоритму:

Розв’язок задачі є тривіальним, якщо згадати, яку залежність мають індекси бічної діагоналі
(і + j = п + 1). Перевіривши цю залежність у середині циклів, що організовують проходження по масиву, ми знайдемо бажану суму.

Текст програми:

Program Task_50;

Uses crt;

Const n = 10;

Var A:array[1..n, 1..n] of real;

і,j:integer; {і, j – змінні циклу}

Sum:real; {Sum – сума елементів бічної діагоналі}

Begin

Randomize;

Clrscr;

{Заповнення масиву та виведення його на екран}

For і:=1 to n do

Begin

For j:=1 to n do

Begin

A[i,j]:=random*50–random(80)/3;

Write(A[i,j]:8:3);

End;

Writeln;

End;

Sum:=0; {Початкове значення суми}

For і:=1 to n do

Begin

For j:=1 to n do

If і+j=n+1 Then Sum:=Sum+A[і,j];

End;

Writeln(‘Сума елементів бічної діагоналі = ‘, Sum:8:2);

Readkey;

End.

Зверніть увагу на те, що для цієї задачі можна значно спростити цикл знаходження суми, адже фактично ми розглядаємо тільки лінійний масив (елементи на діагоналі насправді складають одновимірний масив). Тому цикл знаходження суми можна зобразити таким чином (наведений фрагмент програми):

Sum:=0; {Початкове значення суми}

For i:=1 to n do Sum:=Sum+A[i,n+1–i];

VII. Одновимірні масиви

ЗАДАЧА № 44

Постановка задачі:

Дано одновимірний масив цілих чисел А[і], де і = 1, 2, …, n. Вивести елементи масиву з парними індексами.

Аналіз алгоритму:

У даному випадку незручно користуватися для виведення на екран елементів з парними індексами циклом з параметром, тому що він дозволяє зміну індексу тільки на одиницю. Тому пропонуємо скористатися циклом з перед- або післяумовою.

Текст програми:

Program Task_44;

Uses crt;

Var N, і:word; {N – кількість елементів масиву, і – змінна циклу}

A:array[1..100] of longint; {A – заданий масив}

Begin

Clrscr;

Write(‘Введіть кількість елементів масиву (<100):>

Readln(N);

For i:=1 to N do

Begin

А[і] :=random(300) ; {Заповнення масиву випадковими числами}

Write(A[i]:5); {Виведення масиву на екран для контролю правильності роботи програми}

End;

Writeln; {Переведення курсору на наступний рядок}

і:=2;

while i<=N do

Begin

Write(A[i]:5);

i:=i+2; {Змінна циклу змінюється на 2, щоб вибрати тільки парні елементи}

End;

Readkey;

End.

ЗАДАЧА № 45

Постановка задачі:

Барон Мюнхгаузен, вийшовши на екологічно чисте полювання, зарядив свою рушницю кісточками вишень. Після того, як він вдало влучив поміж роги оленям (в яких влучило відповідно k1, k2, …, kN кісточок), у них на головах виросли чудові молоді вишеньки. Скільки саджанців зміг подарувати барон Мюнхгаузен садівникам-дослідникам?

Аналіз алгоритму:

Для розв’язування цієї задачі пропонується використати масив для зберігання кількості кісточок, що влучили поміж роги оленям. Оскільки кількість кісточок є цілим числом, масив повинен мати розмірність N елементів цілого типу. Для спрощення відлагодження програми доречно використовувати автоматичне заповнення масиву за допомогою генератора випадкових чисел, а з метою перевірки правильності роботи програми після заповнення масив виводиться на екран.

Текст програми:

Program Task_45;

Uses crt;

Var N:word;

К:array[1..100] of longint;

{K – зарезервований масив для зберігання кількості кісточок, що влучили в оленів}

і,Sum:longint; {і – змінна циклу,

Sum – загальна кількість кісточок, що влучили в оленів}

Begin

Randomize; {Ця процедура запускається з метою зробити числа генератора випадкових чисел ще більш «випадковими»}

Clrscr;

Sum:=0; {Спочатку Мюнхгаузен ще ні в кого не влучив}

Write(‘Олені, в яких влучив Мюнхгаузен (<=100): ‘);

Readln(N);

For і:=1 to N do

Begin

К[і]:=random(50)+20;{Заповнення масиву випадковими числами в діапазоні від 20 до 70}

Write(К[і]:5); {Виведення на екран для контролю}

Sum: =Sum+K[і]; {Знаходження кількості влучених кісточок}

End;

Writeln; {Переведення курсору на новий рядок}

Writeln(‘Кількість нових саджанців: ‘, Sum);

Readkey;

End.

ЗАДАЧА № 46

Постановка задачі:

Дано натуральне число А. Складіть програму, що представляє його у вигляді многочлена. Наприклад, 123 = 1 × 102 + 2 × 101 + 3 × 100.

Аналіз алгоритму:

Ця задача фактично зводиться до пошуку окремих цифр числа. Оскільки ми не знаємо на початку роботи, скільки цифр має число, для їх зберігання можна використати масив цілих чисел, причому розмірність цього масиву можна задати не більше 10 елементів, тому що навіть найбільше ціле число типу longint має в своєму складі не більше 10 цифр. Щоб вивести на екран отриманий многочлен, ми спочатку знаходимо кількість цифр у числі та виділяємо кожну цифру окремо, а потім організовуємо цикл від «найстаршої» значущої (ненульової) цифри числа до «наймолодшої» з виведенням на екран самої цифри, помноженої на 10 у степені номер розряду–1 (тобто i–1).

Текст програми:

Program Task_46;

Uses crt;

Var N, і, Count:longint; {N – задане ціле число,

і – змінна циклу,

Count – кількість цифр в числі}

Cifra:array[1..10] of byte; {Cifra – масив для зберігання цифр числа}

Begin

Clrscr;

Count:=0;

Write(‘Введіть ціле число: ‘);

Readln(N);

While N>0 do

Begin

Count:=Count+1;

Cifra[Count]:=N mod 10;

N:=N div 10;

End;

Write(‘N = ‘);

For i:=Count downto 1 do

Begin

Write(Cifra[i],‘*10^’,i–l); {Якщо доданок не останній, то до нього дописується знак «+»}

If і>1 Then write(‘ + ‘);

End;

Readkey;

End.

ЗАДАЧА № 47

Постановка задачі:

Дано дійсні числа а1951, а1952, … , а2000 – кількість опадів (у мм), що випали у місті за останні 50 років XX століття. Обчислити середню кількість опадів за цей період і щорічне відхилення від середнього значення.

Аналіз алгоритму:

У цій задачі слід організовувати проходження по масиву двічі, оскільки першим проходженням ми знайдемо тільки суму всіх опадів, що випали за останні 50 років, а потім, поділивши отриманий результат на 50, знайдемо середню кількість опадів за вказаний період. Другим же проходженням можемо вже визначити щорічне відхилення від середнього значення, причому для того, щоб не втратити вхідні дані, зарезервуємо в програмі ще один масив на 50 дійсних чисел для зберігання цих результатів.

Текст програми:

Program Task_47;

Uses crt;

Var N, i:longint; {N – кількість елементів масиву, і – змінна циклу}

А:аrrау[1951..2000] of real; {A – масив для зберігання кількості опадів у відповідному році}

В:array[1951..2000] of real; {В – масив для зберігання відхилення від середнього значення}

Begin

Randomize;

Clrscr;

Sum:=0;

For і:=1951 to 2000 do

Begin

A[i]:=random(500)/7;{Заповнення масиву випадковими дійсними числами}

Write (А[і]:8:2);{Виведення масиву на екран для контролю}

Sum:=Sum+K[і];

End;

Sum:=Sum/50; {Середня кількість опадів за рік}

Writeln;

WriteIn(‘Щорічні відхилення від середньої кількості опадів за період 1951–2000 p.p.‘);

For і:=1951 to 2000 do

Begin

В[і]:=Sum – А[і]; {Знаходження щорічного відхилення}

Write(В[і]:8:2); {Виведення результатів на екран}

End;

Readkey;

End.

ЗАДАЧА № 48

Постановка задачі:

Дано дійсні числа а1, а2, … , a30 та b1, b2, …, b30. Обчислити

Аналіз алгоритму:

Очевидно, що для обчислення результату цієї задачі спочатку необхідно знайти чисельник та знаменник дробу. Причому зверніть увагу на те, що кількість доданків і в одному, і в іншому випадках дорівнює 15, тільки в чисельнику вибираються елементи масивів з непарними індексами, а в знаменнику – із парними. Щоб організувати зміну індексів за заданим правилом, можна скористатися таким штучним прийомом: якщо в циклі з параметром індекс і змінюється від 1 до п, то для отримання непарних чисел з проміжку [1..2n] використовується формула:            2*і-1.

Запропонуйте дітям подумати, яка формула дасть змогу отримати парні числа (Відповідь: 2*і).

Текст програми:

Program Task_48;

Uses crt;

Var A, B:array [1..30] of real;

{А, В – масиви для зберігання вхідних даних}

і:byte; {і – змінна циклу}

Rl, R2:real; {R1 – чисельник дробу, R2 – знаменних дробу}

Rez:real; {Rez – результат обчислень}

Begin

Randomize;

Clrscr;

Writeln(‘Масив А:’);

For i:=1 to 30 do

Begin

A[i]:=random(200)/7–random*15;

Write(A[i]:8:2);

End;

Writeln;

Writeln(‘Масив В:’);

For i:=1 to 30 do

Begin

B[i]:=random*200–random*100;

Write(B[i]:8:2);

End;

Writeln;

Rl:=0; R2:=0; {Початкові значення дорівнюють 0, тому що результат є накопиченням суми}

For і:=і to 15 do

Begin

R1:= R1+(A[2*i–1]+B[2*i–1]);

R2:= R2+(A[2*i]+B[2*i]) ;

End;

Rez:=Rl/R2;

Writeln(‘Результат обчислень = ‘, Rez:8:2);

Readkey;

End.

V. Цикли з передумовою

ЗАДАЧА № 32

Постановка задачі:

Дано натуральне число N. Визначити кількість цифр у числі.

Текст програми:

Program Task_32;

Uses crt;

Var N: longint; Counter: integer;

Begin

Clrscr;

Write(‘Введіть число: ’);

Readln(N);

Counter:= 0;

While N > 0 do

Begin

Counter:=Counter+1; {Підрахунок кількості цифр}

N:=N div 10; {Відкидання останньої цифри}

End;

Writeln(‘Кількість цифр у заданому числі дорівнює ’, N);

Readkey;

End.

ЗАДАЧА № 33

Постановка задачі:

Коли Василині Премудрій виповнилося 18 років, Чахлик Невмирущий вирішив одружитися з нею. Василина запитала Чахлика, скільки у нього скринь із золотом. Чахлик відповів, що зараз у нього n скринь і щороку додається ще по т скринь. Василина пообіцяла, що вийде заміж тоді, коли у Чахлика буде k повних скринь із золотом. Скільки років буде тоді нареченій?

Текст програми:

Program Task_33;

Uses crt;

Var

m, n, k:word;

{n – початкова кількість скринь із золотом,

 m – щорічний «прибуток» Чахлика,

 k – «потреби» Василини Премудрої}

Sum, Years:word;

{Sum – щорічне накопичення Чахлика,

 Years – вік Василини Премудрої}

Begin

Clrscr;

Write(‘Введіть початкову кількість скринь з золотом: ‘);

Readln(n);

Write (‘Введіть щорічний прибуток Чахлика: ‘);

Readln(m);

Write(‘Введіть «потреби» Василини Премудрої: ‘);

Readln(k);

Sum:=n;{Початковий «капітал» Чахлика}

Years:=18;{Початковий вік Василини}

While Sum<=k do

Begin

Sum:=Sum+m;

Years:=Years+1;

End;

Writeln(‘Василині вже виповнилося ‘, Years, ‘ років.‘);

Readkey;

End.

ЗАДАЧА № 34

Постановка задачі:

Дано натуральне число п. Визначити суму цифр у числі.

Аналіз алгоритму:

Для розв’язку цієї задачі використаємо такий штучний прийом: щоб знайти суму цифр, ми повинні «брати» цифри по одній і додавати їх одна до одної, а потім використану цифру «відкидати». Це нам дозволять зробити операції ділення націло та знаходження залишку від цілочисельного ділення. Так, при діленні числа націло на 10 остання цифра числа буде«відкидатися», а при знаходженні залишку від ділення націло ми виділяємо останню цифру числа. Тобто:

123 div 10 = 12

3928 mod 10 = 8.

Процес буде повторюватись, доки від числа «нічого не залишиться», тобто, доки воно не перетвориться на нуль.

Текст програми:

Program Task_34;

Uses crt;

Var n:longint; {N – дане число}

Sum:byte; {Sum – сума цифр числа}

Begin

Clrscr;

Sum:=0; {Сума цифр числа спочатку дорівнює 0}

Write(‘Введіть ціле число: ‘);

Readln(N);

N:=abs(N);

While N>0 do

Begin

Sum:=Sum+N mod 10; {Знаходження суми цифр}

N:=N div 10; {«Відкидання» останньої цифри числа}

End;

Writeln(‘Сума цифр = ‘, Sum);

Readkey;

End.

ЗАДАЧА № 35

Постановка задачі:

Дано ціле число т > 1. Знайти найбільше число k, при якому виконується умова 4k < т.

Текст програми:

Program Task_35;

Uses crt;

Var m, k, Rez:longint; {Rez – обчислення степеню 4}

Begin

Clrscr;

Write(‘Введіть значення m (m>1): ‘);

Readln(m);

Rez:=1;

k:=0;

While Rez

Begin k:=k+l; Rez:=Rez*4; End;

Writeln(‘k = ‘, k) ;

Readkey;

End.

ЗАДАЧА № 36

Постановка задачі:

Обчислити суму ряду  з точністю ε.

Аналіз алгоритму:

Під час обчислення результатів деяких експериментів виникає необхідність отримання результату із заданою похибкою. Нехай результатом є нескінченна сума, що задається певною формулою, і відома похибка ε (ε > 0) для знаходження наближеного значення результату. Будемо вважати, що необхідна точність досягнута, коли додавання наступного доданку змінює суму на величину, меншу за ε.

У даній задачі перед обчисленням чергової суми ми порівнюємо наступний доданок з похибкою і якщо доданок менше, обмеження припиняються.

Текст програми:

Program Task_36;

Uses crt;

Var і:word;

S, Epsilon:real; {S – результат обчислень, Epsilon – похибка}

Begin

Clrscr;

S:=0; {Початкове значення дорівнює 0,

тому що результат є накопиченням суми}

Write(‘Введіть значення похибки (Е>0): ‘);

Readln(Epsilon);

і:=1;

While 1/sqr(i)>Epsilon do

Begin S:=S+1/sqr(i); i:=i+1; End;

Writeln(‘Сума ряду = ‘, S:8:2);

Readkey;

End.

ЗАДАЧА № 37

Постановка задачі:

Обчислити значення числа π, використовуючи формулу

Знайти, кількість доданків що дає значення числа π з точністю до 3 знаків.

Аналіз алгоритму:

Для організації циклу з передумовою в цій задачі необхідно мати еталон числа π для порівняння з нескінченною сумою. Візьмемо за цей еталон значення вбудованої функції Рі. Крім того, за умовою задачі нам необхідно отримати результат із точністю до третьої цифри після коми. Пропоную для цього стандартне число π і отриману нескінченну суму помножити на число 1000 та округлити результат за допомогою функції round (отриману суму, крім того, необхідно ще помножити на 4, оскільки сама сума є чвертю числа π). Зверніть увагу також на те, що в нескінченній сумі доданки, що стоять на парних місцях, додаються зі знаком «+», а доданки на непарних місцях – віднімаються від суми. Тобто, залежно від номера доданку (парний чи непарний) ми організовуємо знакочергування у нескінченній сумі.

Текст програми:

Program Task_37;

Uses crt;

Var і, n:word; {і – параметр циклу, n – кількість доданків}

Rez_Pi:real; {Rez_Pi – обчислене значення числа Рі}

Begin

Clrscr;

Rez_Pi:=0;

і: =1; {і – значення знаменника першого доданка}

n:=0; {n – доданків ще нема}

while round(pi*1000)=round(Rez_Pi*4000) do

Begin

If n mod 2=0 Then Rez_Pi:=Rez_Pi+1/i

Else Rez_Pi:=Rez_Pi–1/i;

i:=i+2;

n:=n+1;

End;

Writeln(‘Кількість необхідних доданків: ‘, n);

Writeln(‘Порівняйте значення Рі: ‘);

Writeln(‘  Результат обчислень програми: ‘, Rez_Pi:10:8);

Writeln(‘  Вбудована функція: ‘ , Рі:10:8);

Readkey;

End.