Оператор множественного выбора CASE
Сегодня наша задача – познакомиться со способами организации в программах ветвления из трех и более ветвей.
В языке Pascal имеются два оператора ветвления: If (ветвление по условию); Case (ветвление по выбору). Если число уровней вложения условного оператора If больше двух-трёх, то лучше воспользоваться оператором ветвления по выбору Case. 3 Операторы ветвления
Здесь можно пойти разными путями. Первый способ В алгоритме вычисления по данной формуле предусмотреть проверку первого условия (и вычисление по первой формуле, если оно истинно); затем проверку второго условия, но только в том случае, если первое ложно; вычисление по второй формуле, если второе условие истинно и по третьей, если ложно. Причем если истинно первое условие, то после вычисления по первой формуле происходит выход из структуры Ветвление. Рассмотрим пример:
Программа для нашего примера примет вид: Program P2; Var a,x:real; Begin Writeln('Введите x') ; Read (x); If x
В алгоритме вычисления по данной формуле можно предусмотреть проверку каждого условия (и выполнение серии операторов, если условие истинно). То есть, в отличие от первого способа, после выполнения операторов, соответствующих истинному условию, проверка условий не заканчивается. Второй способ организации ветвления Таким образом, при выполнении алгоритма первого способа наибольшее число проверяемых условий на 1 меньше числа разветвлений, а при выполнении алгоритма второго способа число проверяемых условий равно числу разветвлений.
Программа, реализующая второй способ, такова: Program P4; Var a, x: real; Begin Writeln('Введите x'); Read (x ); If x
Операция логического умножения И применяется тогда, когда переменная должна удовлетворять одновременно двум более простым условиям. P, Q – простые условия
Операция логического сложения ИЛИ применяется тогда, когда переменная должна удовлетворять хотя бы одному из двух и более простых условий
Оператор выбора CASE OF Здесь селектор – проверяемое целое арифметическое, логическое или символьное выражение. Причем оно может принимать значения лишь некоторых типов, общим свойством для которых является то, что их значения известны точно. Поэтому, в частности, тип селектора не может быть вещественного типа (Real), представляют собой перечисления возможных значений выражения селектор. При совпадении значения выражения хотя бы с одним из значений будет выполняться соответствующее и на этом выполнение команды выбора завершается.
Вид списка Значение Список, состоящий из одного значения a 8 TRUE Список, содержащий перечисление значений 1, 4, 5 a, Список, содержащий интервалы значений 1..5, a..z Список, содержащий смешанную форму представления значений 1.. 5, 15, 55 a..z, A, B могут быть заданы следующими способами:
Работу этого оператора можно проиллюстрировать следующим примером: Составить программу, которая спрашивает у пользователя номер месяца и выводит соответствующее названия времени года. В случае, если пользователь укажет недопустимое число, программа должна вывести сообщение об ошибке «Ошибка ввода данных». Ниже приведен рекомендованный вид экрана во время работы программы: Введите номер месяца (число от 1 до 12) и нажмите -> 12 Зима
Program Pr; Var month: Integer; Begin Writeln (Введите номер месяца (число от 1 до 12) и нажмите ); Read (month); Case month of 1, 2, 12: Writeln(Зима); 3.. 5: Writeln(Весна); 6.. 8: Writeln(Лето); 9..11: Writeln (Осень); Else Writeln (Ошибка ввода данных – число должно быть от 1 до 12); End; End.
Case x of : writeln(Отрицательные); 0: writeln(Ноль); : writeln(Положительные) Else WriteLn(Выход из диапазона); End; Case Рост ученика of : Вы ученик начальных классов; 31,32,33 : Вы учитесь в 5-6 классе; : Вы старшеклассник ; Else Вы явно не ученик; End; 14 Оператор выбора Case Для перечисления значений используется запятая, для выбора диапазона двоеточие.
Program Maximum; Var Max, X, Y : Real; Begin Write('Введите два неравных числа:'); ReadLn(X, Y); Case X > Y Of TRUE : Max := X; FALSE : Max := Y End; Write('Максимальное из двух есть ', Max : 12 : 6) End. Найти наибольшее из двух действительных чисел, используя оператор выбора.
Сравнить значение переменной ch с различными диапазонами значений. var ch: char; begin write ('Введите символ: '); readln (ch); case ch of '0'..'9': write ('Это число'); 'a'..'z','A'..'Z': write ('Это английская буква'); 'а'..'я','А'..'Я': write ('Это русская буква') end; end.
Составить программу, которая по номеру дня недели выводит на экран его название: Program dni_nedeli; Var n: byte; Begin Readln(n); Case n of 1: writeln(понедельник ); 2: writeln(вторник ); 3: writeln(среда ); 4: writeln(четверг ); 5: writeln(пятница ); 6: writeln(суббота ); 7: writeln(воскресенье); else writeln(дня недели с номером, n,нет); end; end.
Преобразовать символ, если он является строчной русской буквой, в заглавную букву. Program UpCase; Var C : Char; Begin Write('Введите символ:'); ReadLn(C); Case C Of 'а'..'п' : C := Chr(Ord(C) - 32); 'р'..'я' : C := Chr(Ord(C) - 80) End; WriteLn(C); End. Так как в альтернативной системе кодировки ASCII строчные русские буквы идут не подряд, а с некоторым разрывом, то в данном случае, в зависимости от того, в какую часть таблицы попадает введенная буква, используется та или иная формула. Если введённый символ не является строчной русской буквой, он выводится без изменения.
Задача 303. Коровы По данному числу n закончите фразу "На лугу пасется..." одним из возможных продолжений: "n коров", "n корова", "n коровы", правильно склоняя слово "корова". Формат входных данных Дано число n (n
program z303; var n: longint; begin readln (n); case n mod 100 of : writeln(n,'korov':6) else case n mod 10 of 0,5..9: writeln (n,' korov'); 1: writeln (n,' korova'); 2..4: writeln (n,' korovy');end; end; end.
program z303; var n:longint; p1,p2,p3,p4: boolean; s:string; begin readln(n); p1:=(abs(n mod 100)>=11) and (abs(n mod 100)=2) and (abs(n mod 10)=5) and (abs(n mod 10)
В старояпонском календаре был принят двенадцатилетний цикл. Годы внутри цикла носили названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, петуха, собаки и свиньи. Написать программу, которая позволяет ввести номер года и печатает его название по старояпонскому календарю. Справка: 1996 г. год крысы начало очередного цикла. Program Goroskop; Var Year : Integer; Begin Write('Введите год '); ReadLn(Year); CASE Year MOD 12 OF 0 : WriteLn('Год Обезьяны'); 1 : WriteLn('Год Петуха'); 2 : WriteLn('Год Собаки'); 3 : WriteLn('Год Свиньи'); 4 : WriteLn('Год Крысы'); 5 : WriteLn('Год Коровы'); 6 : WriteLn('Год Тигра'); 7 : WriteLn('Год Зайца'); 8 : WriteLn('Год Дракона'); 9 : WriteLn('Год Змеи'); 10 : WriteLn('Год Лошади'); 11 : WriteLn('Год Овцы') END; END.
Задача Римская система счисления Дано число X. Требуется перевести это число в римскую систему счисления. ВводВывод 4IV 19XIX 46XLVI Формат входного файла Дано число X в десятичной системе счисления (1 X 100). Формат выходного файла Выведите X в римской системе счисления. Примеры
program z1459; var n,z:integer;s:string; begin readln(n); s:=''; if (n>=40) and (n50) and (n100) then z:=(n-50)div 10; if (n>10) and (n
Составить программу, вычисляющую стоимость междугородного телефонного разговора (цена одной минуты определяется по таблице). Исходными данными для программы являются код города и продолжительность разговора. Ниже представлен рекомендуемый вид экрана во время работы программы: Вычисление стоимости разговора по телефону. Введите исходные данные: Код города -> 812 Длительность (целое количество минут) -> 3 Город: Владивосток Цена минуты:2.20 руб, Стоимость разговора: 6.60 руб. ГородКод Цена минуты (руб.) Владивосток4232,2 Москва0951,0 Мурманск8151,2 Самара8461,4
2. Составить программу, которая после введенного с клавиатуры числа (в диапазоне от 1 до 99), обозначающего денежную единицу, дописывает слово «Копейка» в правильной форме. Например, 5 копеек, 41 копейка и т. д. 1. Выучить конспект. 3. Составить программу, которая по номеру месяца, введенного с клавиатуры, выводит количество дней в нем. В программе учесть количество дней в феврале для високосного и не високосного годов.