Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
5.DOC
Скачиваний:
0
Добавлен:
09.11.2018
Размер:
102.4 Кб
Скачать

5.2.5. Оператор варианта

Оператор варианта существует в двух формах:

1) CASE W OF CM1 : S1 ;

CM2 : S2 ; ........ CMn : Sn END; 2) CASE W OF

CM1 : S1 ; CM2 : S2 ; ........ CMn : Sn ELSE S END . Здесь W - селектор - выражение упорядоченного типа; CM - список меток; S - оператор.

Список меток состоит из констант того же типа, что и селектор W. В языке Турбо Паскаль элементом списка меток может быть и диапазон. Каждая метка должна встречаться в списке меток только один раз.

При входе в оператор вычисляется значение селектора, после чего управление передается оператору, в список меток которого входит константа, значение которой совпадает с вычисленным значением селектора. Если значение ни одной из меток не совпадает со значением селектора, то оператор первой формы эквивалентен пустому оператору, а во второй форме исполнится оператор, следующий за ELSE.

Пример 5.2.5. Ввести число целого типа. Если оно оканчивается циф-рой 1, 2, 3 или 4, отпечатать эту цифру, если оканчивается цифрой 7 - от-печатать 777, а если оканчивается цифрой 9 - отпечатать 9999.

PROGRAM Kon;

VAR a,b : integer;

BEGIN

Write('Ввести число ? '); ReadLn(a);

b:= Abs(a) MOD 10 ;

CASE b OF

1..4 : WriteLn( b );

7 : WriteLn('777');

9 : WriteLn('9999')

END {CASE}

END.

Пример 5.2.6. Ввести символ. Определить, является ли он буквой латинского алфавита, цифрой или каким-то другим символом.

ввод символа (с)

с - лат С

печать

"буква

латинского с - цифра иначе

алфавита "

печать "цифра" печать

"другой символ"

Рис.5.5. Схема к примеру 5.2.6.

PROGRAM Sim;

VAR c : char ;

BEGIN

Write('Символ ? '); ReadLn(c);

CASE c OF

'A'..'Z', 'a'..'z':

WriteLn('Буква латинского алфавита');

'0'..'9': WriteLn('Цифра')

ELSE

WriteLn('Другой символ')

END

END.

Задачи

5.2.4. Составить программу, которая по нашему желанию вычисляет либо сумму, либо разность, либо произведение двух чисел, либо их частное.

5.2.5. Составить программу, которая по нашему желанию вычисляла бы sinx, cosx, tgx или .

5.2.6. Пусть x - некоторый угол (в градусах, целое, не более 359). Отпечатать знак функции tgx, не вычисляя функции. Если tgx=0, отпе-чатать "0", а если бесконечности - отпечатать слово "бесконечность".

5.2.6. Оператор цикла с параметром

Этот оператор существует в двух формах:

1) FOR k:=kнач TO kкон DO S;

2) FOR k:=kнач DOWNTO kкон DO S .

Здесь k - параметр цикла (переменная);

kнач, kкон - начальное и конечное значения параметра цикла (выражения);

S - оператор (тело цикла).

Параметр цикла, его начальное и конечное значения должны принадлежать одному и тому же упорядоченному типу. Начальное и конечное значения вычисляются единожды, перед входом в цикл.

При спецификации TO (DOWNTO) порядковый номер параметра цикла (т.е. Ord(k)) увеличивается (убывает) с шагом 1. Если при спецификации TO (DOWNTO) начальное значение параметра цикла больше (меньше) конечного значения, то тело цикла не выполняется.

Принудительное изменение параметра цикла внутри тела цикла (например, с помощью оператора присваивания) хотя и не запрещено правилами языка, но делать этого ни в коем случае не следует во избежание самых невероятных ошибок.

Пример 5.2.7. Вычислить

.

ввод (n)

sum:=0

для k от 1 до n

sum:=sum + 1/k

печать (sum) Рис.5.6. Схема к примеру 5.2.7.

PROGRAM Sumn;

VAR k,n : integer ;

sum : real ;

BEGIN

Write('n = '); ReadLn(n);

sum:=0 ;

FOR k:=1 TO n DO

sum := sum + 1.0/k;

WriteLn('Сумма = ', sum)

END.

Пример 5.2.8. Построить таблицу значений функции на отрезке [a,b].

Для построения таблицы задается n - количество интервалов разбие-ния отрезка [a,b], а затем рассчитывается шаг step=(b-a)/n.

PROGRAM Forab;

VAR k,n : integer;

a,b,y,x,step : real;

BEGIN

Write('Границы отрезка: '); ReadLn(a,b);

Write('n= '); ReadLn(n);

step:=(b-a)/n;

FOR k:=0 TO n DO

BEGIN

x:=a+k*step;

y:=Sin(x)/(Sqr(x)+1);

WriteLn(x,y)

END

END.

Пример 5.2.9. Напечатать латинский алфавит в обратном порядке.

PROGRAM Lat;

VAR c:char;

BEGIN

FOR c:='Z' DOWNTO 'A' DO Write(c);

WriteLn

END.

Пример 5.2.10. Вычислить y = a OR b AND NOT c при всех воз-можных значениях булевских величин a,b,c. PROGRAM Bool3;

VAR a,b,c,y : Boolean;

BEGIN

WriteLn('a':4, 'b':6, 'c':6, 'y':8); { шапка }

FOR a:=FALSE TO TRUE DO

FOR b:=FALSE TO TRUE DO

FOR c:=FALSE TO TRUE DO

BEGIN

y:=a OR b AND NOT c;

WriteLn(a:6, b:6, c:6, y:8)

END

END.

Пример 5.2.11. Вычислить

.

PROGRAM TwoSum;

VAR i,j,m,n : integer;

p,s : real;

BEGIN

Write('Значения m,n=? '); ReadLn(m,n);

s:=0;

FOR i:=1 TO m DO

BEGIN

p:=0;

FOR j:=1 TO n DO p:=p+1/(i+j*j);

s:=s+p*i*i

END;

WriteLn('Сумма= ',s)

END.

ввод (m,n)

s = 0

для i от 1 до m

p = 0

для j от 1 до n

p = p + 1/(1+j2)

s = s + p×i2

печать (s)

Рис.5.8. Схема к примеру 5.2.11

Задачи

5.2.7. Вычислить

5.2.8. Вычислить

для x от 3.1 до 3.5 с шагом 0.1.

5.2.9. Определить те значения булевых переменных a,b,c, при которых выражение ( NOT a OR b AND c ) истинно.

5.2.10. Распечатать все символы латинского алфавита, отпечатав букву A один раз, букву B - два раза и т.д., т.е. A BB CCC .......

5.2.11. Вычислить Значения m,n - задаются.

5.2.12. Вычислить . Значения m,n,p - задаются.

5.2.13. Распечатать значения функции для значений x,y, изменяющихся с шагом, равным 1.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]