Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Turbo Pascal 7.0.doc
Скачиваний:
8
Добавлен:
07.11.2018
Размер:
341.5 Кб
Скачать

§ 5. Цикли

Цикл  це процес виконання певного набору команд деяку кіль­кість разів. Цикл реалізують або за допомогою конструкції if-goto, або, що значно ефективніше, за допомогою команд циклу. Є три ви­ди команд циклів: з параметром, з передумовою та з післяумовою.

1. Команда циклу з параметром (for). Є два різновиди команди for. Розглянемо перший:

for <параметр> := <вираз 1> to <вираз 2> do <команда 1>;

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

Дія команди. Параметрові циклу присвоюється значення виразу 1. Якщо це значення менше-рівне, ніж значення виразу 2, то виконуєть­ся команда 1. Після виконання команди 1 значення параметра автоматично збільшується на 1 і знову порівнюється зі значенням виразу 2 і т.д. Коли значення параметра стане більшим, ніж зна­чення виразу 2, то виконується наступна після циклу команда.

Приклад. Нехай s=0. Після виконання команди циклу

for i:=4 to 6 do begin s:=s+i; z:=2*i end;

змінна s набуде значення 0+4+5+6=15, а змінна z  12.

Розглянемо другий різновид команди циклу for:

for <параметр> := <вираз 1> downto <вираз 2> do <команда 1>;

Ця команда діє як попередня, але крок зміни параметра є -1

Приклад. Нехай s=0. Після виконання команди циклу

for i:=6 downto 4 do begin s:=s+i; z:=2*i end;

змінна s набуде значення 0+6+5+4=15, а змінна z  8.

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

Задача 1. Побудувати таблицю відповідності між унціями та грамами, якщо 1 унція = 28,353495 г. Початкове значення кіль­кості унцій (uncia), крок зміни (krok) цього значення та кількість рядків (kil) у таблиці задати самостійно у режимі діалогу.

program Міrа;

uses Crt;

const line='_ _ _ _ _ _ _ _ _ _ _ _ _ _ ';

var uncia, gramy, krok: real; i, kil: integer;

begin

clrscr;

write('Введіть початкове значення, крок зміни та ');

writeln(' кількість рядків у таблиці');

readln(uncia, krok, kil);

writeln; {Формуємо порожній рядок}

writeln(line); {Формуємо заголовок таблиці}

writeln('Унції Грами');

writeln(line);

for i:=1 to kil do {Виводимо таблицю на екран}

begin

gramy:=28.353495*uncia;

writeln(uncia:5:2, ' ', gramy:10:6);

uncia:=uncia+krok;

end;

writeln(line); readln

end.

Завдання 1. Розв’язати задачу №5 свого варіанта.

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

program SumaDobutok;

uses Crt;

var i:integer;

suma, dob, y:real;

fact: longint;

begin {Спочатку сума дорівнює нулю, а добуток одиниці}

clrscr;

suma:=0; dob:=1; fact:=1;

for i:=1 to 25 do

begin

fact:=fact*i; {Обчислюємо i!=1*2*3*…i}

suma:=suma+5*sqr(i)/fact; {Обчислюємо суму та }

dob:=dob*i*i; {добуток}

end;

y:=suma+dob;

writeln('y=', y:7:2);

readln

end.

Завдання 2. Розв’язати задачу №6 свого варіанта двома способа­ми: 1) за допомогою команди for-to; 2) за допомогою команди for-downto. Довідка: у курсі вищої математики обґрунтовується, що обчислення скінченної суми другим способам дає точніший резу­льтат, що пов’язано з проблемою заокруглення чисел. Порівняйте отримані значення.

2. Команда циклу з передумовою (while) має вигляд

while <логічний вираз> do <команда 1>;

Дія команди. Доки значення логічного виразу істинне, викону­ється команда 1. Істинний логічний вираз описує умову продовжен­ня процесу виконання команди циклу.

Приклад. Нехай змінні х, s мають значення х=4, s=0. Після ви­конання команди

while x<=8 do begin s:=s+x; x:=x+1 end;

вони набудуть значень s=4+5+6+7+8=30, x=9.

Приклад. Вивести таблицю чисел від 20 до 30, їхні квадрати та куби за допомогою команди while можна так:

і:=20;

while і<=30 do

begin

writeln(i:4, i*i:6, i*i*i:8);

і:=і+1

end;

Приклад. Визначити дійсне додатне число а, для якого викону­ється співвідношення а/2 = 0 в комп’ютерній арифметиці дійсних чисел. Таке число характеризує нижню додатну межу типу даних real.

program MinRealNumber;

uses Crt;

var a:real;

begin

clrscr;

a:=1;

while а/2>0 do a:=a/2;

writeln('a=', a) ; {Відповідь: а = 2.9E-39}

readln

end.

Задача 3. Протабулювати функцію у = sinx на проміжку [0; 3,1], з кроком h = 0,1 і обчислити середнє арифметичне (s1) значень функції більших, ніж 0,1 і менших, ніж 0,6.

program FindSerednie;

uses Crt;

var x, y, s, s1, h, xk: real; n: integer;

begin

clrscr;

x:=0; xk:=3.1; h:=0.1;

s:=0; n:=0;

while x<=xk+h/2 do

begin

у:=sin(x) ;

writeln(x:3:1. y:6:2);

if (y>0.1) and (y<0.6) then

begin s:=s+y; n:=n+1 end;

x:=x+h;

end;

if n>0 then

begin s1:=s/n; writeln ('Середнє =', s1) end;

else writeln('Таких значень немає n=0');

readln

end.

Задача 4. Нехай x  деяке число, а e=0.001. Обчислити суму елементів нескінченно спадної знакозмінної послідовності {аn}, де an=(-1)n(2x)n/n! такі, що задовольняють умову |an|>e, п=1,2,...,. Виз­начити кількість доданків. Вивести на екран результати обчислень.

program Suma1;

uses Crt;

const e=0.001;

var suma, x, a: real; fact, n, z: integer;

begin

clrscr;

writeln('Введіть деяке число x:'); readln(x);

suma:=0; n:=1; fact:=1; a:=-2*x; z:=-1;

while abs(a)>e do

begin

suma:=suma+a;

n:=n+1; {Обчислимо an+1}

z:=-z; {Обчислюємо (-1)n+1}

fact:=fact*n; {Обчислимо факторіал}

a:=z*exp(n*ln(2*x))/fact {Див. зауваження}

end;

writeln('Cyмa =', suma:5:2);

writeln('Кількість доданків =', n-1);

readln

end.

Зауваження. Є більш економний спосіб обчислення значення змінної а (саме даної послідовності), використовуючи її попереднє значення і команду присвоєння вигляду а:=а*М, де для даного прикладу М=-х/(n+1). Реалізуйте цей спосіб самостійно.

Завдання 3. Розв’яжіть задачу .№7 свого варіанта трьома спосо­бами: 1) використовуючи програму-зразок Suma1; 2) модифікував­ши програму, враховуючи зауваження (це буде програма Suma2); 3) модифікувавши програму-зразок за допомогою такої конструкції для обчислення знакозмінної суми: if odd(n) then suma:=suma-a else suma:=suma+a (це буде програма Suma3). Порівняйте резуль­тати. Збережіть файли програм, оскільки вони будуть потрібні для виконання завдання №5 з §8.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]