Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Самоучитель PascalABC.doc
Скачиваний:
5
Добавлен:
01.05.2025
Размер:
1.76 Mб
Скачать

Глава 3 «Оператор выбора case»

Во второй главе Вы познакомились с условным оператором IF. Давайте рассмотрим такую программу:

«Человек вводит число с клавиатуры от 1 до 7. На вывод пишется название дня недели».

Что ж, это легко сделать при помощи условного оператора:

If <введённое число> = 1 then writeln(‘Понедельник’) else

If <введённое число> = 2 then writeln(‘Вторник’) else

If <введённое число> =3 then writeln(‘Среда’) else //..и так далее

Громоздко, не правда ли? Так вот оператор CASE как раз уменьшает такой объём до следующего вида:

Case <введённое число> of

1: writeln(‘Понедельник’);

2: writeln(‘Вторник’);

3: writeln(‘Среда’);

//..и так далее

End;

В конце CASE имеет собственный END – будьте внимательны! Так же, в CASE можно использовать и строки:

Case <введённая строка> of

‘Привет’: writeln(‘Привет!’);

‘Пока’: writeln(‘Пока!’);

‘Ты кто?’: writeln(‘Я – PascalABC!’);

End;

Дословно: Если введённая человеком строка - `Привет`, то написать `Привет!` и так далее..

«Метки и псевдоциклы с оператором goto»

Оператор GOTO используется для осуществления перехода в любую точку программы. Например:

Uses crt;

Var a:integer;

Label 1,2;

BEGIN

Clrscr;

1:Readln(a);

If a>10 then GOTO 1 else GOTO 2;

Writeln(‘Привет!’);

2:END.

Дословно: Пользователь вводит число. Если число больше десяти, то вернуться к метке 1, то есть просить пользователя повторно ввести число, иначе – перейти на метку 2 – то есть, конец программы. Обратите внимание! Слово `Привет` не напечатается, так как после проверки числа `a` программа перейдёт на метку 1 или 2!

Давайте, усовершенствуем предыдущую программу и сделаем так, чтобы пользователь не смог ввести другие числа, кроме чисел от 1 до 7:

Uses crt;

Var day:integer;

LABEL 1;

BEGIN

Clrscr;

1: Readln(day);

Case day of

1: writeln(‘Понедельник’);

2: writeln(‘Вторник’);

3: writeln(‘Среда’);

4: writeln(‘Четверг’);

5: writeln(‘Пятница’);

6: writeln(‘Суббота’);

7: writeln(‘Воскресенье’);

else GOTO 1;

End;

END.

Обратите внимание – объявление метки производится перед основным `BEGIN`. Если ни одного значения не подходит, то есть, a<1 или a>7, тогда пишется оператор else – тоже собственный условный оператор оператора CASE.

Примечание: метка не может начинаться с цифры, но может называться цифрой. Метка так же не может иметь в имени кириллические символы или спецсимволы.

«Операторы деления div и mod»

Существуют такие операторы как DIV и MOD. Они необходимы для того, чтобы извлечь целую часть числа при делении или остаток. Например:

25 div 7 = 3 → потому что 7*3=21, это значит, сколько целых цифр 7 находится в числе 25.

25 mod 7 = 4 → потому что 25-21=4, это значит, что останется при делении целой части 25 на 7, то есть – остаток.

4 div 3 = 1

14 div 7 = 2

4 mod 3 = 1

6 div 3 = 2

6 mod 3 = 0

Из предыдущих примеров видно, что оператор DIV оставляет целую часть от деления, а оператор MOD – дробную. Усовершенствуем предыдущую программу: давайте сделаем так, чтобы при вводе числа больше 7, программа выдавала день недели. Например:

Входные данные

Выходные данные

7

Воскресенье

8

Понедельник

10

Среда

14

Воскресенье

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

7 – воскресенье, всё нормально.

8 – понедельник, то есть, неделя плюс 1 день → воскресенье плюс день = понедельник

9 – Вторник

10 – среда

14 – 2 недели, значит – воскресенье

Ну что ж. Все эти числа делятся на 7 и дают остаток:

7 mod 7 = 0, значит воскресенье

8 mod 7 = 1, значит понедельник

9 mod 7 = 2, значит вторник

10 mod 7 = 3, значит среда

14 mod 7 = 0, снова воскресенье, исходя из первого примера.

Я думаю, тут всё понятно. Попробуйте. Подсказка: перед оператором case добавьте условие: если введённое число больше 7, то взять остаток от деления и присвоить этой же переменной, которую только что ввели. А насчёт нуля – 0, 7: writeln(‘воскресенье’). Ещё одно: пользователь должен ввести число, больше 1, поэтому 0 ввести нельзя. Используйте goto. Тесты используйте из предыдущей таблицы. Плюс один тест: введите 1784 – это суббота. [Задача №7]

Если всё работает – замечательно!