Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

_TPLab_My_Посібник

.pdf
Скачиваний:
20
Добавлен:
08.06.2015
Размер:
1.85 Mб
Скачать

Ініціалізацію вхідних даних здійснимо шляхом введення їх значень з клавіатури за допомогою операторів Writeln (запрошення-інструкції) та Readln.

Структуру подвійного вибору для перевірки того, чи утворюють задані відрізки трикутник, реалізуємо оператором If…Then…Else. Для повернення в точку введення довжин відрізків використаємо оператор безумовного переходу GoTo. Для цього позначимо міткою точку введення довжин відрізків.

Результати обчислень виведемо у зручному для сприймання форматі – з фіксованою десятковою крапкою, використовуючи оператор форматованого виведення Writeln з модифікаторами.

Специфікація змінних.

Довжини сторін трикутника опишемо як змінні дійсного типу Real або Single, щоб забезпечити введення як цілих так і дробових значень з інтервалу (0; 3.4·1038]. Тоді максимальний порядок півпериметру буде рівний 38, а площі - 38*4/2=76. Отже півпериметр і площу потрібно описувати як змінні типу Double або Extended. Але для компіляції операторів, які опрацьовують дані типів Single, Double, Extended або Comp необхідно ввімкнути режим апаратної підтримки чисел з плаваючою крапкою. Режим компіляції {$N+} забезпечить виконання всіх операцій з дійсними числами на апаратному рівні, використовуючи команди співпроцесора 80х87.

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

 

 

 

Призначення

 

Ідентифікатор

Тип

Об’єм

 

 

 

 

змінної

 

пам’яті, байт

 

 

Довжина сторони 1

 

А

 

Single

4

 

 

 

Довжина сторони 2

 

В

 

Single

4

 

 

 

Довжина сторони 3

 

С

 

Single

4

 

 

 

Півпериметр

 

 

Р

 

Double

8

 

 

 

Площа

 

 

 

 

S

 

Double

8

 

Специфікація функцій.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Призначення

 

Синтаксис

 

Семантика

 

Тип

 

 

 

 

 

 

параметру

 

результату

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Корінь

 

Sqrt(X)

 

 

Вираз

 

 

 

 

 

 

квадратний

 

 

 

дійсного

 

Real

 

 

 

 

 

 

 

 

 

 

 

типу

 

 

 

 

 

 

Ціла

частина

 

Trunc(X)

 

 

-- // --

 

Longint

 

 

 

 

числа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Ціла

частина

 

Int(X)

 

 

-- // --

 

Real

 

 

 

 

числа

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Округл.числа

 

Round(X)

 

 

-- // --

 

Longint

 

 

 

 

Логічна

 

Or(<вираз>)

 

Вираз

 

 

 

 

 

 

функція АБО

 

 

логічного

 

Boolean

 

 

 

 

 

 

 

 

 

 

 

типу

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

Program Geron;

 

 

 

 

 

 

 

 

 

 

 

{$N+}

{ Ввімкнення режиму компіляції

 

 

}

 

 

 

 

 

{ з підтримкою всіх дійсних типів

 

 

}

 

 

 

 

Uses CRT; { Підключення модуля керування екраном }

 

 

 

 

 

{ в текстовому режимі

 

 

 

 

}

 

 

 

 

Label 777; { мітка для оператора переходу GoTo

}

 

 

 

 

Var A,B,C : Single; { Довжини сторін трикутника

 

 

}

 

 

 

 

P, S : Double; { Півпериметр та площа трикутника}

 

 

 

 

Begin { main }

 

 

 

 

 

 

 

 

 

 

 

СlrScr;

 

{ Очистка екрану

}

 

 

 

 

 

 

 

 

Writeln ('

Лабораторна робота №3');

 

 

 

 

 

 

 

Writeln (' Опрацювання простих типів даних '); Writeln (' реалізація лін. та розгалужених алгоритмів '); Writeln (' Завдання №1, варіант №1');

31

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

Writeln (' Роботу виконав ст.гр.1Ф Петренко Петро '); Writeln (' Обчисл. площі трикутн. за формулою Герона ');

Writeln (' Версія 1, дата захисту 30.09.2010 р. '); Writeln ('---------------------------------------------------‘);

777: Writeln (' Введіть довжини сторін трикутника – '); Writeln (' ціле або дробове число з (0, 3.4Е38]'); Writeln (' Підтвердження введення – клавіша ENTER'); Write (' Сторона А = ');

Readln (A);

Write (' Сторона В = ');

Readln (B);

Write (' Сторона С = ');

Readln (C);

If (((A+B)<C) Or ((A+C)<B) Or ((B+C)<A))

Then Begin

Writeln (' Такі відрізки не утворюють трикутник '); Writeln (' Введіть нові значення довжини сторін ');

GoTo 777;

End; { then } Else Begin

P (A+B+C)/2;

S SQRT(P*(P-A)*(P-B)*(P-C));

Writeln (' Площа трикутника S= ’, S:3:20');

Writeln (' Ціла частина значення площі Trunc(', S:3:20, ')= ', Trunc(S)); Writeln (' Ціла частина значення площі Int (', S:3:20, ')= ', Int(S:3:4));

Writeln (' Округлене до цілого значення площі Round (', S:3:20, ')=', Round(S));

Write (' Висновок про те, що значення площі більше довжини кожної із сторін - ');

Writeln ((S>A) AND (S>B) AND (S>C));

Writeln (' Програма роботу закінчила ');

End { Else};

Readln {Оператор відлагодження}

End. { main }

5. План відлагодження.

Відлагодження програми та контроль за результатами обчислень можна здійснити кількома способами:

використовуючи оператори відлагодження та встановлюючи контрольні точки (Debug →Add breakpoint) для призупинення виконання програми і перегляду результатів обчислень у вікні виведення (Debug →Output). Контрольну точку встановимо «на» операторі обчислення площі трикутника.

Фрагмент програми з операторами відлагодження та контролю:

Writeln (' Введіть довжини сторін трикутника – ');

32

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

Writeln(' дійсне число з діапазону (0, 3.4Е38]'); Writeln (' Підтвердження введення – клавіша ENTER'); Write (' Сторона А = ');

Readln (A);

Writeln (' А = ’, A:3:10');{Оператор відлагодження } Write (' Сторона В = ');

Readln (B);

Writeln (' B = ’,B:3:10');{Оператор відлагодження } Write (' Сторона С = ');

Readln (C);

Writeln (' C = ’, C:3:10');{Оператор відлагодження} P:=(A+B+C)/2;

{==== Оператори відлагодження і контролю =====}

Writeln (' Півпериметр трикутника Р= ’, P:3:20'); S P*(P-A)*(P-B)*(P-C);

Writeln (' Підкореневий вираз = ’, S:3:20');

{=========================================} S:= SQRT(P*(P-A)*(P-B)*(P-C)); {Контр. точка – breakpoint }

Інший спосіб відлагодження. В діалоговому вікні відлагоджувача «Додати спостереження» (Debug→Add Watch або CTRL+F7) вкажемо змінні та вирази (Watch expression), значення яких будемо спостерігати у вікні перегляду Watches (Debug→Watch) під час відлагодження програми.

Програму «запускатимемо» на виконання в покроковому режимі - Run→Step over (F8) або

Run→Trace info (F7).

6. Протокол роботи програми (відеокопія екрану).

КОНТРОЛЬНІ ЗАПИТАННЯ.

1.Що визначає тип даних?

2.Які типи даних є сумісними?

3.Які типи відносяться до простих типів та до стандартних?

33

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

4.З яких елементів складається вираз?

5.Чому обчислювальний процес називається розгалуженим?

6.Нарисуйте блок-схему оператора:

If <А1> Then If <А2> Then <B1> Else <B2>;

Якому Then відповідає Else?

7.Які ситуації аварійного завершення програми у Вашому варіанті завдання можна передбачити та опрацювати?

8.Як організувати форматне виведення результатів обчислень?

9.Як модифікувати програму без використання оператора GoTo?

10.Як організувати спостереження за значеннями змінних під час виконання програми?

ЗАВДАННЯ ДЛЯ САМОСТІЙНОГО ВИКОНАННЯ.

Завдання №1. У всіх задачах вивести один з обчислених результатів в трьох варіантах – реальне значення, цілу частину, округлене до найближчого цілого.

Задачі з математики.

1.Обчислити площу трикутника за заданими координатами його вершин. Перевірити, чи 4-та степінь значення площі є більшою за куб суми довжин його сторін і 5-ту степінь значення периметра.

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

3.Обчислити об’єм та площу поверхні паралелепіпеда за заданими довжиною, шириною і висотою. Перевірити, чи значення площі поверхні паралелепіпеда є більшим за значення його периметру і 4-ту степінь значення висоти.

4.Обчислити периметр і площу правильного шестикутника, вписаного в коло заданого радіусу. Перевірити, чи куб значення площі є меншим 5-ту степінь або більшим за куб значення периметру.

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

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

7.Обчислити площу і периметр рівнобічної трапеції за заданими довжинами її сторін. Перевірити, чи куб значення площі є більшим за 5-ту степінь значення периметру або 6-ту степінь висоти.

8.Обчислити довжину кола і радіус за заданою площею круга. Перевірити, чи 7-ма степінь значення площі круга є більшою за 10-ту степінь довжини кола і 15-ту степінь радіуса.

9.Обчислити радіус та об’єм сфери за заданою площею поверхні. Перевірити, чи корінь квадратний із 7-ої степені значення площі поверхні є меншою за квадрат об’єму сфери і 8-ту степінь її радіуса.

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

11.Обчислити координати точки, яка ділить у відношенні n1 : n2 відрізок, заданий координатами своїх кінців. Визначити довжину більшого відрізку.

12.Обчислити довжину ломаної з 5-ти ланок за заданими координатами вершин. Перевірити, чи куб значення довжини ломаної є більшим за 5-ту степінь суми довжин першої та останньої ланки.

13.Визначити радіуси вписаного та описаного кіл за заданими довжинами сторін трикутника. Перевірити, чи 7-ма степінь радіуса вписаного кола є більшою за куб радіуса описаного кола і меншою за 4-ту степінь його площі.

14.Визначити довжини висот (медіан, бісектрис) трикутника за заданими довжинами його сторін. Перевірити, чи трикутник є прямокутний. (Третя сторона має бути не більшою суми і не меншою модуля різниці двох сторін).

15.Перевірити, чи сума кубів цифр чотиризначного числа є більшою за добуток квадратів цифр цього ж числа, записаного у зворотному порядку.

16.За номером квартири визначити в якому під’їзді та на якому поверсі вона знаходиться, якщо задано кількість під’їздів та кількість поверхів в будинку. Перевірити, чи 5-та степінь номера квартири є більшою за 7-му степінь номера під’їзду і 6-у степінь номера поверху.

17.Перевірити, чи сума кубів цифр п’ятизначного числа є більшою за 9-ту степінь його другої (зліва) та 11-ту степінь останньої (зліва) цифр.

18.Поміняти між собою значення змінних А і В не використовуючи третю змінну. Перевірити, чи

34

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

eA B 5 cos(3B 2A) 7A7 ln(B3 17A) tg3(A B)

19.Обчислити суму перших n членів арифметичної прогресії із заданим першим членом і різницею. Перевірити, чи 5-та степінь першого члена прогресії є меншою за 7-му степінь n-го і 4-у степінь (n+1)- го членів прогресії.

20.Обчислити об’єм призми, бокові грані якої є квадратами, а основою є рівносторонній трикутник, вписаний в круг заданого радіуса. Перевірити, чи 4-та степінь значення площі бічної поверхні призми є більшою за куб значення її об’єму і 6-ту степінь площі основи.

21.Поміняти місцями значення змінних tgX та eУ, де Х,У – цілі, не використовуючи допоміжні змінні. Перевірити, чи tgX > eУ або | tgX- eУ| >17.

22.Обчислити площу кільця, якщо задана його ширина та відношення радіусів кіл. Перевірити, чи 7-та степінь значення площі є більшою 11-тої степені середнього геометричного радіусів кіл.

23.Розв’язати систему двох лінійних алгебричних рівнянь методом підстановки.

24.Обчислити за п’ять операцій 5-му і 13-ту степені дійсного числа, використовуючи тільки операцію множення.

25.Визначити, якою найменшою кількістю монет (1, 5, 10, 20 коп.) можна виплатити задану в копійках суму грошей.

Задачі з фізики.

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

2.Обчислити відстань між двома автомобілями через заданий час, якщо відома (задана) відстань між ними на початку руху і рухаються вони віддаляючись один від одного із заданими швидкостями. Перевірити, чи сума кубів значень швидкостей є більшою 7-ої степені їх різниці і меншою 3-ї степені значення прискорення вільного падіння.

3.Визначити час, через який впаде на дно ями заданої глибини м’яч, який кидають з її поверхні вертикально вгору із заданою швидкістю. Перевірити, чи 4-та степінь значення початкової швидкості м’яча є більшою за 5-ту степінь і меншою за 7-му степінь заданої глибини ями.

4.Визначити середню швидкість автомобіля на всьому шляху, якщо першу половину шляху він проїхав з однією (заданою), а другу – з іншою (заданою) швидкістю. Перевірити, чи корінь кубічний із 7-ої степені суми швидкостей є меншою за 4-ту степінь різниці їх квадратів.

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

6.Визначити загальний опір електричного кола з трьома заданими опорами, ввімкнених за схемою:

Перевірити, чи 7-ма степінь значення R3 є більшою за 5-ту степінь суми R1+R2 і меншою за 4-ту степінь R2.

7.Обчислити, на яку висоту за заданий час підніметься тіло, кинуте вертикально вгору із заданою швидкістю. Перевірити, чи 9-та степінь значення швидкості є більшою 7-ої степені значення часу і меншою 3-ої степені значення прискорення вільного падіння.

8.Обчислити координати центру ваги трьох матеріальних точок із заданими масами mi та координатами (xi,yi). Перевірити, чи знаходиться центр ваги на однаковій відстані від першої та другої точки.

9.Визначити, з якою найменшою швидкістю відносно води повинен плисти плавець, щоб точно попасти в точку на протилежному боці річки, якщо відома швидкість течії та кут між берегом і прямою, яка з’єднує точку відправлення і точку прибуття. Перевірити чи 6-та степінь швидкості плавця є більшою за 5-ту і меншою за 7-му степінь швидкість течії.

10.Обчислити швидкість осі котушки, яка може котитися поверхнею без ковзання і на внутрішній циліндр якої намотана нитка, кінець якої тягнуть в горизонтальному напрямі із заданою швидкістю, якщо задані радіуси внутрішнього та зовнішнього циліндрів. Перевірити, чи 5-та степінь швидкості осі котушки є більшою за 3-ту і меншою за 7-му степінь значення прискорення вільного падіння.

35

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

11.Обчислити прискорення та вагу тіла заданої маси, яке рухається по ідеально гладкій поверхні під дією заданої сили, направленої під заданим кутом до горизонту. Перевірити, чи 4-та степінь обчисленого прискорення є меншою за 5-ту і за 7-му степінь значення прискорення вільного падіння.

12.Обчислити початкову швидкість шайби, яка до повної зупинки пройшла задану відстань, ковзаючи по горизонтальній поверхні із заданим коефіцієнтом тертя. Перевірити, чи 6-ма степінь значення початкової швидкості шайби є більшою за 5-ту степінь і меншою за 7-му степінь заданої відстані.

13.Визначити загальний опір електричного кола з трьома заданими опорами, ввімкнених за схемою:

R1

R3

R2

Перевірити, чи 8-ма степінь значення R1 є більшою за 5-ту степінь суми R3+R2 і меншою за 7-му степінь R2.

14.Визначити час, за який пролетить задану відстань тіло, кинуте вертикально вгору із заданою швидкістю. Перевірити, чи 6-та степінь значення часу є меншою за куб значення швидкості або значення прискорення вільного падіння.

15.Обчислити відстань між двома автомобілями через заданий час, якщо відома (задана) відстань між ними на початку руху і рухаються вони назустріч один одному із заданими швидкостями. Перевірити, чи куб суми значень швидкостей є більшою 7-мої степені їх різниці і меншою 3-ї степені значення прискорення вільного падіння.

16.Обчислити ємність повітряного сферичного конденсатора, який складається з двох провідних концентричних сфер заданих радіусів. Перевірити, чи 4-та степінь обчисленої ємності є меншою за 5-ту степінь суми ємностей двох сфер і за 11-ту степінь значення діелектричної сталої.

17.Визначити максимальну висоту вертикальної стінки через яку гравець може перекинути м’яч, якщо він може кинути м’яч на задану відстань по горизонталі, а початкова швидкість м’яча не залежить від напрямку кидка.

18.Визначити прискорення, з яким рухаються два тіла заданої маси на ідеально гладкій поверхні, і натяг невагомої нерозтяжної нитки, якою вони зв’язані, якщо до одного з тіл прикладена задана сила. Перевірити, чи 7-ма степінь обчисленого прискорення є меншою за 4-ту степінь суми квадратів заданих мас і за 5-ту степінь значення прискорення вільного падіння.

19.Визначити висоту зображення предмета заданої висоти, який знаходиться на заданій відстані від тонкої збираючої лінзи із заданою фокусною відстанню. Перевірити, чи 11-та степінь обчисленої висоти є більшою за 7-ту степінь і меншою за 13-ту степінь висоти предмета.

20.Обчислити радіуси зон Френеля сферичної хвилі заданого радіуса для точки, яка знаходиться на заданій відстані (a+b) від джерела монохроматичних хвиль заданої довжини λ, якщо a>> λ і b>> λ. Перевірити, чи 10-ма степінь радіуса зони з номером 1 більша за m-ту степінь радіуса зони з номером m або (m+3)-ту степінь радіуса зони з номером m+3.

Завдання 2. Скласти програму для розв'язування наведеного нижче завдання, використовуючи команду Саsе. Задати вхідні дані так, щоб вибір був з чотирьох-семи альтернатив. Використати, де треба, змінні типу integer для чисел, char для літер і string для прізвищ, назв тощо. Команду Write застосовувати лише до змінних.

Приклад 2: Визначити назву столиці за назвою держави.

Program Capital;

Var land, cap : string[20]; num : 0..8;

Begin

Writeln (' Визначаємо назву столиці '); Writeln (' Введіть назву країни ');

Readln(land);

num:=0; {номер країни в списку}

If land='Австрія' Then num 1; If land='Болгарія' Then num 2; If land='Греція' Then num 3; If land='Італія' Then num 4; If land='Норвегія' Then num 5; If land='Франція' Then num 6;

36

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

If land='США' Then num 7;

If land='Україна' Then num 8;

Case num Of {визначення столиці за номером країни }

1:cap 'Відень';

2:cap 'Софія';

3:cap 'Афіни';

4:cap 'Рим';

5:cap 'Осло';

6:cap 'Париж';

7:cap 'Вашингтон';

8:cap 'Київ'

Else cap 'Такої країни не знаю'

End;

Writeln (' Столицею ', land, ' є ',cap);

Readln

End.

Варіанти завдань.

1.Вивести значення тактової частоти процесора за назвою моделі комп’ютера.

2.За заданою датою (число, номер місяця, рік) визначити дату наступного дня (число, назва місяця, рік).

3.Вивести назву підручника з інформатики за прізвищем автора.

4.За назвою країни вивести назву континенту, на якому вона розміщена.

5.Вивести назви пристроїв комп’ютера за назвою групи призначення (введення даних, виведення, мультимедіа).

6.Вивести прізвище студента за номером в списку групи.

7.За номером моделі автомобіля вивести її характеристики: рік випуску і ціну.

8.Вивести назву пункту призначення за номером потягу.

9.Вивести значення об’єму оперативної пам’яті за назвою моделікомп’ютера.

10.Вивести назву столиці за першою літерою назви країни.

11.Вивести назву країни за назвою фірми-виробника комп’ютерів.

12.Вивести назву дня тижня за його номером.

13.Вивести назви кінцевих зупинок трамваю за його номером.

14.Вивести назву пори року за номером місяця.

15.Вивести дані про кількість населення і площу міста за його назвою.

16.Вивести назву місяця і номер кварталу за номером місяця.

17.Вивести кількість зупинок маршруту автобуса за його номером.

18.Ввести першу букву назви країни. Вивести кількість населення і кількість міст цієї країни.

19.Вивести назву райцентру за його телефонним кодом.

20.Вивести кількість пар в день за номером дня тижня.

21.Є дані про шість товарів. Ввести числовий код одного з них, отримати довідку про ціну і кількість товару на складі.

22.Вивести кількість днів в місяці за його номером.

23. Вивести повну назву групи і кількість студентів у ній за її кодом.

24.Вивести довідку про час відправлення потягу за його номером.

25.Вивести значення довжини річки за її назвою.

26.Ввести число з діапазону 5..9. Вивести його значення трьома мовами.

27.Вивести символ за його кодом в таблиці ASCII.

28.Визначити порядковий номер дня високосного року за його числом та місяцем.

29.Вивести рік народження відомих вчених в галузі інформатики за їх прізвищем.

30.Вивести призначення вбудованої (стандартної) функції TurboPascal за її іменем.

37

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

ЛАБОРАТОРНА РОБОТА № 3 Проектування та відлагодження програм опрацювання простих типів даних

(реалізація циклічних алгоритмів)

МЕТА РОБОТИ: Навчитись проектувати алгоритми та програми опрацювання стандартних типів даних з використанням операторів циклу.

ЗАВДАННЯ:

Спроектувати алгоритми та програми розв’язання задач з використанням операторів циклу з передумовою (завдання 1, Табл.1, непарні варіанти) та післяумовою (завдання 1, Табл.1, парні варіанти) та оператора циклу із заданим числом повторень (завдання 2, Табл.2) за варіантами завдань, номери яких визначає викладач.

МЕТОДИЧНІ ВКАЗІВКИ

1.Перед виконанням роботи необхідно пригадати:логічну структуру програми на мові Turbo Pascal;правила опису стандартних типів даних;правила запису виразів;

синтаксис операторів присвоювання, розгалуження, введення-виведення.

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

3.Для реалізації циклічних обчислювальних процесів використовуються рекурсивні вирази, що описують будь-який член послідовності чисел. Наприклад, формула х = х + 1, у якій реалізована рекурсія, означає, що до вмісту комірки пам'яті з ім’ям х додається 1 і результат записується в х. Така формула називається рекурентною і зв’язує між собою послідовність обчислення значень змінної х. Вихідними даними для кожного наступного кроку є результати попереднього.

4.Якщо ряд заданий явно (а не загальним членом), то для обчислення суми членів ряду потрібно вивести формулу для загального члена або записати рекурентну формулу для обчислення значення наступного члена ряду. Для отримання рекурентної формули обчислимо відношення наступного члена ряду до поточного (або поточного до попереднього):

xn+1/xn=A,

де A – деякий вираз, Тоді

xn+1=Axn

Значення

n

Sxi

i 1

приймаємо за шукане значення суми ряду з точністю ε, якщо |xn+1|.

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

ВІДОМОСТІ З ТЕОРІЇ.

Цикл задається (описується) оператором циклу, який складається із заголовку та тіла циклу. Заголовок циклу – це відповідний оператор циклу (For-To-Do, While-Do, Repeat-Until), а тіло циклу – це простий або складений оператор, який багатократно повторюється. Керування циклом (кількістю повторень) здійснюється за допомогою спеціальної змінної (їх може бути декілька) – параметра циклу. Величина зміни параметра циклу називається кроком циклу. Кожне виконання тіла циклу (прохід циклу) називається ітерацією.

Розрізняють регулярні (детерміновані, арифметичні) цикли з відомим числом повторень та ітераційні цикли з невідомим числом повторень.

1. Регулярні цикли. Синтаксис операторів:

For <пц> <пз> To <кз> Do <тіло_циклу>;

For <пц> <кз> DownTo <пз> Do <тіло_циклу>;

38

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

Тут:

пц – параметр циклу (лічильник, керуюча змінна) – ідентифікатор змінної порядкового типу;

пз, кз – початкове та кінцеве значення параметра циклу відповідно – вирази порядкового типу ( пз ≤ пц ≤ кз );

тіло_циклу – довільний оператор Turbo Pascal.

Спочатку обчислюються вирази пз та кз і порівнюються. Якщо <пз> <кз>, то параметру циклу не присвоюється ніякого значення і тіло циклу не виконується жодного разу.

Якщо <пз> <кз>, то здійснюється присвоювання <пц> := <пз> (або <пц>:=<кз> ), виконується тіло циклу і значення параметра циклу змінюється на +1 (To) або на -1 (DownTo). Обчислюється вираз <пц> <> <кз>. Якщо він набуває значення «true», тобто нерівність виконується, то знову виконується тіло циклу з подальшою зміною значення параметра циклу і обчисленням виразу <пц> <> <кз>. Якщо після чергової зміни значення параметра циклу стає рівним <кз>, то виконується тіло циклу і оператор For закінчує роботу, а керування в програмі передається на наступний за ним оператор. Після виходу з циклу значення параметра циклу залишається рівним <кз> (в IDE Turbo Pascal 7.0 Borland International Inc.).

Примітка 1: Так як в заголовку циклу перевіряється умова <пц> <> <кз> , то в тілі циклу не дозволяється змінювати параметр циклу. В PascalABC ця ситуація контролюється компілятором, в Turbo Pascal 7.0 – ні.

2. Ітераційний цикл з передумовою. Синтаксис оператора:

While <умова> Do < тіло_циклу >;

Тут:

умова – умова продовження повторень – вираз логічного типу;

тіло_циклу – довільний оператор Turbo Pascal.

Тіло циклу виконується тільки тоді коли умова виконується (логічний вираз приймає значення «true»). Якщо умова не виконується (логічний вираз приймає значення «false»), відбувається вихід з циклу.

3. Ітераційний цикл з післяумовою. Синтаксис оператора:

Repeat < тіло_циклу > Until < умова >;

Тут:

умова – умова закінчення циклу – вираз логічного типу;

тіло_циклу – послідовність довільних операторів Turbo Pascal.

Тіло циклу виконується до тих пір, поки умова не виконується (логічний вираз має значення «false»). Якщо умова виконується (логічний вираз приймає значення «true»), відбувається вихід з циклу.

Примітка 2: При програмуванні ітераційних циклів необхідно забезпечити обов'язкове виконання умови виходу з циклу, тобто, збіжність ітераційного процесу. Для цього необхідно забезпечити вплив хоч одного із операторів тіла циклу на значення умови (повинна змінюватись хоча б одна змінна, яка входить в умову). В противному випадку цикл буде виконуватись нескінченно («зациклення» програми).

Приклад 1.

Звіт про виконання лабораторної роботи №3.2. Завдання №1, варіант № ххх.

Обчислити суму членів ряду s 1

1

 

 

1

 

1

із заданою точністю та визначити кількість доданків

 

 

 

3!

 

5!

7!

(членів ряду) для досягнення цієї точності. Виконати програму тричі для різних значень точності (0,01; 0,001; 0,0001).

1. Аналіз задачі на змістовному рівні, обґрунтування вибору методу розв’язування задачі та її математична модель.

Математичну модель задачі сформулюємо в наступному виді:

n 1

zn

 

S n 1 zi ,

,

i 2

 

 

39

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)

де zi загальний член ряду, який визначається за формулою:

zi

( 1)i 1

1

 

(2i 1)!

 

 

Обчислювальний процес (процес сумування) можна описати формулою

S1=1; Si =Si-1 + zi, (i = 2,…, n-1),

або в іншій нотації

S S + zi, (i = 2,…, n-1).

Обчислення факторіалу опишемо формулою

(2i -1)! = 1·2·3·…·(2i-3)·(2i-2)·(2i -1).

Відзначимо, що заданий ряд є розкладом функціїSin (1).

2. Проектування алгоритму розв’язування задачі.

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

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

Валгоритмі використаємо ще одну циклічну структуру – для обчислення факторіалу. Для цього введемо допоміжну змінну – лічильник множників у формулі обчислення факторіалу. Так як для кожного і-го члена ряду ця кількість множників відома (2і-1), то можна використати арифметичний цикл.

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

Очевидно, що базова структура слідування також буде використовуватись в даному алгоритмі.

b)Блок-схема алгоритму зображена на Рис. 1.

40

Print to PDF without this message by purchasing novaPDF (http://www.novapdf.com/)