Название: Алгоритмы и программы (Афанасьева Т. В.)

Жанр: Информационные системы и технологии

Просмотров: 1329


4.1. использование операторов цикла с условиями

 

В языке Turbo Pascal существуют два оператора цикла с условиями. С их помощью можно запрограммировать повторяющиеся фрагменты программы. Операторы цикла с условиями проверяют условия выполнения или повторения цикла.

Рассмотрим их.

 

Oператор цикла с предусловием

 

While <условие> do <оператор>;

 

здесь while, do – зарезервированные слова;

<условие> – выражение логического типа;

<оператор> – произвольный оператор, в том числе и составной.

Логическое выражение <условие> определяет, будет ли цикл выполняться или завершит свою работу. Если выражение <условие> имеет значение true (ист.), то выполняется <оператор>, после чего вычисление выражения <условие> и его проверка повторяются. Если <условие> имеет значение false (лож.), оператор while прекращает свою работу, т. е. цикл заканчивается. В качестве <оператора>  может быть либо оператор, либо составной оператор, т. е. последовательность операторов, заключенная в операторные скобки begin ... end.

 

Пример 4.1.

program ctep; {возведение в степень}

const h:byte=1;

var a,b:integer; x:real; k:integer;

begin

writeln('Возведение в третью степень чисел от 1 до 10');

a:=1; b:=10; k:=3;

while a<=b do begin

x:=exp(k*ln(a)); writeln(a,'^3=',x:4:0); a:=a+h

end;

end.

 

Пример  4.2.  Табулирование функции y=sin(x) на  отрезке [1,  5]  с шагом 0.5.

program tab1;

const h:real=0.5;

var x,a,b:real;

begin

writeln('Табулирование функции y=sin(x) на отрезке [1,5] с шагом 0.5');

a:=1; b:=5; x:=a;

while x<=b do begin

y:=sin(x); writeln('y=', y:2:1); x:=x+h;

end;

end.

 

Пример 4.3. Сумма значений функции у=x2 на отрезке [1, 5] c шагом 1. program summa;

const    h:real=1;

var i,k:integer; x,a,b,s:real;

begin

a:=1;    b:=5;

x:=a;     s:=0;

writeln('Сумма значений функции у=x^2 на отрезке [1,5] c шагом 1');

while x<=b do begin y:=x*x;

writeln('y=',y:2:1);

x:=x+h; s:=s+y; end;

writeln('Сумма=' s:2:1);

end.

 

Пример  4.4.  Найти  минимальное  значение  функции  у=sin(x)  на отрезке [1,10] с шагом 0.1

program min; const h:real=0.1; var

y,b,x,min:real;

begin x:=1; b:=10;

min:=sin(x);

writeln('Минимальное значение функции у=sin(x) ');

writeln(' на отрезке [1,10] шагом 0.1');

while x<=b do begin

y:=sin(x); writeln(y:4:2); if y<min then

min:=y;

x:=x+h;

end; writeln('min=', min:2:1); end.

 

Пример 4.5. Нахождение минимального нечетного и максимального четного элемента последовательности чисел.

Алгоритм:

1. присвоим min максимальное число, а max минимальное;

2. открываем цикл пока ch<>'n';

2.1. вводим элемент последовательности а;

2.2. если элемент четный, и если элемент > max,

то max:=(значение этого элемента);

2.3. если элемент нечетный, и если элемент < min,

то min:=(значение этого элемента);

3. печать результата.

Четность и нечетность определяется при помощи оператора <mod>:

определение дробной части от деления на 2.

 

var

i, max, min, a: integer;

ch: char;

begin

writeln('нахождение минимального нечетного'); writeln('и максимального четного '); writeln('элемента последовательности'); write('вводить посл.(y/n)');

read(ch);

if ch='n' then halt(1); { выход из программы }

max:=-32767;

min:=32767;

while ch<>'n' do begin readln(a);

if (a mod 2)=0 then

if a>max then max:=a;

if (a mod 2)<>0 then

if a<min then min:=a; write('продолжить ввод(y/n)'); read(ch);

end; writeln('миним.нечетн=',min); writeln('макс.четн.=',max); readln;

end.

 

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

 

Repeat <тело цикла> until <условие>;

 

здесь repeat, until – зарезервированные слова (повторять до тех пор, [пока не будет выполнено условие]);

<тело цикла> – произвольная последовательность операторов;

<условие> – выражение логического типа.

Операторы <тело цикла> выполняются хотя бы один раз, после чего вычисляется выражение <условие>: если его значение есть FALSE (лож.), операторы <тело цикла> повторяются, в противном случае оператор repeat...until завершает свою работу.

Пример  4.6.  Табулирование функции y=sin(x) на  отрезке [1,  5]  с шагом 0,5.

program tab2;

const

h: real=0.5;

var

a, b, x: real;

begin

writeln('Табулирование функции y=sin(x) на отрезке [1,5] с шагом 0,5');

a:=1; b:=5; x:=a; repeat

writeln('x=',x:2:1,'y=',sin(x));

x:=x+h; until x>=b; end.

 

Пример 4.7. Корректный ввод данных. program tab2;

const h:byte=0;

var i:integer;

begin repeat

write('Введите номер месяца вашего рождения');

readln( i );

if (i<0) and (i>12) then begin

writeln('Вы ввели некорректные данные');

end else begin

writeln('Вы ввели корректные данные');

h:=1;

end; until h=1; readln;

end.

 

Пример  4.8.  Табулирование функции y=sin(x) на  отрезке [1,  5]  с шагом 0,5. Вывод предпоследнего положительного значения функции.

program tab2;

const h:real=0.5;

var

a, b, x, p, y: real;

begin

writeln('Табулирование функции y=sin(x) на отрезке [1,5] с шагом 0,5'); writeln('Вывод предпоследнего положительного значения функции'); a:=1;

b:=5; x:=a; y:=0; repeat

if sin(x)>0 then begin

p:=y;    { запоминание предыдущего значения }

y:=sin(x);          { вычисление текущего значения y }

end;

writeln('x= ',x:3:1,'y= ',sin(x):4:2);

x:=x+h;

until x>=b;

writeln('Предпоследнее положительное значение функции = ',p:4:2);

write('Нажмите ENTER');

readln;

end.

 

Пример 4.9. Вычислить максимальное значение функции y=sin(x) на отрезке [1, 10]. Шаг=0.5.

program max;

const

h: real=0.5;

var

y, b, x, max: real;

begin

writeln('Максимальное значение функции y=sin(x) на отрезке [1,10].

Шаг=0.5'); x:=1; b:=10;

max:=–1; { начальное значение максимума }

repeat y:=sin(x); writeln(y:5:3);

if y>max then max:=y;

x:=x+h; until x>b; writeln(max:2:9); end.

 

Отличия двух операторов цикла с условиями

 

1. В операторе цикла с предусловием возможна такая ситуация, что операторы, содержащиеся внутри него, не будут выполнены ни одного раза, т. к. условие выхода из цикла там проверяется перед выполнением оператора. В операторе с постусловием оператор, содержащийся в цикле, выполняется хотя бы один раз.

2. В этих двух операторах по-разному проверяется логическое выражение на выход из цикла.