Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
информатика ЗКМЗКЕ_1курс / Основы алг-ции и прог-ие.doc
Скачиваний:
81
Добавлен:
05.06.2015
Размер:
1.88 Mб
Скачать

Var X: real; {аргумент }

EPS: real; {точность вычисления }

Y0: real; {предыдущее приближение}

Y1: real; {очередное приближение }

A: real; {начальное приближение }

Begin

Readln( A,EPS,X);

If X>0 then

Begin

Y0:=A;

Y1:=(Y0+X/Y0)/2;

While abs(Y1-Y0)>EPS do

Begin

Y0:=Y1;

Y1:=(Y0+X/Y0)/2

End;

Writeln(‘Y1=’,Y1,’ при X=’,X)

End

Else

Writeln(‘Число ’, X, ' меньше нуля');

End.

Оператор цикла с постусловием:

REPEAT

< оператор 1 > [;

< оператор 2 >] [;

< оператор n >]

UNTIL <логическое выражение>;

Данная конструкция оператора цикла используется, если число повторений цикла заранее неизвестно, но известно условие выхода из цикла. Управляющее циклом логическое выражение является условием выхода из цикла. Если оно принимает значение TRUE, то выполнение цикла прекращается. При использовании оператораREPEATцикл выполняется хотя бы один раз. В отличие от других операторов цикла оператор данного вида не требует операторных скобокBEGIN - END, так как их роль выполняютREPEAT - UNTIL.

Вычисление F=N!с использованием конструкцииREPEATUNTIL будет выглядеть следующим образом:

. . .

F:=1;

I:=1;

Repeat

F:=F*I;

I:=I+1;

Until I>N;

. . .

Рассмотрим другой пример использования этого оператора. Вводится последовательность чисел. Определить количество элементов кратных 7.

Program rep;

Var A,K: integer;

C : char;

Begin

K:=0;

Repeat

Writeln(‘ Введите очередное число ‘);

Readln( A);

If A mod 7=0 then K:=K+1;

Writeln(‘Хотите выйти из цикла? д/y’ );

Readln( C ) ;

Until ( C=’д‘ ) or ( C=’y’) ;

Writeln(‘kol=’,K);

End.

Здесь условием выхода из цикла является ввод символов Д илиYпри ответе на вопрос о выходе из цикла. Если вводится одна из этих букв, логическое выражение, записанное послеUNTIL,становитсяTRUEи происходит выход из цикла.

В следующем примере требуется поменять местами максимальный и минимальный элементы, найденные среди элементов четных строк матрицы А(M,N).

Program Obmen;

Var A: array[1..30,1..30] of integer;

I,J : integer;

K1,L1,K2,L2 : integer;

T,M,N: integer;

Begin

Readln(M,N);

For I:=1 to M do

For J:=1 to N do

Readln( A[I,J]);

K1:=1;L1:=1; {координаты максимального элемента}

K2:=1;L2:=1; {координаты минимального элемента}

I:=2;

While I<=M do

Begin

For J:=1 to N do

If A[K1, L1]< A[I,J] then

Begin

K1:=I;L1:=J;

End

еlse

If A[K2, L2]> A[I,J] then

Begin

K2:=I;L2:=J;

End;

I:=I+2;

End;

T:= A[K1, L1];

A[K1, L1]:= A[K2, L2];

A[K2, L2]:=T;

For I:=1 to M do

Begin

For J:=1 to N do

Write ( A[I,J] :6);

Writeln ;

End;

End.

Здесь используется циклWHILEдля индексации строк, т.к. нас интересуют только четные строки, следовательно, шаг для строк должен быть равен 2. В циклеFORэтого сделать нельзя.

В языке Турбо Паскаль 7.0 имеются процедуры BREAK иCONTINUE. Эти процедуры могут использоваться только внутри цикловFOR, WHILE илиREPEAT. ПроцедураBREAKпрерывает выполнение цикла и вызывает переход к оператору, следующему за циклом (может использоваться вместо оператораGOTO).ПроцедураCONTINUEосуществляет переход к следующему повторению цикла с пропуском последующих операторов тела цикла.

Например, необходимо определить номер первого элемента одномерного массива, оканчивающегося на 3.

Program Kon;

Var A:array [1.. 30] of integer;

FL: Boolean;

I,N: Integer;

Begin

Readln(N);

For I:=1 to N do

Readln( A[I] );

FL:=false;

For I:=1 to N do

Begin

If A[I] mod 10 <> 3 then Continue;

Writeln(‘Номер первого числа на 3 ’,I);

FL:=true;

Break;

End;