Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Основы прог TURBO PASCAL.doc
Скачиваний:
18
Добавлен:
11.11.2018
Размер:
580.61 Кб
Скачать

Организация программ с циклами

Для программирования многократно повторяющихся одинаковых действий в Turbo Pascal (TP) применяются три вида операторов цикла (повторения):

  1. Оператор цикла For, имеющий два варианта записи:

а) инкрементный (с возрастанием переменной цикла)

For i := m1 to m2 do s ;

б) декрементный (с убыванием переменной цикла)

For i := m1 downto m2 do s ;

где i - параметр цикла - переменная порядкового типа (integer и т.п.);

s - тело цикла (любой оператор, включая оператор цикла);

m1, m2 - начальное и конечное значения переменной цикла; при этом для инкрементной формы m1<m2 и шаг изменения счетчика цикла равен +1, а для декрементного варианта оператора m1>m2 и шаг цикла равен -1.

Пример: Составить программу для вычисления произведения

при n = 10, x1 = 2,1 (начальное значение х), xn = 3 (конечное значение х).

Program Example_1;

Uses Printer;

Var P,x,h,x1,xn:real; n,i:integer;

BEGIN

writeln('Введите переменные:');

write('n='); readln(n);

write('x1='); readln(x1);

write('xn='); readln(xn);

h:=(xn-x1)/(n-1); {вычисление. шага изменения x}

P:=1; x:=x1; {задание нач. значений переменным}

for i:=1 to n do

begin

P:=P*(2*x+i)/(sqr(2*i)+1);

x:=x+h;

end;

writeln(Lst,'P=',P:12,' при x1=',x1:4:1,',

xn=',xn:4:1);

END.

  1. Оператор цикла While:

While b do s ;

где b - выражение логического типа (условие); s - тело цикла.

В этом операторе сначала проверяется условие b. Если оно имеет значение true, то выполняется s, иначе управление передается оператору, следующему за оператором while.

  1. Оператор цикла Repeat:

Repeat s Until b ;

где b - логическое условие; s - тело цикла (не требует заключения в операторные скобки begin .. end).

В отличие от while здесь сначала выполняется s, а затем проверяется условие b. Если оно примет значение true, то цикл завершается.

Блок-схемы выше рассмотренных операторов повторения представлены в табл. 2.

Для более гибкого управления циклическим вычислительным процессом в состав ТР 7.0 включены две процедуры, которые практически исключают необходимость использования оператора goto:

Break - реализует немедленный выход из цикла; при этом управление передается оператору, следующему за циклом.

Continue - обеспечивает досрочное завершение очередного прохода цикла.

Они обычно включаются в тело цикла через дополнительно введенный условный оператор.

В операторах While и Repeat возможно зацикливание, если условие завершения цикла в операторе While постоянно сохраняет значение true, а в операторе Repeat - значение false. Для исключения этой ситуации необходимо предусмотреть дополнительную проверку на достижение заданного предельного числа повторений цикла с выходом из цикла, в частности, с помощью оператора break.

Таблица 2

Блок-схемы операторов цикла

Инкрементный оператор цикла For

Декрементный оператор цикла For

true

Оператор While

Оператор Repeat

Использование операторов цикла во многих случаях обусловлено необходимостью применения в программах переменных с индексами (массивов). Их описание осуществляется двумя эквивалентными способами:

  1. с определением типа массива

Type

<имя типа> = array [<список диапазонов индексов>]

of <тип элементов>;

Var

<имя массива> : <имя типа> ;

  1. без определения типа массива

Var

<имя массива> : array [<список диапазонов индексов>]

of <тип элементов>;

Здесь <имя типа>, <имя массива> - идентификаторы;

<список диапазонов индексов> - в общем случае список выражений порядкового типа, кроме Longint, в частном случае - список диапазонов индексов;

<тип элементов> - тип элементов массива (real, integer и т.д.).

Первый способ обладает большей общностью. Однако чаще используется второй, т.к. он проще.

Примеры определения массивов:

Type m = array [1..5] of byte;

Var n : m;

sales : array [1989..1999] of integer;

a,b,c : array [1..10,1..10] of real;

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

for i:=1 to 10 do

for j:=1 to 10 do

begin c[i,j]:=0;

for k:=1 to 10 do c[i,j]:=c[i,j]+a[i,k]*b[k,j]

end;

В ТР одним оператором присваивания все элементы одного массива можно передать другому массиву того же типа, например:

Var p,q : array [-5..5] of single;

begin .. p : = q; .. end.

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

Примером применения операторов циклов с массивами служит программа Tab_1.

Составить таблицу значений функции:

,

где x и y заданы в виде одномерных массивов: x = 0.1, 0.3, 0.5;

y = 1, 2, 3, 4.

Program Tab_1;

Uses Printer;

Const m=3;n=4;

Var x,y:array[1..10]of real; f:array[1..10,1..10]of real;

i,j:integer; a,b:real;

BEGIN

writeln('Введите элементы массивов x и y:');

for i:=1 to m do {Ввод элементов массива x}

begin

write('x[',i,']='); readln(x[i]);

end;

for j:=1 to n do {Ввод элементов массива y}

begin

write('y[',j,']='); readln(y[j]);

end;

for i:=1 to m do

for j:=1 to n do

begin

a:=exp(x[i]*y[j])/(x[i]*y[j]);

b:=y[j]*exp(4*ln(x[i]))/4;

f[i,j]:=a+b;

writeln(Lst,'f=',f[i,j]:10,' при x=',

x[i]:4:1,' и y=',y[j]:4:1);

end;

END.

Файл с текстом программы содержится в каталоге MYFILE.