Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Учебное пособие 3000555.doc
Скачиваний:
31
Добавлен:
30.04.2022
Размер:
19.12 Mб
Скачать

2.2.8. Вложенные циклы

Оператор, повторяемый в цикле, сам может быть циклом. Решение многих задач требует такой вложенности циклов. Ограничений на количество и глубину вложения циклов в Паскале нет.

Пример. Вычислить выражение

1*2*3+4*5*6 + 7*8*9

program Mylti_Summa;

var

i,j,s,p: integer; begin

s:=0;

for i:=0 to 2 do

begin

p:=1;

for j:=l to 3 do

p:=p*(j+3*i);

s:=s+p;

end;

writeln(‘Выражение равно ', s); end.

Пример. Вычислить выражение

1*2*3*4*5 + 6*7*8*9*10 +11*12*13*14*15.

Задача могла бы быть решена аналогичной программой, однако возникает проблема, заключающаяся в том, что результат получится больше, чем может быть выражен переменной целого типа. Поэтому необходимо для хранения значений произведения и суммы использовать действительные числа. При этом при вычислении необходимо обеспечить преобразование типов от целых к действительным. Это достигается использованием одновременно переменных как действительного, так и целого типа.

program Mylti_Summa_real; var

i,j: integer;

s,p:real; begin

s:=0;

for i:=0 to 2 do begin

p:= 1;

for j:=l to 5 do

p:=p*(j+5*i); (*целые преобразуются*)

(* в действительные*)

s:=s+p;

end;

writeln('Выражение равно ', s); end.

Другой способ - при работе с Турбо-Паскалем можно использовать предопределенный тип длинных целых Longlnt, который представляется 32 битами и поэтому позволяет работать с большими числами (от -2147483648 до 2147483647).

Пример. Вычислить и вывести таблицу факториалов целых чисел от 1 до N (N вводится). Факториал числа N определяется формулой N! = 1*2*..*(N-1)*N.

Поскольку значения факториалов растут очень быстро, используем действительный тип

program Table_of_factorials;

var

i, j,n: integer; f:real;

begin

write('Введите максимальное значение для вычислений ');

read(n);

for i:= 1 to n do begin f:=l;

for j:=l to i do (* вычисляется i! *)

begin

f:=f*j; (*целые преобразуются*)

(* в действительные*) end;

writeln ('Факториал ',i,' = ',£); end; end.

2.2.9. Прочие операторы

Оператор перехода позволяет изменить естественную последовательность выполнения операторов в программе (в порядке их записи) и перейти к выполнению какого-либо другого оператора.

Оператор, к которому осуществляется переход, должен иметь метку (быть помеченным).

Метка ставится перед оператором и отделяется от него двоеточием. В качестве метки может выступать или идентификатор, или целое число от 0 до 9999. Все метки должны быть описаны в разделе описания меток. Это раздел располагается обычно сразу за заголовком программы и имеет вид

LABEL метка_1, метка_2, ..., метка_N;

Схема самого оператора перехода имеет вид GOTO метка;

Пример. Вводить целые числа и определить их сумму. Прекратить после ввода числа 0. Решим данную задачу при помощи оператора перехода.

Program Sum_with_goto;

label 1;

var

s, n: integer; begin s:=0;

1:read(n);

if n<>0 then begin

s:=s+n;

goto 1;

end;

writeln('Cyммa равна ', s); end.

Оператор перехода не рекомендуется использовать, так его применение делает программы запутанными и трудными для понимания.

Любой алгоритм можно модифицировать таким образом, чтобы избавиться от необходимости использовать оператор перехода.

Пустой оператор не содержит никаких символов и не выполняет никаких действий. Обозначается просто точкой с запятой. Применяется в тех случаях, когда по правилам записи должен быть оператор, но по смыслу его нет. Наличие пустого оператора делает корректными записи типа

1:;

а:=1;;;

и тому подобные.

Оператор вызова процедуры будет рассмотрен в разделе, связанном с процедурами.