Условный оператор Case
Оператор Case является обобщением оператора If и позволяет сделать выбор из произвольного числа имеющихся вариантов.
Формат:
Case <�выражение> Of
<�список 1>:<�оператор 1;>
<�список 2>:<�оператор 2;>
……..
<�список n>:<�оператор n;>
[ Else <�оператор>]
End;
В этой структуре:
Выражение – выражение любого простого типа, кроме вещественного типа, значение которого вычисляется.
список 1, список 2,…, список n – константы, с которыми сравнивается значение выражения.
оператор 1, оператор 2,…, оператор n – операторы, из которых выполняется тот, с константой которого совпадает значение выражения.
оператор – оператор, который выполняется, если значение выражения не совпадает ни с одной из констант.
Ветвь оператора Else является необязательной. Если она отсутствует и значение выражения не совпадает ни с одной из перечисленных констант, весь оператор рассматривается как пустой. В отличие от оператора If перед словом Else точку с запятой можно ставить, хотя это и необязательно.
Примеры решения задач
Выражение целочисленного типа.
Ввести номер месяца и определить месяц, соответствующий этому номеру.
Var
X: Byte;
BEGIN
Write(‘Введите номер месяца:’);
ReadLn(X);
Case X Of
1: Write(‘Январь’);
2: Write(‘Февраль’);
3: Write(‘Март’);
4: Write(‘Апрель’);
5: Write(‘Май’);
6: Write(‘Июнь’);
7: Write(‘Июль’);
8: Write(‘Август’);
9: Write(‘Сентябрь’);
10: Write(‘Октябрь’);
11: Write(‘Ноябрь’);
12: Write(‘Декабрь’);
Else
WriteLn(‘Такого месяца нет’);
End;
END.
Выражение интервального типа.
Ввести номер месяца и определить время года, к которому относится этот месяц.
Var
X: Byte;
BEGIN
Write(‘Введите номер месяца:’);
ReadLn(X);
Case X Of
1..2,12: WriteLn(‘Зима’);
3..5: WriteLn(‘Весна’);
6..8: WriteLn(‘Лето’);
9..11: WriteLn(‘Осень’);
End;
END.
Выражение символьного типа.
Составить программу, которая по введенному значению выводит оценки по математике, физике, химии.
USES Crt;
VAR M:Char;
BEGIN
ClrScr;
WriteLn(' По какому предмету Вы хотите увидеть оценки');
WriteLn(' М - математика');
WriteLn(' Ф - физика');
WriteLn(' Х - химия');
ReadLn(M);
CASE M OF
'М','м':WriteLn('5 5 4 4 5 5 3 5 5 ');
'Ф','ф':WriteLn('5 4 5 3 5 4 5 5 5 ');
'Х','х':WriteLn('4 3 5 3 4 4 4 5 ');
End;
END.
Примеры для самостоятельного решения:
Составить программу, которая по введенному значению 1, 2, 3 вычисляет:
Площадь параллелограмма
Периметр параллелограмма
Выход
Составить программу «Календарь XX столетия», которая определяет день недели любого дня XX-го столетия. По введенному значению 1, 2, 3 вычисляет
Номер дня недели по формуле, где D- день, М-месяц, G-год:
S=[(12-M)/10]
K=[(G-1900-S)*365,25]+[(M+12*S-2)*30,59]+D+29
N=K-7[K/7] (N-вычисляется от 0-воскресенье до 6-суббота, []-целая часть)
День недели по его номеру
Выход
Оператор цикла For
Циклы позволяют многократно выполнять отдельный оператор или последовательность операторов, причем при этом нет необходимости записывать в тексте программы одинаковые операторы несколько раз.
Оператор цикла For организует выполнение одного оператора (или несколько операторов) заранее известное число раз. Оператор For может быть представлен в двух форматах:
For <�параметр цикла>:= To Do
<�тело цикла>;
For <�параметр цикла>:= DownTo Do
<�тело цикла>;
<�параметр цикла> - переменная цикла, которая может быть целочисленного или символьного типа. Параметр цикла изменяется, увеличиваясь до конечного значения (1 формат). Параметр цикла может изменяться в противоположном направлении - убывать (2 формат);
S1 – начальное значение параметра цикла, которое она получает при первом выполнении цикла;
S2 - конечное значение параметра цикла, достигнув которое повторение цикла прекращается;
For…Do – заголовок цикла;
< тело цикла > - оно может быть простым, состоящим из одного оператора или составным оператором.
Например:
For I:=1 To 20 Do Write(‘*’);
20 раз выведется на экран в одной строке «*»
Особенности выполнения оператора For
Начальное и конечное значения параметра цикла должны принадлежать к одному и тому же типу данных.
В операторе For не допускается изменения параметра цикла на величину, отличную от единицы.
Например:
For I:=10 To 14 Do Write(I:3); {Результат выполнения - 1011121314}
For I:=14 DownTo 10 Do Write(I:3); {Результат выполнения - 1413121110}
В операторе For после Do может находиться составной оператор, в теле которого запрещены операторы, меняющие значение параметра цикла.
Например:
For I:= 1 To 10 Do Begin
Rez:=A/Pi;
I:=I+1; {ошибка, попытка изменить параметр цикла}
End;
После нормального завершения оператора For значение параметра цикла равно конечному значению. Если оператор For не выполнялся, значение параметра цикла не определено.
Чтобы прервать выполнение оператора For досрочно, необходимо использовать процедуру Break, которая прерывает выполнение циклов. Процедура Continue начинает новую итерацию цикла, даже если предыдущая не была завершена.
Примеры решения задач
1. Найти произведение положительных, сумму и количество отрицательных из 10 введенных целых значений.
USES Crt;
VAR
X: INTEGER; S, K, P: INTEGER; I: BYTE;
Begin
Clrscr; {чистка экрана}
P:=1; S:=0; K:=0;
FOR I:=1 TO 10 DO Begin
WriteLn(‘Введите ‘,I,’ -е значение’); ReadLn(x);
IF X>0 Then P:=P*X; { произведение положительных }
IF X<0 Then Begin
S:=S+X; { сумма отрицательных }
K:=K+1; { количество отрицательных }
End;
End;
WriteLn(‘ Произведение положительных значений = ‘,p);
WriteLn(‘ Сумма отрицательных значений = ‘,s);
WriteLn(‘ Количество отрицательных значений = ‘,k);
END.
2. Из N целых чисел найти минимальное значение.
USES Crt;
VAR MI, X: INTEGER; I,N: BYTE;
BEGIN
WriteLn('Введите количество значений'); ReadLn(n);
WriteLn('Введите первое значение'); ReadLn(mi);
FOR I:=2 TO N DO Begin
WriteLn(‘Введите ‘,I,’ -е значение’); ReadLn(x);
IF X
End;
WriteLn(‘Минимальное значение = ‘,MI);
END.
3. Из N целых чисел найти минимальное среди положительных и максимальное среди отрицательных значений.
USES Crt;
VAR
MI, MA, N, I, X: INTEGER; FL, FL1: BYTE;
BEGIN
Clrscr;
WriteLn('Введите количество значений'); ReadLn(N);
FL:=0; FL1:=0;
FOR I:=1 TO N DO Begin
WriteLn('Введите ',I,' значение'); ReadLn(X);
IF (FL=0) AND (X<0) Then Begin
MA:=X; FL:=1;
End;
IF (FL1=0) AND (X>0) Then Begin
MI:=X; FL1:=1;
End;
IF (X<0) AND (X>MA) Then MA:=X;
IF (X>0) AND (X
End;
IF FL=1 Then WriteLn('максимальное среди отрицательных = ',ma)
Else WriteLn('отрицательных нет');
IF FL1=1 Then WriteLn('минимальное среди положительных = ',mi)
Else WriteLn('положительных нет');
END.
Примеры для самостоятельного решения:
Найти среднее арифметическое минимального и максимального элементов из 10 введенных.
Найти сумму 2/3+3/4+…+n/(n+1).
Из n введенных чисел найти максимальное значение среди положительных элементов.
Вычислить сумму первых n слагаемых 12+22-32+42+52-62+…(каждое третье слагаемое берется со знаком «минус»).
</0>
|