Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
4 основи програмування книга.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
1.77 Mб
Скачать

7. Оператори повторення з параметром. Масиви

7.1. Оператор циклу з параметром

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

Для реалізації циклічних алгоритмів у мові Паскаль використовуються оператори повторення:

  • оператор циклу з параметром;

  • оператор циклу з передумовою;

  • оператор циклу з постумовою.

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

For <параметр>:=<початкове значення> to <кінцеве значення> do <оператор>

або

For<параметр>:=<початкове значення> downto <кінцеве значення> do <оператор>

Синтаксична діаграма оператора циклу з параметром:

Оператор циклу

з параметром

Тут

Ім’я – це ім’я змінної - параметра циклу;

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

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

Оператор – тіло циклу.

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

Якщо початкове і кінцеве значення розділяє службове слово to, то після виконання оператора (тіло циклу) параметр циклу v приймає значення Succ(v), якщо ж між початковим і кінцевим значенями поставити downto, то параметр циклу v після виконання тіла циклу приймає значення Pred(v). Зокрема, якщо параметр v має тип Integer, то одночасно з виконанням тіла циклу здійснюється або присвоювання v := v + 1 (to), або v := v - 1 (downto). Додатково змінювати значення параметра в тілі циклу не рекомендується, оскільки контроль за правильністю виконання такого циклу є дуже складним. Якщо в циклі з to початкове значення більше, ніж кінцеве, то цикл не виконується взагалі. Аналогічно, якщо в циклі з downto початкове значення менше, ніж кінцеве, цикл також не виконується.

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

Приклад 7.1. Знаходження факторіалу натурального числа.

Program NFactorial;

var

Argument: Integer;

Procedure InpData (Var Argument: Integer);

Begin

Write(‘ введіть аргумент факторіала ‘);

Readln(Argument) ;

End;

Function Fact(Argument: Integer): Integer;

Var Factorial, i : Integer;

Begin

Factorial := 1;

For i := 2 to Argument do Factorial := i*Factorial;

Fact:= Factorial;

End;

Begin

InpData (Argument);

Writeln(Argument,’! = ‘, Fact (Argument))

End.

У цьому прикладі

i - параметр циклу;

2 - початкове значення параметра циклу;

Argument - кінцеве значення параметра циклу;

Factorial := i*Factorial - тіло циклу.

Відмітимо, що на вході Argument > 7 значення Factorial вийде за межі типу Integer і результат буде неправильним.

 

В наступному прикладі обчислюються суми  xn/n2,  xn/n3

n=0 n=0

Приклад 7.2.

Program SeriesSumma;

Var

Sum1, Sum2, x : Real;

Index, n : Integer;

Procedure InpData (Var x : Real; Var n: Integer);

Begin

Write(‘ введіть x і n ‘);

Readln(x, n); {Ініціалізація змінних, що використовуються в циклі}

End;

Procedure Sum (x : Real; n: Integer; Var Sum1, Sum2: Real);

Var Index: Integer;

u1, u2 : Real;

v : Real;

Begin

Sum1 := 1;

Sum2 := 1; { суми рядів }

v := 1; { x^n }

For Index := 1 to n do begin

v := v*x;

u1 := v/Sqr(Index);

u2 := u1/Index;

Sum1 := Sum1 + u1;

Sum2 := Sum2 + u2;

end;

End;

Begin

InpData (x, n);

Sum (x , n, Sum1, Sum2);

Writeln( ‘ S1 = ‘, Sum1,’ ‘,’ S2 = ‘, Sum2)

End.

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

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

Приклад 7.3. Табулювання функції дійсної змінної.

Рrogram Tabulation;

const

Pi=3.14159262;

var

MinX, MaxX, Step: Real;

Procedure InpData (Var MinX, MaxX , Step: Real);

Begin

Write(‘Введіть межі табулювання ‘);

Readln(MinX, MaxX);

Write(‘Введіть крок табулювання ‘);

Readln(Step);

End;

Procedure Tabul(Var MinX, MaxX , Step: Real );

x, y : Real;

Coef : Real;

i, n : Integer;

Begin

n := Round((MaxX - MinX)/Step);

x := MinX;

Coef := 1/Sqrt(Pi);

for i := 0 to n do begin

y := Coef * exp(-Sqr(x)/2);

writeln(‘ x = ‘,x,’ y = ‘,y);

x := x + Step

end;

End;

Begin

InpData (MinX, MaxX , Step);

Tabul(MinX, MaxX , Step);

End.

Програма табулює функцію y=1/*exp(-x2/2) в інтервалі значень [MinX, MaxX] з кроком Step. Зверніть увагу на те, що перед входом у цикл обчислюється N - верхня межа параметра циклу, а в тілі циклу обчислюється наступне значення х.

Приклад 7.4.

program Alfabet;

Var

Letter : char;

Begin

For Letter := ‘z’ downto ‘a’ do Write(Letter, ‘,’)

End.