
- •Глава I. Структурное программирование…………………………………..5
- •Глава II. Типы данных………………………………………………………...16
- •Глава 1. Структурное программирование
- •1.1. Понятие структурного программирования
- •1.2. Нисходящее и восходящее программирования
- •1.3. Оператор цикла while
- •Глава 2. Типы данных
- •2.1. Целые типы
- •2.2. Вещественные типы
1.3. Оператор цикла while
Выше мы говорили, что цикл являются одним из типов управляющих структур. Оператор цикла задает повторное выполнение определенных операторов. Для реализации циклов в Паскале предусмотрены три различных структурных оператора: WHILE, REPEAT, FOR. Первые два используются, если число повторений (итераций) заранее не определено, но известно условие завершения цикла. Оператор FOR применяется тогда, когда число повторений тела цикла известно заранее .А теперь речь пойдет об операторе цикла while. Этот оператор является наиболее мощным из всех трех, реализующих циклы. Два других оператора можно выразить с его помощью. Общий вид этого оператора:
WHILE <Условие> DO <Тело цикла>;
Особенностью этого цикла является то, что он будет выполнять свою работу до возникновения каких-либо условий, то есть сам он ничего не изменяет в переменных, он всего лишь что-либо проверяет.
Циклы с предусловием (while) - Сначала проверяется условие. Если оно истинно, выполняются <инструкция 1>...<инструкция n> и так далее. Если же условие ложно, выполнение инструкции считается законченным, и программа переходит к обработке следующих команд. В цикле while-do <условие> - это условие выполнения цикла: пока оно истинно, программа из цикла не выйдет. В том случае, если внутри цикла стоит только один оператор, пара begin - end может отсутствовать, если операторов больше одного, то пара begin - end обязательна, так как иначе будет выполнятся только одна инструкция, стоящая сразу после слова do.
Циклы с постусловием (do while) - сперва выполняется сам цикл и только после него проверяется его истинность или ложность. Особенностью данного цикла является то, что он будет выполнен хотя бы один раз, в отличии от цикла с предусловием.
Примеры
Пример 1. Вычисление и вывод на экран значение "машинного эпсилон"
Program EpsilonDetect ;
var
epsilon : Real;
begin
epsilon : = 1;
while epsilon/2 + 1 > 1 do
epsilon : = epsilon/2
WriteLn ('Машинное эпсилон= ', epsilon)
end.
Пример 2. Вычисление суммы нечётных чисел в интервале 0 - 10
Program DemoWhile ;
var I, sum : integer ;
begin
sum : = 0; I : = 1 ;
while (I<11) do
begin
sum : = sum + I ;
I : = I + 2 ;
end ;
write ('Сумма нечётных чисел равна', sum : 3)
end.
Пример 3. Вычисление числа "Пи"
Program PI ;
var
p : real ; {вычисляемое значение Пи}
t : real ; {точность вычисления}
n : integer ; {номер члена ряда}
elem : real ; {значение члена ряда}
begin
p : = 0 ;
n : = 1 ;
elem : = 1 ; {начальное значение}
write ('Задайте точность вычисления ПИ ->') ;
readln (t) ;
writeln ('Вычисление ПИ с точностью', t : 9 : 6) ;
while elem >= t do
begin
elem : = 1/ (2*n-1) ;
if (n MOD 2) = 0
then p : = p - elem
else p : = p + elem ;
n : = n + 1) ;
end;
p : = p*4 ;
writeln ('Значение Пи с точночтью', t : 9 : 6, 'равно', p : 9 : 6) ;
writeln ('Просуммировано', n , 'членов ряда.') ;
readln ;
end.
Пример 4. Вычисление НОД двух целых чисел
Program NOD;
var
n1, n2 : integer ; {числа, НОД которых надо найти}
nod : integer ; {наибольший общий делитель}
r : integer; {остаток от деления n1 на n2}
begin
writeln ('Вычисление НОД') ;
writeln ('для двух целых чисел.') ;
write ('Введите в одной строке два числа') ;
writeln ('и нажмите <Enter>') ;
write ('->') ;
readln (n1, n2) ;
while (n1 mod n2)do
begin
r : = n1 mod n2 ; {остаток от деления}
n1 : = n2 ;
n2 : = r ;
end ;
nod : = n2 ;
writeln ('НОД чисел', n1, 'и', n2, 'это', nod) ;
readln ;
end.
Пример 5. Вычмсление суммы S=1+1/2+1/3+...+1/50
VAR S: REAL; N:INTEGER;
BEGIN
S:=0; N:=1;
WHILE N<=50 DO
BEGIN
S:=S+1/N;
N:=N+1;
END;
WRITELN(' S=',S);
END.
Пример 6. Даны числа A, B (A > 1). Получить все степени числа A, меньшие числа B.
program STEPENI;
var A, B, C: real;
begin
readln (A, B); C := A;
while C < B do
begin
writeln (C);
C := C*A;
end;
end.
Пример 7. Даны числа a,b (a>1). Получить все члены бесконечной последовательности a,a^2,a^3,…a^n
Program p1;
Var a,b,n:integer;
BEGIN
Write('Введите А и В');
Readln(a,b);
n:=1;
While EXP(n*LN(a))<b do
Begin
Writeln(EXP(n*LN(a)));
n:=n+1;
end;
end;
END.
Пример 8. Дано целое число а и натуральное (целое неотрицательное) число n. Вычислить а в степени n. {Введем целую переменную k, которая меняется от 0 до n, причем поддерживается такое свойство: b = (a в степени k).}
VAR
A, N, B, K : INTEGER;
BEGIN
ClrScr;
Write(‘ Введите два значения ‘); ReadLn(A,N);
K := 0; B := 1;
While K <> N DO Begin
K := K + 1; B := B * A;
End;
Write(‘ A в степени N = ’,B);
END.
Пример 9. Даны натуральные числа а, b. Вычислить произведение а*b, используя в программе лишь операции +, -, =, <>.
USES Crt;
VAR
A, B, C, K : INTEGER;
BEGIN
Write(‘ Введите два значения ‘); ReadLn(A,B);
K := 0; C := 0;
While K <> B DO Begin
K := K + 1; C := C + A;
End;
{C = A * K и K = B, следовательно, C = A * B}
Write(‘ A*B= ‘,C);
END.
Пример 10. Вычислить значение переменной Y=2K+N при всех значениях переменных N=1,2,3 и K=2,4,6,8. обратите внимание на то, что если перебирать N и K получим 12 значений переменной Y.
Var N,K,Y: Integer;
Begin
For N:=1 To 3 Do Begin
K:=2;
While K<=8 Do Begin
Y:=2*K+N;
WriteLn(‘При N= ’,N:4,’ и K= ’,K:4,’ Y= ’Y:4);
K:=K+2;
End;
End;
End.