- •Глава 1 «Знакомство с языком»
- •«Шаблон»
- •«Типы данных»
- •«Первая комбинированная программа»
- •«Первая самостоятельная программа»
- •Глава 2 «Алгоритмические операторы»
- •«Структура типа Линейная или Следование»
- •«Структура типа Ветвление»
- •«Структура типа Цикл»
- •«Цикл со счётчиком»
- •«Цикл с постусловием»
- •«Цикл с предусловием»
- •Глава 3 «Оператор выбора case»
- •«Метки и псевдоциклы с оператором goto»
- •«Операторы деления div и mod»
- •«Рандомные числа»
- •«Некоторые полезные функции и операторы»
- •«Комментарии»
- •«Файлы. Процедуры и функции при работе с файлами»
Глава 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]
Если всё работает – замечательно!
