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

* 19.3. Оператор выбора case

Оператор CASE представляет собой частный случай структуры ВЕТВЛЕНИЕ, когда возникает необходимость выбора одного из нескольких возможных вариантов вычислений в зависимости от значений некоторого выражения (ключа, селектора).

Порядок выполнения оператора Case следующий: вычисляется значение выражения K; полученное значение сравнивается с K1, K2, …, KN; если оно совпадает с одним из этих значений, то управление передается соответствующему оператору и выполнение оператора CASE завершается. Если значение выражения K не совпадает ни с одним из возможных значений, далее все зависит от типа оператора CASE: если он полный (в нем присутствует служебное слово ELSE), то управление передается команде S; в противном случае выполнение оператора завершается.

Конструкция

ИнтАл

Паскаль

Выбрать_По K

K1: S1

K2: S2

. . .

K N: SN

Иначе S

Конец_Выбора

K – переменная целого типа;

K1, K2, …, KN – возможные значения переменной К;

S1, S2, …, SN, S – выполняемые команды

CASE K OF

K1 : S1 ;

K2 : S2 ;

. . .

KN : SN

ELSE S

END ;

K – выражение, определяющее значение ключа;

K1, K2, …, KN – возможные значения ключа;

S1, S2, …, SN, S – выполняемые операторы (простые или составные)

Вариант записи, полученный после зачеркивания блока и строк в приведенных выше схемах, соответствует оператору выбора (или, как его еще называют, оператору варианта) в неполной (сокращенной) форме.

Селектор K представляет собой выражение порядкового типа. К порядковому типу относятся целочисленные типы, логический тип и символьный, с которым Вы познакомитесь в разделе 4.

В Паскале допускается использование нескольких возможных значений ключей, разделенных запятой (перечисление значений) или двумя точками “..” (диапазон значений).

П ример 1. По номеру дня недели требуется определить его название.

Program Day ;

Var Num : Byte ;

Begin

Writeln ('Введите номер дня недели') ;

If Num = 1 then Writeln

('Понедельник')

Else if Num=2 then Writeln ('Вторник')

Else if Num=3 then Writeln ('Среда')

Else if Num=4 then

Writeln ('Четверг')

Else if Num=5 then

Writeln ('Пятница')

Else if Num=6 then

Writeln ('Суббота')

Else if Num=7 then

Writeln ('Воскресенье')

Else Writeln ('Это не номер дня …') ;

Readln (Num);

Case Num of

1: Writeln ('Понедельник') ;

2: Writeln ('Вторник') ;

3: Writeln ('Среда') ;

4: Writeln ('Четверг') ;

5: Writeln ('Пятница') ;

6: Writeln ('Суббота') ;

7: Writeln ('Воскресенье')

Else

Writeln ('Это не номер дня недели')

End;

End.

Пример 2. Составить программу, которая для заданных номеров месяца и года позволит определить количество дней в этом месяце.

Дано: month, year – номера месяца и года.

Найти: kol_days – количество дней в этом месяце.

Связь:

year – високосный, если year делится без остатка на 4, кроме тех, которые делятся на 100 и не делятся на 400. Например, 1900 год – не високосный, 2000 год – високосный.

Будем считать, что данные корректны.

Program Days ;

Var Year : Integer ;

month, kol_days : Byte ;

Sto : Boolean;

Begin

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

Readln (month) ;

Case month of

1, 3, 5, 7, 8, 10, 12 : kol_days := 31 ;

4, 6, 9, 11 : kol_days := 30 ;

2 : Begin {февраль}

Write ('Введите номер года ') ;

Readln (Year) ;

Sto:=(Year mod 100)=0;

if ((Sto=True) and (Year mod 400 =0)) or

((Sto=False) and (Year mod 4=0)) Then

kol_days := 29

Else kol_days := 28

End;

End ;

Writeln (kol_days);

End .

Пример 3. Составить программу проверки, делится ли заданное натуральное число на 7.

Пусть х – заданное натуральное число. Составим выражение сравнения: x mod 7 =0. Используем это выражение в качестве селектора; его возможные значения: True, False. Ниже приводятся два варианта использования оператора выбора (в полной и неполной формах):

Program PRIM_3 ;

Var x : LongInt ;

Begin

Write ('Введите натуральное число ') ;

Readln (x) ;

Case x mod 7 = 0 of

True : Writeln ('делится на 7') ;

False : Writeln ('не делится на 7')

Case x mod 7 = 0 of

True : Writeln ('делится на 7')

Else Writeln ('не делится на 7')

End ;

End .

  1. Какова структура условного оператора? * оператора выбора?

  2. Каков порядок выполнения условного оператора? * оператора выбора?

  1. Напишите программы решения следующих задач:

1) На экран компьютера выводится текст:

Вывод знака препинания в зависимости от типа предложения:

  1. Повествовательное

  2. Вопросительное

  3. Восклицательное

Выберите номер типа предложения G

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

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

3) На экран компьютера выводится текст:

Вычисление площади треугольника по следующим элементам:

  1. Основанию и высоте

  2. Двум сторонам и углу между ними

  3. Трем сторонам

Выберите номер G

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

4) Таблица К. Купера позволяет определить степень физической подготовленности человека в зависимости от суммы очков, набранных им на занятиях по физической культуре за неделю:

Сумма очков, набранных за неделю

Степень физической подготовленности

Юноша

Девушка

Не менее 75

Не менее 65

Превосходно

51-74

41-64

Отлично

32-50

27-40

Хорошо

21-31

16-26

Удовлетворительно

10-20

8-15

Плохо

Меньшее 10

Меньше 8

Очень плохо

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

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

6) В пятиэтажном доме на каждом этаже по 4 квартиры. Программа должна предложить ввести номер этажа и вывести номера квартир на этом этаже.

7) Программа предлагает ввести число k полных лет человека (от 1 до 120) и вывести фразу: «Вам k лет». Например, при k=3 – «Вам три года», k=18 – «Вам 18 лет», k=101 – «Вам 101 год».

8) Определить наиболее подходящий возраст партнера для вступления в брак. Программа должна запросить данные пользователя: возраст, признак пола (из выведенного на экран меню: 1 – юноша, 2 – девушка) и вывести подходящий возраст партнера, который вычисляется так: возраст девушки равен увеличенной на 7 половине возраста юноши, возраст юноши определяется как удвоенный возраст девушки минус 14.

9) Вывести в римской системе нумерации век, к которому относится заданный год (номер года вводится с клавиатуры).

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

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