Реализация программ с циклом с предусловием
Формат и действие оператора После слова WHILE выполняется проверка условия. При значении условия «истина» (true) выполняется тело цикла, записанное после слова DO. Далее управление вновь передаётся на проверку условия. Если же значение условия «ложь» (false) цикл заканчивается и следует продолжение программы. WHILE условие DO оператор;
Формат и действие оператора !Если после слова DO тело цикла состоит из более одного оператора, то они записываются в операторных скобках BEGIN – END WHILE условие DO BEGIN оператор 1; оператор 2; … оператор n-1; оператор n; END; WHILE условие DO BEGIN оператор 1; оператор 2; … оператор n-1; оператор n; END;
Формат и действие оператора !В цикле с предусловием тело цикла может не выполниться ни разу, если при первой же проверке условия его значение принимает значение «ложь». Например: k:=3; WHILE k>=5 DO BEGIN s:=s+k; k:=k+1; END; 3>=5 Тело цикла не выполнится ни разу
Формат и действие оператора !Условие оператора с предусловием необходимо подбирать таким образом, чтобы в определённый момент его значение изменилось с «истина» на «ложь», иначе возникнет «зацикливание» программы. Например: k:=6; WHILE k>=5 DO BEGIN s:=s+k; k:=k+1; END; 6>=5 «зацикливание» 7>=5 k:=7 k:=8 8>=5
Примеры реализации цикла «пока» в виде программ
Написать программу вычисления произведения целых положительных чисел и суммы отрицательных чисел, вводимых с клавиатуры, а также количество отрицательных и положительных чисел. Вычисление прекратить при вводе числа 0 Пример работы программы: Введите первое число 7 Введите следующее число -18 Введите следующее число Введите следующее число -6 Введите следующее число 5 0 Количество положительных чисел = 4 Произведение положительных чисел =630 Количество отрицательных чисел = 3 Сумма отрицательных чисел = -28
Определим переменные: x – число, вводимое с клавиатуры s – сумма отрицательных чисел p – произведение положительных чисел k – количество положительных чисел m – количество отрицательных чисел
Program Wer; Uses crt; Var s,p,x,k,m:integer; Begin Clrscr; s:=0; p:=1; k:=0; m:=0; Writeln(Введите первое число); Readln(x); While x<>0 do begin if x>0 then begin p:=p*x; k:=k+1; end else begin s:=s+x; m:=m+1; end; Writeln(Введите следующее число); Readln(x); end; Writeln(Количество положительных чисел =, k); Writeln(Произведение положительных чисел =, p); Writeln(Количество отрицательных чисел =, m); Writeln(Сумма отрицательных чисел =, s); Readkey; End. Объявляем переменные Присваиваем начальное значение Условие цикла Тело цикла Вывод результатов Процедура задержки экрана Ввод первого числа до цикла
Подарок Мой богатый дядюшка подарил мне один доллар в мой первый день рождения. В каждый следующий день рождения он удваивал свой подарок и прибавлял к нему столько долларов, сколько лет мне исполнилось. Написать программу, указывающую, к какому дню рождения подарок превысит 100$. Определим переменные: k – число лет s – сумма в долларах
Program Podarok; Uses crt; var k, s:integer; Begin k:=1; s:=1; While s<=100 do begin k:=k+1; s:=s*2+k; end; Writeln( К, k, дню рождения сумма >100$ ); Readkey; End. Присваиваем начальное значение Увеличиваем количество лет
Алгоритм Эвклида Это алгоритм вычисления наибольшего общего делителя (НОД) двух целых положительных чисел Он основан на следующих свойствах величин: пусть a и b - одновременно 0, и пусть a b. Если b=0, то НОД(a,b) = a, Если b 0, то для чисел a,b,c, где c - остаток от деления a на b (c = a mod b) выполнено равенство: НОД(a,b)=НОД(b,c) Например: НОД(15,6)=НОД(6,3)=НОД(3,0)=3 Пример работы программы: Введите два числа 15 6 НОД=3 Введите два числа 15 6 НОД=3
Program Evklid; Uses crt; Var a,b,c: integer; Begin Clrscr; Writeln (Введите a, b. (a>b)); readln( a, b); While b>0 do begin c:= a MOD b; a:= b; b:= c; end; Writeln (NOD(a,b)=, a); Readkey; End. Объявляем переменные Условие цикла Тело цикла Вывод результата
«Бегущий» символ Используя возможности модуля CRT, написать программу, в которой символ «звёздочка» (*) пробегает по всему периметру экрана из верхнего левого угла. *********************** *********************** * * * * * * * * * * * * * *
«Бегущий» символ Определим переменные: x – позиция в строке y – номер строки Начальное значение: x:= 3; y:= 2; Количество символов в строке – 76 (max 80) Количество строк – 48 (max 50) отступ от края экрана
Program Stroka; Uses crt; Var x,y: integer; Begin Clrscr; x:=3; y:=2; While x<=77 do begin GoToXY(x,2); Write(*); Delay(10000); x:=x+1; end; While y<=48 do begin GoToXY(x,y); Write(*); Delay(10000); y:=y+1; end; Процедура позиционирования курсора Процедура временной задержки (аргумент задается в микросекундах), если требуется выводить символы не сразу, а постепенно Для вывода символа в направлении из верхнего левого в нижний правый угол экрана значение x и y изменяется на +1.
While x>=4 do begin GoToXY(x,y); Write(*); Delay(10000); x:=x-1; end; While y>=2 do begin GoToXY(x,y); Write(*); Delay(10000); y:=y-1; end; Readkey; End. Для вывода символа в направлении из нижнего правого угла в нижний левый угол экрана значение x изменяется на -1. Для вывода символа в направлении из нижнего левого угла в верхний левый угол экрана значение y изменяется на -1.
Самостоятельная работа: Царевна - лягушка съедает ежедневно на 20% комаров больше, чем в предыдущий день, и еще 2 комара. Через сколько дней количество съеденных комаров в день превысит 100, если в первый день было съедено 12 комаров. Составьте программу для решения задачи.
Проверка: Program Frog; var m:integer; x:real; Begin m:=1; x:=12; while x<=100 do begin m:=m+1; x:=x*1.2+2; end; Writeln(Через,x:4:2, дней); Readkey; End.