Выбрать главу

not – имеет результат противоположный операнду.

Примеры операторов if со сложными условиями:

if (x>=0) and (x<=1) then writeln ('X находится в диапазоне от 0 до 1');

if not ((x>=0) and (x<=1)) then writeln('X вне диапазона 0-1');

if (x<0) or (x>1) then writeln('X вне диапазона 0-1');

Обратите внимание на скобки. Операции сравнения имеют самый низший приоритет, поэтому заключены в скобки. Приоритет операции and соответствует операции умножения, or – сложению, not – унарному минусу (т.е. самый высокий).

- 19 -

Задание №5

1. Вычислите логические выражения: not true and not false not true or not false not (true or false) Y not (true and false) a 2. Напишите условие нахождения точки a в первом квадранте системы координат, считая ее координаты заданными X переменными x, y .

3. Напишите программу, выводящую слова «зачет», если введено число 3, 4 или 5 и «незачет», если введено число 1 или 2.

4. Напишите программу, выводящую текст «плохо», «удовлетворительно», «хорошо» или «отлично», если введено число 2, 3, 4 или 5 соответственно.

5. Используя операцию определения остатка от деления (mod, стр. 5), модернизируйте программу Concentric (стр. 16), таким образом чтобы каждая 3-я окружность выводилась красным цветом, а остальные были синими.

Вложенные циклы

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

Выведем на экран таблицу умножения целых чисел от 1 до 10.

Здесь внутри тела внешнего цикла по переменной i, находится вложенный цикл по переменной j, который выводит в операторе write (не writeln!) произведение i*j, выделяя 4 позиции для результата. Далее идет оператор writeln, который переводит курсор на новую строку. Внешний цикл повторяет 10 раз эту операцию, формируя, таким образом, 10 строк таблицы, которая приведена справа.

- 20 -

Тема №6. Оператор case

Оператор case

Оператор case используется для создания развилки на более чем 2 ветви. Понять его работу поможет следующий пример.

Program YourMark;

{ ваша отметка }

var n : integer;

begin

write ('Введите вашу отметку '); readln (n);

case n of

2 : writeln('Плохо');

3 : writeln('Удовлетворительно ');

4 : writeln('Хорошо');

5 : writeln('Отлично');

end;

end.

Обратите внимание, что оператор case заканчивается скобкой end.

Если пользователь введет отметку, не попадающую в диапазон 2-5, то никаких действий выполняться не будет. Можно, конечно, обработать и эту ситуацию. Тогда синтаксис оператора case будет такой:

Program YourMark2;

{ ваша отметка }

var n : integer;

begin

write('Введите вашу отметку '); readln(n);

case n of

2 : writeln('Плохо');

3 : writeln('Удовлетворительно ');

4 : writeln('Хорошо');

5 : writeln('Отлично')

else writeln ('Вы ввели недопустимую отметку!')

end;

end.

Обратите внимание на отсутствие точки с запятой перед else и двоеточия после else.

Кроме единичных значений переключателя n можно указывать диапазон значений.

Program YourMark3;

{ ваша отметка }

var n : integer;

begin

write('Введите вашу отметку '); readln(n);

case n of

2..3 : writeln ('Это все очень плохо!');

4 : writeln ('Хорошо!');

5..6 : writeln ('Так держать!')

else writeln ('Вы ввели недопустимую отметку!')

end;

end.

Обратите внимание на отсутствие точки с запятой перед else и двоеточия после else.

- 21 -

Задание № 6.1. По образцу программ, написанных на предыдущей странице, решите следующую задачу:

Программа вводит число в диапазоне от 1 до 10 и выводит на экран значение числа русскими буквами (один, два, … десять). (2 балла)

Задание № 6.2. Модифицируйте программу таким образом, чтобы она выводила название чисел в диапазоне от 1 до 99 (ну кассовый аппарат же это делает на чеках!).

Подсказка №1. Для выделения числа десятков используйте хорошо знакомую вам операцию «остаток от деления». Т.е., если в переменной n находится введенное число, то получить число десятков очень просто – d:=n mod 10;

Подсказка №2. Надо рассмотреть по сути три диапазона чисел: от 1 до 9, от 10 до 19, и от 20 до 99. (5 баллов)

Задание № 6.3. Ну, если уж сделали предыдущую задачу, то расширьте диапазон чисел до 999. (еще 3 балла)

Задание № 6.4*. Модифицируйте программу 6.3 (даже в сторону упрощения), так чтобы она выводила число в диапазоне от 1 до 999, записанное римскими цифрами. (еще 4 балла)

Запись чисел римскими цифрами:

1 – I

10 – X

100 – C

2 – II

20 – XX

200 – CC

3 – III

30 – XXX

300 – CCC

4 – IV

40 – XL

400 – CD

5 – V

50 – L

500 – D

6 – VI

60 – LX

600 – DC

7 – VII

70 – LXX

700 – DCC

8 – VIII

80 – LXXX

800 – DCCC

9 – IX

90 – XC

900 – CM

Запись остальных чисел происходит просто «склеиванием» записей приведенных чисел.

Например:

23 – XXIII 357 – CCCLVII 888 – DCCCLXXXVIII 901 – CMI 109 – CIX

- 22 -

Тема №7 Операторы цикла While и Repeat … Until

Мы уже познакомились с оператором цикла for, который используется в тех случаях, когда число повторений тела цикла известно заранее. В языке Pascal существуют еще два оператора цикла, которые используются в тех случаях, когда число повторений цикла заранее не известно, либо сложно вычислимо.

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

Синтаксис оператора:

while условие do оператор;

или

while условие do

begin оператор1; оператор2; ....

end;

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