
- •Программирование на Турбо Паскале
- •Вещественный тип данных
- •Символы и строки.
- •Операции и их приоритет
- •Процедура ввода
- •Процедура вывода
- •Оператор варианта
- •Процедуры и функции
- •Массивы
- •Упакованные массивы
- •Множества
- •Файловые типы данных
- •Операции ввода-вывода
- •Перемещения по файлу
- •Специальные операции
- •Работа с текстовыми файлами
- •Комбинированный тип данных
- •Оператор with
- •Переменная структура записи
Оператор варианта
Оператор варианта case также является условным оператором, но он более мощный по сравнению с оператором условного перехода ifю
Вид оператора:
Case <селектор>
<м1>: <оператор 1>;
<м2>: <оператор 2>;
………………….
<мn>: <оператор n>;
else
<оператор n+1>
end;
где <селектор> - выражение, которое принимает одно из значений м1, м2, …, мn, которые называются метками варианта.
В зависимости от того, какое значение имеет селектор, на ту метку и передается управление для выполнения соответствующего оператора. Например, если значение селектора равно м1, то будет выполнен оператор 1, а затем управление передастся следующему после case оператору. Если в каком либо варианте необходимо выполнить несколько операторов, то они записываются в виде составного оператора между операторными скобками begin и end. Если значение селектора не совпадает ни с одной из меток варианта, то выполняется <оператор n+1>, стоящий в веточке else (при отсутствии веточки else управление передается следующему после case оператору).
Правила, которые должны соблюдаться при использовании оператора варианта:
1). Значение <селектора > должно быть определено к началу выполнения оператора варианта;
2). Значение <селектора > должно принадлежать дискретному (перечисляемому) типу;
3). Тип констант, играющих роль метки варианта, должен совпадать с типом <селектора >;
4). Все константы в альтернативах должны быть уникальны в пределах одного оператора варианта, т. е. не должны повторяться. Метка варианта может содержать диапазон значений, в этом случае она записывается в виде минимального и максимального значения, разделенных между собой двумя точками (..). Если при разных значениях меток варианта выполняется один и тот же оператор, то эти метки варианта могут быть записаны через запятую.
Например,
case k of
2: y:=sqr(3*g);
3,15: y:=exp(g*x);
4..9: y:=ln(2+x);
end;
case b of
‘C’,’c’: ck:=ck+1;
‘H’,’h’: hk:=hk+1;
‘E’,’e’: ek:=ek+1;
end;
Циклы
При необходимости неоднократного выполнения нескольких операторов используются циклы. Их в паскале три вида: цикл с параметрами, цикл с предусловием и цикл с постусловием.
Цикл с параметрами
Цикл с параметрами имеет формат:
For <имя>:=<начало> to <конец> do
<тело цикла>;
где <имя> - идентификатор переменной цикла, <начало> - начальное значение переменной цикла, <конец> - конечное значение переменной цикла. Переменная цикла должна иметь перечисляемый тип. Тип начального и конечного значения должен совпадать с типом переменной цикла. <Тело цикла> состоит из одного или нескольких операторов. Если в теле цикла должно выть несколько операторов, то они записываются в виде составного оператора между begin и end/
Оператор цикла for работает следующим образом
-
переменной цикла присваивается начальное значение.
-
проверяется не вышло ли значение переменной за пределы конечного значения. Если значение переменной цикла оказалось больше конечного значения, то осуществляется выход из цикла на следующий после тела цикла оператор.
-
Если значение переменной цикла не превышает конечного значения, то выполняется тело цикла и переменная цикла увеличивается на 1, а затем осуществляется возврат на пункт 2.
Необходимо помнить, что в этом операторе цикла шаг приращения переменной равен 1 или -1.
Если необходимо задать шаг приращения -1, то оператор цикла должен иметь вид:
For <имя>:=<начало> downto <конец> do
<тело цикла>;
Пример
Вычислить сумму десяти чисел, введенных с клавиатуры.
Program summa;
Var
i: integer; {переменная цикла-счетчик количества введенных чисел}
a,s: real; {a-число s-сумма}
begin
s:=0;
for i:=1 to 10 do
begin
write(‘Ввести число ’);
readln(a);
s:=s+a
end; {for i}
writeln(‘Сумма=’,s:8:2);
readln;
end.
Оператор цикла с предусловием
Оператор имее вид:
While <условие> do
<тело цикла>;
Оператор работает следующим образом: пока справедливо условие, выполняется тело цикла, состоящее из одного или нескольких, объединенных в составной, операторов.
Пример:
Вычислить сумму
program summa1;
var
i,n:integer;
а, s,p:real;
begin
writeln(‘Ввести переменную а и количество слагаемых n’);
readln(a,n);
s:=0; p:=1; {s-сумма, p- факториалы- произведение чисел}
i:=1; { i – счетчик слагаемых }
while i<=n do
begin
p:=p* i;
s:=s+(2*i*a) /p;
i:=i+1;
end; {while}
writeln(‘Сумма=’.s:6:2);
readln;
end.
Оператор цикла с постусловием
Оператор имеет вид
repeat
<тело цикла>;
until <условие>;
Оператор работает следующим образом: выполняется тело цикла, пока не станет справедливым условие. Как только условие примет значение – истина, осуществляется выход из цикла.
Пример
Вычислить сумму
,
x, n ввести с клавиатуры.
program summa2;
var
i,n,k,j: integer;
x,p,s: real;
begin
writeln(‘Ввести х, n’);
readln(x,n);
s:=0;
k:=-1;
i:=2;
repeat
p:=1;
for j:=1 to i-1 do
p:=p*j; !
s:=s+(k*p)/exp(i*ln(x));
i:=i+2; k:=-k;
until i>2*n;
writeln(‘Сумма=’,s:6:2);
readln;
end.
Пример
Подсчитать количество нечетных, отрицательных чисел и сумму положительных четных чисел, вводимых с клавиатуры. Ввод чисел и вычисления прекратить, когда будет введен 0.
program alfa;
var
k,s,a: integer;
begin
repeat
write(‘Ввести число ’);
readln(a);
if odd(a) and (a<0)
then inc(k)
else
if (a>0) and (a mod 2=0) then s:=s+a;
until a=0;
writeln(‘Количество нечетных отрицательных чисел=’,k,
’ Сумма четных положительных чисел=’,s);
readln;
end.
Пример
Из последовательности чисел, вводимых с клавиатуры посчитать количество четных и нечетных чисел, найти сумму четные чисел кратные трем. Ввод чисел прекратить, после ввода числа 32000.
program chetnechet;
var
c,chet,nechet,s3: integer;
begin
chet:=0;
nechet:=0;
s3:=0;
repeat
write(‘Ввести число ’);
readln(c);
if c<>32000 then
case odd(c) of
false: begin chet:=chet+1;
if c mod 3=0 then s3:=s3+c;
end;
true: nechet:=nechet+1;
end; {case}
until c=32000;
writeln (‘количество нечетных чисел=’,nechet);
writeln(‘количество четных чисел=’,chet,’ , сумма четных чисел кратных 3=’,s3);
readln;
end.