Программирование циклических алгоритмов

В Паскале существуют 3 оператора цикла:

 

7.1.Цикл с постусловием («До»)

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.

7.2.Оператор цикла с предусловием «Пока»

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.