Название: Алгоритмы и программы (Афанасьева Т. В.) Жанр: Информационные системы и технологии Просмотров: 1387 |
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. В этих двух операторах по-разному проверяется логическое выражение на выход из цикла.
|
|