Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции по TURBO PASCAL.doc
Скачиваний:
18
Добавлен:
04.11.2018
Размер:
1.13 Mб
Скачать
    1. “Защита от дурака”

Одним из способов применения условий является проверка исходных данных. Это так называемая “защита от дурака”, которую желательно использовать в своих программах, чтобы предотвратить обработку заведомо неверных данных, а следовательно избежать глупых ошибок, потому что неверные данные никогда не влекут за собой верные результаты! Сообщение об ошибке должно быть лояльным, не оскорбляющим достоинство пользователя. Не нужно писать фразы, вроде: "Болван! Ты в своём уме? Условие прочти!!!". Такие фразы прикольно читать только впервый раз, потом это будет раздражать каждый раз, как случайно нажмёшь не ту клавишу.

Пример использования "защиты от дурака":

Write (’Введите трёхзначное число: ’);

Readln (a);

if (a < 100) or (a >= 1000)

Then begin

Writeln (’Вы ввели не трёхзначное число.’);

Writeln (’Будьте внимательны!!’);

Halt; { Оператор выхода из программы }

End;

{ введено правильное число, продолжаем работу. }

Здесь использован новый оператор halt. Он завершает выполнение программы.

"Защиту от дурака" надо использовать во всех мало-мальски серьёзных программах. Используйте её во всех своих программах, ведь вы потихоньку теряете статус начинающего программиста!

    1. Вложенные условные операторы

Оператор, записанный в условном предложении после then или else, тоже может быть условным оператором. Так получаются вложенные условные операторы.

Например:

Program Maximal_of_3_numbers;

Var a, b, c : integer;

begin

write (’Введите три числа через пробел: ’);

readln (a, b, c);

write (’Максимальное число – ’);

if a > b

Then if a > c { Случай, когда a > b }

Then writeln (a)

Else writeln (c)

Else if b > c { Случай, когда a <= b }

Then writeln (b)

Else writeln (c) ;

End.

В этом примере оператор writeln(a) выполнится только в том случае, если а будет больше b, и a будет больше c.

    1. Оператор выбора Case

Попробуйте самостоятельно решить такое задание:

Дан номер месяца m. Вывести на экран название этого месяца.

Если бы вы начали решать это задание, то столкнулись бы с необходи­мостью много раз использовать условный оператор:

if m = 1 then write (’Январь’);

if m = 2 then write (’Февраль’);

if m = 3 then write (’Март’);

и так далее.

В таких случаях значительно удобней использовать оператор выбора Case.

Формат записи оператора case:

Case <переменная> of

<список1 возможных значений> : <оператор1> ;

<список2 возможных значений> : <оператор2> ;

...

<списокN возможных значений> : <операторN> ;

else <операторN+1>

End

Здесь <список возможных значений> - одно или несколько значений, разделенные запятыми, которые может принимать <переменная>.

Оператор выбора Case работает так. Сначала компьютер берёт значение переменной, которая записывается после служебного слова case, и проверяет, входит ли она в <список1 возможных значений>. Если да, то выполняется <оператор1>, после чего выполнение оператора выбора заканчивается. В противном случае, компьютер проверяет, входит ли значение переменной в <список2 возможных значений>. Если да, то выполняется <оператор2>, после чего выполнение оператора выбора заканчивается. В противном случае проверка продолжается дальше до тех пор, пока есть списки возможных значений. Если значение переменной не вошло ни в один из этих списков, то выполняется <операторN+1>, записанный после слова else.

Как и в условном операторе, в операторе выбора строка со словом else и оператором может отсутствовать. Это будет укороченный вариант записи оператора выбора.

Вернёмся к списку возможных значений. В нём можно указывать не только отдельные числа, но и целые промежутки, например, следующие <списки возможных значений> идентичны, хотя записаны по разному:

1, 2, 3, 4, 7, 8

1..4, 7, 8

1..4, 7..8

8, 2..4, 1, 7

Вспомним задачу, сформулированной вначале. Смотрите, как просто она решается с оператором выбора!

Program All_months;

Var mesiac : integer;

Begin

Write (’Введите номер месяца: ’);

Readln (mesiac);

case mesiac 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 write (’Задан неверный номер месяца.’)

end { Если mesiac не совпал ни с одной переменной }

end.

Теперь сами попробуйте составить программу, которая по заданному номеру месяца выведет время года.

Ниже показан один из способов решения этой задачи. В нём продемонстрированы все особенности оператора выбора.

Program Vremena_goda;

Var mesiac : integer;

Begin

Write (’Введите номер месяца: ’);

Readln (mesiac);

case mesiac of

3, 4, 5: write (’Весна’);{Можно перечислить все возможные значения}

6 : write (’Лето’); { Можно указать только одно значение }

7 : write (’Лето’); { Можно указать только одно значение }

8 : write (’Лето’); { Можно указать только одно значение }

9..11 : write (’Осень’); { Можно задать промежуток }

1..2,12: write (’Зима’);

else write (’Задан неверный номер месяца.’)

{ Если mesiac не совпал ни с одной переменной }

end

end.

Остаётся добавить, что если в оператора case после двоеточия нужно указать более одного оператора, то надо использовать составной оператор.