Программирование циклических алгоритмов
В Паскале существуют 3 оператора цикла:
Цикл с постусловием («До»)
Repeat
M1;
M2;
:
Mk;
Until N;
Блок - схема
:
:
-
+
Repeat – повторять;
Until – до;
M1, M2,…, Mk – группа операторов, они называются операторами тела цикла.
N – выражение, имеющее логическое значение (условие выхода из цикла)
Выполняется:
1. Выполняются операторы M1, M2,…, Mk;
2. Вычисляется значение N;
3. Если N – True, то оператор цикла заканчивает свою работу, иначе перейти к пункту 1
Среди операторов тела цикла обязательно должен присутствовать оператор, изменяющий значение выражения N;
Задача 1.
Найти произведение чисел от 1 до 10.
Решение:
Program Ci1;
Var K:Integer;
P:Real;
Begin
K:=0;P:=1;
Repeat
K:=K+1;
P:=P*K;
Until K=10;
Writeln(’P= ’,P:10:5);
End.
Задачи:
1. Даны числа от 1 до N. Найти:а) сумму всех чисел; б) произведение всех чисел; в) среднее арифметическое.
2. Вычислить сумму всех двузначных чисел.
3. Вычислить сумму чисел: S=1+3+5+…+R где R-нечетное.
4. Вычислить произведение чисел: P=2+4+6+…+R где R-четное.
5. Найти значения функции y=x2 при х=1,3,5,…,15.
6. Найти значения функции р=(р2+15) при р=2,4,6,…,20.
Оператор цикла с предусловием «Пока»
While N do M;
-
+
While – пока;
Do – выполнять;
N – выражение, имеющее логическое значение (условие входа в цикл);
M – любой оператор в единственном числе. Если по смыслу задачи надо повторять группу операторов, то их надо превратить в один составной оператор (заключить в операторные скобки). Этот оператор или группа операторов называется телом цикла;
Выполняется:
1. Вычисляется значение N;
2. Если N – True, то выполняется оператор M (группа операторов), иначе оператор цикла заканчивает свою работу;
3. Перейти к пункту 1.
Среди операторов тела цикла обязательно должен присутствовать оператор, изменяющий значение выражения N;
Задача 2.
Даны числа от 1 до N (N – четное). Найти: S=
Решение:
Program Ci2;
Var K,N:Integer;
S:Real;
Begin
Writeln(’Введите четное число’);
Readln(N);
K:=0;S:=0;
While K<N do
Begin
K:=K+2;
S:=S+1/K;
End;
Writeln(’S= ’,S);
End.
Задачи:
1. Даны числа от 1 до N. Найти: Р=
2. Даны числа от 1 до N (N – нечетное). Найти: S=
3. Найти значение Х: Х=(1*3*5*…*N)/(1+3+5+…+N) (N – нечетное).
4. Даны числа от 1 до N. Вычислять: S= вплоть до слагаемого, меньшего заданного Е (Е<1).
5. Вычислить среднее арифметическое чисел K,K+1,K+2,…,K+N; (K<N).
6. Вычислить сумму чисел: S=N+(N+1)+(N+2)+(N+3)+…+(N+R); (N<R).
7. Вычислить произведение чисел: P=N*(N+1)*(N+2)*(N+3)*…*(N+R); (N<R).
8. Вычислить: P=1+(1*2)+(1*2*3)+(1*2*3*…*R).
9. Вычислить: P=1*(1+2)*(1+2+3)*(1+2+3+…+R).
10. Найти значения функции M=N2-N при N={2,4,6,…,T} (T-четное).
11. Найти значения функции X=Y2 *(Y 2 -Y)/Y при Y={N,N*1,N*2,…,N*M} (N<M).
Цикл с параметром
Оператор цикла с параметром имеет 2 модификации:
For K:=N1 to N2 do M; (с возрастанием параметра)
For K:=N1 downto N2 do M; (с убыванием параметра)
-
+
For – для;
To – до;
Downto – уменьшая до;
K – переменная порядкового типа (Integer, Char, Boolean), называется параметром цикла;
N1, N2 – выражение, имеющее значение того же типа, что и параметр K;
M – любой оператор в единственном числе;
Если по смыслу задачи надо повторять группу операторов, то их надо превратить в один составной оператор (заключить в операторные скобки):
Выполняется:
1. Вычисляется значение N1, N2;
2. K:=N1;
3. Проверяется условие:
- K<=N2 (to)
- K>=N2 (downto)
4. Если условие не выполнено, то выполнение оператора цикла заканчивается. Иначе выполняется оператор M;
5. K – получает приращение:
- K:=succ(K) (to);
- K:=pred(K) (downto);
6. Переход к пункту 3;
В турбо Паскале в отличие от Бейсика цикл с параметром реализован как цикл «пока» и значит оператор M может ни разу не выполнится.
Задача 3.
Вывести коды всех строчных символов латинского алфавита.
Решение:
Program Ci3;
Var S:Char;
Begin
For S:=’a’ to ’z’ do
Writeln(’У символа - ’,S,’ код ’,Ord(S));
End.
Задача 4.
Вывести на экран цифры в обратной последовательности
Решение:
Program Ci4;
Var R:Integer;
Begin
For R:=9 downto 1 do Write(R,’ ’:4);
End.
Задача 5
Вывести на экран 10 случайных чисел в диапазоне от 0 до 100.
Решение:
Program Ci4;
Const X=100;
Var Y,R:Integer;
Begin
Randomize; {инициализирует генератор случайных чисел}
For R:=1 to 10 do
Begin
Y:=Random(X);
Writeln(R,’=’,Y);
End;
End.