Ветвление в Pascal

advertisement
Лабораторная работа
Язык программирования Паскаль
Тема: Реализация алгоритмов c ветвлением в Паскале.
Порядок выполнения работы
1. Изучить теоретические сведения по теме “Реализация алгоритмов с ветвлением
в Паскале ”.
2. Получить индивидуальное задание у преподавателя и разработать программу в
соответствии с поставленной задачей.
3. Показать работающую программу преподавателю.
4. Ответить на контрольные вопросы.
5. Подготовить письменный отчет.
Форма представления отчета:
1. Тема работы.
2. Условия задания.
3. Текст программы и исходные данные при вводе.
4. Результаты выполнения программы.
Краткие теоретические сведения.
Часто при выполнении алгоритма должны предлагаться различные действия в
зависимости от выполнения или невыполнения некоторого условия. Такие
алгоритмические структуры называют ветвлением.
Полное ветвление
Неполное ветвление
Пример. Вычислить выражение y  x для введенного x.
Исходные данные: x.
Результат: y, или ‘функция не определена’
проверяемый
случай
x=9
x=-9
x>=0
y
результат
9>=0
да
-9>=0
нет
y= 9  3
y=  3
-
функция не
определена
Пример. Вычислить выражение y  x для введенного x.
 x, x  0
x 
 x , x  0
проверяемый
случай
x>=0
y
результат
x=9
9>=0
да
y= 9  3
y=  3
x=-9
-9>=0
нет
-
функция
не
определена
Пример. Выбрать максимальное из 2х
чисел a и b.
проверяемый
случай
x
y
результат
a=9
b=15
a=18
b=3
a=7
b=7
9>15
нет
18>3
да
7>7
нет
15>9
да
15
-
18
7>7
нет
числа
равны
Пример. Выбрать максимальное из 3х чисел a, b, c.
проверяемый
случай
a=9
b=15
c=2
a=8
b=3
с=22
a=12
b=9
c=1
x
max
y
результат
9>15
нет
15
2>15
нет
15
8>3
да
8
22>8
да
22
17>9
нет
17
1>17
нет
17
Ветвление в Pascal
Логические выражения
Переменные логического типа описываются с помощью служебного слова Boolean.
Они могут принимать два значения: true – истина и false – ложь.
Var
F: Boolean;
Begin
F:=true;
…
Логическое выражение – выражение, содержащее константы, переменные, знаки
математических операций, знаки отношений (=, <, >, <>, <=, >=) и логические операции
(not, or, and, xor).
2+3=5 – true
2*5>20 – false
7+8<>10+5 – false
Логические операции
1. ОТРИЦАНИЕ NOT (НЕ)
Инвертирует (меняет на противоположное) значение логического выражения.
x
true
false
Not (x)
false
true
NOT (2+3=5) – false
2. ЛОГИЧЕСКОЕ СЛОЖЕНИЕ OR (ИЛИ)
x OR y – истинно, если истинно либо x, либо y.
x
true
true
false
false
y
x OR y
true
true
false
true
true
true
false
False
(2>3) OR (7=7) – true
3. ЛОГИЧЕСКОЕ УМНОЖЕНИЕ AND (И)
x AND y – истинно, если истинны и x, и y.
x
true
true
false
false
y
x OR y
true
true
false
false
true
false
false
false
(2>3) AND (7=7) – false
4. ИСКЛЮЧАЮЩЕЕ ИЛИ XOR
x XOR y – истинно, когда значения x и y различны.
x
y
x OR y
true
true
false
false
true
false
true
false
true
true
false
false
Пример 1. Определить, является ли введенное число четным. Вывести true
(четное), false (нечетное).
program primer;
var
N: integer;
f: boolean;
begin
Writeln(‘N=');
Readln(N);
F := N mod 2 =0;
Writeln(F);
Readln;
end.
Пример 2. Определить, принадлежит ли введенное число интервалу (0; 10).
0< x< 10
(x>0) and (x<10)
program primer;
var
x: integer;
f: boolean;
begin
Writeln(‘x=');
Readln(x);
F := (x>0) and (x<10);
Writeln(F);
Readln;
end.
Для программирования ветвления в языке Pascal предусмотрен условный оператор, общий
вид которого следующий:
Рис.1. Общий вид условного оператора
Выполнение условного оператора начинается с вычисления значения логического
выражения, записанного в условии. Значением логического выражения является истина
(True) или ложь (False). Если условие истинно, то выполняется <оператор1>, в
противном случае - <оператор2>. После служебных слов Then и Else могут выполняться
несколько операторов. Как объяснить, какие операторы должны быть выполнены? В этом
случае на помощь приходят операторные скобки Begin и End, которые отмечают
соответственно начало и конец требуемой группы операторов.
Примечание. После <оператора1>, то есть перед служебным словом Else, символ ";"
(точка с запятой) не ставится!!!
Условные конструкции могут содержать не одно, а несколько условий. Для
объединения этих условий в одном условном операторе применяются следующие
логические операции: NOT (отрицание), AND ("и"), OR ("или"), XOR (исключающее
"или"). Обозначения и результаты этих операций рассмотрены на 14 шаге. Приведем
пример: запишем на языке Pascal формулу:
Соответствующий ей условный оператор будет выглядеть следующим образом:
If (x>=0) and (x<=14) Then y:=x-12
Else y:=x*x;
Примечания.
1. Отношения, стоящие слева и справа от знака логической операции, должны быть
заключены в скобки, поскольку логические операции имеют более высокий приоритет.
2. Принят следующий приоритет операций:




NOT;
AND, *, DIV, MOD;
OR, XOR, +, -;
операции отношения.
В некоторых случаях оператор после служебного слова Else может отсутствовать. Тогда
условный оператор будет выглядеть так:
If <условие> Then <оператор>
Else Ничего не делать;
Раз никаких действий выполнять не требуется, то можно убрать фразу Ничего не делать
вместе со служебным словом Else. Тогда условная конструкция будет иметь следующий
вид:
If <условие> Then <оператор>;
Что сделает компьютер, если проверяемое условие является ложным?
В качестве операторов, располагающихся после служебных слов Then и Else, могут
выступать другие условные операторы. Правила составления программы на языке Pascal
позволяют записывать её в свободной форме. Однако для удобства восприятия
программы, особенно большой и сильно разветвлённой, рекомендуется служебное слово
Else писать под словом If, к которому оно относится.
Приведем пример простой программы, иллюстрирующей работу условной
конструкции. Пусть требуется вывести на экран наибольшее из двух данных целых чисел.
Program Primer;
Var
x,y:Integer;
Begin
WriteLn('Введите два числа: ');
{Вводим два целых числа}
ReadLn(x,y);
{Если (If) x больше y, то (Then) выводим x}
If x>y Then WriteLn('Наибольшее из чисел: ',x)
{Иначе (Else) выводим y}
Else WriteLn('Наибольшее из чисел: ',y);
End.
Значение какой переменной будет выведено на экран в
случае равенства чисел? Измените программу так, чтобы в этом
случае она выводила на экран сообщение: "Числа равны".
При решении задач часто приходится рассматривать не два, а большее количество
вариантов. Это можно реализовать, используя несколько условных операторов. В
результате такие программы принимают объемный, сильно разветвленный вид. Для
упрощения таких ситуаций в языке программирования Pascal используется оператор
варианта (выбора), который является расширением условной конструкции. Его общий вид
следующий:
Рис.1. Общий вид оператора Case
На месте переменной-признака может располагаться выражение. В этом случае
выполнение оператора выбора начинается с вычисления значения этого выражения. В
случае, если значение этого выражения (или значение переменной, если здесь
расположена переменная) равен одному из перечисленных значений, то выполняется
соответствующий оператор. Затем управление передается за пределы оператора выбора.
Если значение выражения не совпадет ни с одним из указанных значений, то выполняется
оператор, стоящий после служебного слова Else. В операторе варианта, также как и в
условной конструкции, ветвь Else может отсутствовать. В этом случае, опять же, если
значение выражения не совпадет ни с одним из указанных значений, то управление
передается на оператор, следующий за End.
Приведем пример программы, иллюстрирующей работу конструкции выбора. Пусть по
заданному месяцу требуется определить, к какому кварталу он относится (рис.2):
Рис.2. Текст программы
Здесь проиллюстрировано использование как набора, так и диапазона значений.
Прокомментируем эту программу. После того, как пользователь задал значение
переменной (пусть, например, a=4) выполняется оператор варианта. Здесь в качестве
переменной-признака выступает переменная a. Сначала компьютер последовательно
сравнивает значение этой переменной со значениями 1, 2 и 3. Не получив положительного
результата, компьютер переходит к следующей группе значений, где обнаруживает
совпадение. После этого он выводит на экран сообщение: Второй квартал и выходит из
оператора варианта.
Допустим, пользователь задал a=13. В этом случае ни одна проверка не даст
положительного результата. Поэтому будет осуществлен переход на конструкцию Else,
выполнение которой приведет к выводу на экран сообщения: Такого месяца нет и
завершению выполнения оператора варианта.
Контрольные вопросы
1. Условные операторы. Оператор if. Формат, описание. Основные правила
использования. Особенности использования вложенного оператора if.
2. Примеры использования оператора if.
3. Оператор выбора case. Формат, описание.
4. Правила использования оператора сase. Примеры использования.
ЗАДАНИЯ ДЛЯ САМОСТОЯТЕЛЬНОЙ РАБОТЫ
1.
Вычислить
y=
(X+1)2 , если x<0
X+2, если 0≤x<10
2X , если x≥10
(X+1)2 + ln x, если x>0
2.
Вычислить y=
| x |, если x 0
X2 , если x<0
3.
Вычислить y= X+2sinX, если 0≤x<20
1/x , если x≥ 20
4.
Вводятся A, B, C, D. Найти среднее арифметическое максимального и
минимального.
5.
Определить, какие из чисел A, B, C, D. принадлежат интервалу (-10, 15).
6.
Определить, какая из двух точек - M1(x1,y1) или M2(x2,y2) - расположена ближе к
началу координат. Вывести на экран дисплея координаты этой точки.
7.
Определить, какая из двух фигур (круг или квадрат) имеет большую площадь.
Известно, что сторона квадрата равна а, радиус круга r. Вывести на экран название и
значение площади большей фигуры.
8.
Определить, равна ли сумма двух первых цифр заданного четырехзначного числа
сумме двух его последних цифр.
9.
Определить, есть ли среди цифр заданного трехзначного числа одинаковые.
10.
Составить программу, определяющую является ли билет с 6-значным номером
счастливым (счастливым является билет, у которого сумма первых 3 десятичных цифр
равна сумме 3 последних).
11.
Вводится трехзначное число. Определить, является ли оно числом Армстронга.
Число Армстронга — натуральное число, которое равно сумме своих цифр, возведённых в
степень, равную количеству его цифр. Например, число 153 — число Армстронга, потому
что 1³ + 5³ + 3³ = 153
12.
Вводятся положительные a, b, c d. Определить, можно ли прямоугольник со
сторонами a, b поместить внутри прямоугольника со сторонами c, d так, чтобы каждая из
сторон первого прямоугольника была параллельна или перпендикулярна каждой стороне
второго треугольника.
13. Составить программу, проверяющую знание таблицы умножения. В программе
выбираются случайным образом целые числа X (1X9) и Y (1Y9) и предлагается
пользователю ввести ответ. Результат выполнения программы: ‘Правильно’ или
‘Неправильно’.
14.
Вводятся числа A, B, C. Упорядочить их по возрастанию.
15. Даны координаты (как целые от 1 до 8) двух полей шахматной доски. Определить,
может ли ферзь за один ход перейти с одного из этих полей на другое. Ответ вывести в
форме «Да» / «Нет»
16. Даны координаты (как целые от 1 до 8) двух полей шахматной доски. Определить,
может ли ладья за один ход перейти с одного из этих полей на другое. Ответ вывести в
форме «Да». В противном случае найти координаты (t,s) клетки первого хода, чтобы это
можно было сделать за два хода и вывести сообщение «Нет/(t,s)».
17.
По номеру месяца определить количество дней в нем (в невисокосном году).
18.
По номеру класса определить в начальной школе, среднем звене или в старших
классах обучается ученик.
19.
По числу текущего месяца определить день недели.
20.
В старояпонском календаре был принят двенадцатилетний цикл. Годы внутри
цикла носили названия животных: крысы, коровы, тигра, зайца, дракона, змеи, лошади,
овцы, обезьяны, петуха, собаки, свиньи. Напишите программу, которая позволяет ввести
номер года нашей эры и печатает его название по старояпонскому календарю. (1996 г. –
начало очередного цикла).
21.
Напишите программу, которая по номеру дня недели - целому числу от 1 до 7 выдает в качестве результата количество занятий в вашей группе в соответствующий
день.
22.
В старояпонском календаре был принят 60-летний цикл, состоящий из пяти 12летних подциклов. Подциклы обозначались названиями цвета: зеленый, красный, желтый,
белый и черный. Годы внутри подцикла носили названия животных: крысы, коровы,
тигра, зайца, дракона, змеи, лошади, овцы, обезьяны, петуха, собаки, свиньи. Написать
программу, которая позволяет ввести номер года нашей эры и печатает его название по
старояпонскому календарю. (1984 г. – год зеленой крысы– начало очередного цикла).
23.
В зависимости от стажа работы педагогам введена надбавка в размере: для
работающих от 5 до 10 лет–10%; для работающих от 10 до 15 лет–15%; для
работающих свыше 15 лет–20%. Составьте программу, которая по заданному стажу
работы и размеру оклада определит размер заработной платы.
24. Составить программу, которая после введенного с клавиатуры числа (в диапазоне от 1
до 999), обозначающего денежную величину, дописывает слово «рубль» в правильной
форме. Например, 5 рублей, 21 рубль, 173 рубля.
Download