Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Информатика Laboratornaya_rabota_3_vetvlenie

.pdf
Скачиваний:
47
Добавлен:
31.05.2015
Размер:
415.07 Кб
Скачать

Лабораторная работа № 3

ПРОГРАММИРОВАНИЕ АЛГОРИТМОВ РАЗВЕТВЛЯЮЩЕЙСЯ СТРУКТУРЫ

Цель работы: овладение практическими навыками разработки и программирования разветвляющихся процессов с использованием условных операторов (If...then...

else... и Case).

Теоретические сведения

Операторы условного перехода (If, Case)

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

Оператор If. Его синтаксис:

If A

then ST1 else ST2;

где:

A – булевское выражение (возвращающее TRUE или FALSE); ST1, ST2 – операторы (возможно пустые или составные).

Если значение выражения A – TRUE, то выполняется оператор ST1; если значение выражения A – FALSE, то выполняется оператор ST2. Затем, в обоих случаях управление передается следующему оператору программы. Допускается и краткая форма условного оператора:

If A then ST;

где:

A – булевское выражение;

ST – оператор (возможно составной).

Если значение A – TRUE, то выполняется оператор ST. Если значение A – FALSE, то управление передается оператору, следующему за оператором IF.

Обычно при написании программы не рекомендуется использовать многократно вложенные друг в друга условные операторы – программа становится громоздкой и трудно понимаемой. Считается, что число уровней вложения не должно превышать двухтрех. Но как быть, если необходимо проверять достаточно много условий и в зависимости от них выполнять те или иные действия? Для этих целей в языке Pascal существует специальный оператор выбора Case.

Оператор выбора Case. Его синтаксис:

Case P of

a:S1;

b:S2;

n: Sn else Sn+1

end;

где:

Case («случай») – служебное слово;

P – переменная, называемая селектором или переключателем; a, b – константы выбора;

S1, S2, Sn, Sn+1 – операторы.

При выполнении этого оператора сначала вычисляется некоторое выражение p, называемое селектором выбора, а затем в зависимости от полученного значения (если оно равно одной из констант a, b, …, n, которые называются константами выбора), выполняется один из операторов: S1, S2,…, Sn, помеченные соответствующей константой. Если значение выражения P не совпадает ни с одной из констант выбора, выполняется

оператор Sn+1, содержащийся после ключевого слова else, причем ветвь else в операторе Case необязательна. Использованные здесь зарезервированные слова Case, of, else, end

имеют смысл вариант, из, иначе, конец.

Каждый из операторов в операторе Case, помеченный константой выбора может быть составным.

Выражение, играющее роль селектора, должно принадлежать порядковому типу данных (т.е. типу, имеющему конечное число значений). Например: Integer, Boolean, Char.

Кроме одиночных констант, в вариантах оператора Case могут использоваться диапазоны значений и списки. Например:

Case x of

1..5: S1;

2, 3, 8: S2;

4, 6, 9..13: S3

else S4 end;

Составной оператор

Составной оператор представляет собой группу из произвольного числа операторов, отделенных друг от друга точкой с запятой, и ограниченную операторными скобками – зарезервированными словами в языке Pascal begin и end:

begin S1; S2 ;...;Sn end;

Поэтому приведенный оператор можно мысленно представить в таком виде: (S1;S2;…Sn).Составной оператор используется в том случае, если необходимо выполнить последовательность операторов внутри какой-либо конструкции как единое целое.

Выражения и операции отношения

Выражением отношения называется словосочетание языка, в котором два выражения связаны знаком операции отношения. Выражение отношения определяет истинность или ложность результата. Операции отношения выполняют сравнение двух операндов и определяют, истинно значение выражения или ложно.

Сравниваемые величины могут принадлежать к любому скалярному или перечисляемому типу данных. Результат всегда имеет булевский тип и принимает одно из двух значений: True (истина) или False (ложь).

Таблица 3.1 Операции отношения

Операция

Название

Выражение

Результат

=

Равно

А=В

True, если А равно В

<>

Неравно

А<>В

True, если А не равно В

>

Больше

А>В

True, если А больше В

<

Меньше

А<В

True, если А меньше В

>=

Больше или равно

А>=В

True, если А больше или

равно В

 

 

 

<=

Меньше или равно

А<=В

True, если А меньше или

равно В

 

 

 

Логические выражения и операции

Результатом выполнения логического (булевского) выражения является логическое значение True или False. Операндами могут служить только данные булевского типа.

Простейшими видами логических выражений являются следующие:

логическая константа;

логическая переменная;

элемент массива логического типа;

логическая функция;

выражение отношения.

Другие логические выражения строятся из вышеперечисленных путем применения логических операций и круглых скобок.

Таблица 3.2 Результаты применения логических операций

Операция

Действие

Выражение

А

В

Результат

Not

Логическое

not A

True

-

False

отрицание

False

-

True

 

 

 

 

 

True

True

True

And

Логическое И

A and В

True

False

False

False

True

False

 

 

 

 

 

 

False

False

False

 

 

 

True

True

True

Or

Логическое ИЛИ

A or В

True

False

True

False

True

True

 

 

 

 

 

 

False

False

False

 

 

 

True

True

False

Xor

Исключающее ИЛИ

А хог В

True

False

True

False

True

True

 

 

 

 

 

 

False

False

False

Примеры выполнения заданий Пример 1. Определить большее из двух целых чисел X и Y.

 

 

 

 

 

 

 

начало

 

 

 

 

‘Введите первое число’

 

 

 

 

 

 

 

x

 

 

 

 

‘Введите второе число’

 

 

 

 

 

 

 

y

 

 

 

 

Да

 

 

 

Нет

 

 

 

 

 

 

 

x>=y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Bolshee:=x

 

 

 

 

Bolshee:=y

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

‘Результат’,Bolshee

 

 

 

 

 

 

 

конец

PROGRAM Primer_1;

 

 

 

 

 

 

 

 

var X

 

: Integer;

{Первый аргумент}

Y

: Integer;

{Второй аргумент}

Bolshee: Integer;

{Результат}

BEGIN

 

 

 

 

 

 

 

 

 

 

 

 

Write ('Введите первое число: '); ReadLn (X);

Write ('Введите второе число: '); ReadLn (Y);

If X>=Y

 

 

 

 

 

 

 

 

 

then Bolshee:=X

 

 

 

 

 

 

 

 

 

else

Bolshee:=Y;

 

 

 

 

 

 

 

 

WriteLn ('Результат: ',Bolshee)

END.

Пример 2. Напишите оператор присваивания, в результате выполнения которого логическая переменная T принимает значение True, если выполняется указанное условие, и значение False в противном случае:

а. Числа x, y, z равны между собой

б. Из чисел x, y, z только два равны между собой

PROGRAM Primer_2_a; var x,y,z:word; t:boolean;

BEGIN

writeln (введите x,y,z'); readln(x,y,z);

if (x=y) and (y=z) then t:=true else t:=false; writeln (t); readln

END.

PROGRAM Primer_2_b; var x,y,z:word; t:boolean;

BEGIN

writeln (введите x,y,z'); readln(x,y,z);

if (x=y) or (x=z) or (y=z) then t:=true else t:=false; writeln (t);

readln END.

Пример 3. Напишите программу, переводящую школьные отметки в оценки.

 

 

начало

 

 

 

Введите величину

 

 

 

 

отметки Ball

 

 

 

 

нет

 

 

 

 

Ball

 

 

 

 

да

 

 

=1

=2

=3

=4

=5

 

Очень

плохо

удовлетворит

хорошо

отлично

плохо

ельно

 

 

 

 

 

конец

 

 

PROGRAM Primer_3;

 

 

 

 

var BALL : Integer;

 

 

 

 

BEGIN

 

 

 

 

Write ('Введите величину отметки: ');

 

 

Read (BALL); WriteLn;

 

 

 

 

Case BALL of

{Перевод отметки в оценку}

 

 

1: WriteLn ('Очень плохо...');

 

 

 

2:WriteLn ('Плохо...');

3:WriteLn ('Удовлетворительно...');

4:WriteLn ('Хорошо!');

5:WriteLn ('Отлично!')

end END.

Пример 4. По номеру месяца, определите пору года.

PROGRAM primer_4; var mes:byte;

BEGIN

writeln ('введите номер месяца '); readln (mes);

case mes of

1,2,12: writeln ('зима'); 3..5: writeln ('весна'); 6..8: writeln ('лето'); 9..11: writeln ('осень');

end; readln

END.

Пример 5. Создайте программу, которая определяет число дней в месяце, если даны: а. номер месяца N – целое число от 1 до 12;

б. целое число A, равное 1, если год високосный, и 0 в противном случае.

PROGRAM Primer_5; var n,a,k:word;

BEGIN

writeln (введите месяц'); readln(n);

case n of 1,3,5,7,8,10,12: k:=31; 4,6,9,11: k:=30;

2: begin

writeln ('если год високосный введите 1, иначе 0'); readln(a);

if a=1 then k:=29 else k:=28 end

else begin writeln ('такого месяца нет'); exit; end; end;

writeln (' в месяце ',k,' дней); readln

END.

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

PROGRAM primer_6;

var n, d1,d2,d3,d4,sum,ras:integer; BEGIN

writeln('введите целое положительное число из 4 цифр');

readln(n);

 

d1:=n div 1000;

(*Определение первой цифры числа*)

d2:=n div 100 mod 10;

(*Определение второй цифры числа*)

d3:=n div 10 mod 10; (*Определение третьей цифры числа*)

d4:=n mod 10;

(*Определение четвертой цифры числа*)

sum:=d1+d2;

(*Вычисление правильной суммы*)

ras:=abs(d1-d2);

(*Вычисление правильной разности*)

if (sum<>d3) and (ras=d4) then writeln ('Третья цифра понята неправильно')

else if (sum=d3) and (ras<>d4) then writeln ('Четвертая цифра понята неправильно')

else if (sum<>d3) and (ras<>d4) then writeln ('Одна из первых цифр понята неправильно ')

else writeln ('Все цифры поняты правильно');

readln END.

Задания

Вариант №1.

1. Вычислить значение выражения y = x 5 (Использовать полную форму оператора IF).

2.На трех бензоколонках имеется а, в, с литров бензина. На какую бензоколонку вести новую партию бензина? (Использовать сложное логическое выражение и неполную форму оператора IF).

3.Дано трехзначное целое число А. Ответить на вопрос, есть ли в записи этого числа цифра 5.

4.1 января 2006 года было в воскресенье. Вводится любая дата января месяца 2006 года. Определить на какой день недели эта дата приходится. (Использовать оператор

Case).

Вариант №2.

1. Вычислить значение выражения y = 7 x (Использовать полную форму оператора IF).

2.В трех магазинах один и тот же товар имеет разные цены: в первом магазине а руб., во втором - b руб., в третьем - с руб. Определить в каком магазине товар самый дешевый. (Использовать сложное логическое выражение и неполную форму оператора

IF).

3.Студент сдал четыре экзамена и получил соответственно а, b, с, d баллов по каждому из экзаменов. Ответить на вопрос, средний балл студента меньше 8 или нет.

4.31 декабря 2005 года было в субботу. Вводится любая дата декабря месяца 2005 года. Определить на какой день недели эта дата приходится. (Использовать оператор

Case).

Вариант №3.

1. Вычислить значение выражения у =

x2 4

(Использовать полную форму

x 6

оператора IF).

 

 

2.В трех магазинах один и тот же товар имеет разные цены: в первом магазине а руб., во втором - b руб., в третьем - с руб. Определить в каком магазине товар самый дорогой. (Использовать сложное логическое выражение и неполную форму оператора IF).

3.Дано четырехзначное целое число А. Ответить на вопрос, есть ли в записи этого числа цифра 0.

4.Вводится номер месяца. Дать этому месяцу наименование. (Использовать оператор Case).

Вариант №4.

1.Вычислить значение выражения y = x 9 (Использовать полную форму оператора IF).

2.Дан рост трех человек: первого - х см, второго - у см, третьего - z см. Определить самого высокого. (Использовать сложное логическое выражение и неполную форму оператора IF).

3.Дано трехзначное целое число А. Ответить на вопрос, есть ли в записи этого числа четные цифры.

4.Вводится номер месяца 2006 года. Определить сколько дней в этом месяце. (Использовать оператор Case).

Вариант №5.

1.Имеются два человека: у одного вес х пудов, у второго - у фунтов. Кто из них самый тяжелый. (Использовать полную форму оператора IF).

2.Дан рост трех человек: первого - х см, второго - у см, третьего - z см. Определить самого маленького. (Использовать сложное логическое выражение и неполную форму оператора IF).

3.Дано трехзначное целое число А. Ответить на вопрос, есть ли в записи этого числа нечетные цифры.

4.Вводится номер месяца. Определить время года, которому соответствует этот месяц. (Использовать оператор Case).

Вариант №6.

1.Известно, что 500 саженей = 3500 футов = 1066,8 м. С клавиатуры вводится х саженей, у футов. Какое из этих данных меньшее? (Использовать полную форму оператора

IF).

2.Дан вес трех человек: первого - х кг, второго - у кг, третьего - z кг. Определить самого легкого человека. (Использовать сложное логическое выражение и неполную форму оператора IF).

3.Дано четырехзначное целое число А Ответить на вопрос, превосходит или нет сумма цифр этого числа данное число Х.

4.Известно, что 2006 год - год Собаки. Вводится номер года от 2000 до 2023. Определить, какой это год по знаку Зодиака. (Использовать оператор Case). (Справка. Знаки Зодиака идут в следующем порядке: Крыса, Бык, Тигр, Кот, Дракон, Змея, Лошадь, Коза, Обезьяна, Петух, Собака, Свинья).

Вариант №7.

1.Вычислить значение выражения y = cos( x) . (Использовать полную форму

оператора IF).

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

3.Дано четырехзначное целое число А. Найти сумму нечетных цифр этого числа

исумму четных цифр. Ответить на вопрос, какая из найденных сумм больше.

4.Имеется N корзин количеством от 30 до 50. Дать этому количеству корзин правильное наименование. (Использовать оператор Case).

Вариант №8.

1.Даны координаты точки А(х1,у1). Определить, принадлежит ли эта точка 1 координатной четверти. (Использовать полную форму оператора IF).

2.Студент сдал четыре экзамена и получил соответственно a, b, c, d баллов по каждому из экзаменов. Какой предмет он сдал лучше других. (Использовать сложное логическое выражение и неполную форму оператора IF).

3.Дано трехзначное целое число А. Ответить на вопрос, равны ли первая и последняя цифра этого числа.

4.Имеется стадо из N слонов от 15 до 30 штук. Дать числу N правильное наименование от слова «слон». (Использовать оператор Case).

Вариант №9.

1.Даны координаты точки А(х1,у1). Определить, принадлежит ли эта точка какой-нибудь оси координат. (Использовать полную форму оператора IF).

2.В магазине имеется три вида товара: а, в, с. Определить, какого вида товара необходимо в магазин завести. (Использовать сложное логическое выражение и неполную форму оператора IF).

3.Дано трехзначное целое число А. Ответить на вопрос, равны ли последняя и средняя цифра этого числа.

4.В библиотеке одного человека имеется N книг от 20 до 50. Дать этому количеству книг правильное наименование от слова «книга». (Использовать оператор

Case).

Вариант №10.

1.Даны координаты точки А(х1,у1). Определить, принадлежит ли эта точка 2 координатной четверти. (Использовать полную форму оператора IF).

2.В магазине имеется три вида товара: а, в, с. Определить, какого вида товара больше всего в магазине. (Использовать сложное логическое выражение и неполную форму оператора IF).

3.Дано трехзначное целое число А. Ответить на вопрос, равны ли первая и средняя цифра этого числа.

4.1 марта 2006 года – это день недели среда. Вводится любая дата месяца март 2006 года. Определить день недели. (Использовать оператор Case).

Вариант №11.

1.Даны координаты точки А(х1,у1). Определить, принадлежит ли эта точка 3 координатной четверти. (Использовать полную форму оператора IF).

2.Студент сдал четыре экзамена и получил соответственно a, b, c, d баллов по каждому из экзаменов. Какой предмет он сдал хуже остальных? (Использовать сложное логическое выражение и неполную форму оператора IF).

3.Дано трехзначное целое число А. Ответить на вопрос, равны ли последняя и средняя цифра этого числа.

4.1 мая 2006 года – это день недели понедельник. Вводится любая дата месяца май. Определить день недели. (Использовать оператор Case).

Вариант №12.

1.Даны координаты точки А(х1,у1). Определить, принадлежит ли эта точка какой-нибудь оси координат. (Использовать полную форму оператора IF).

2.Студент сдал четыре экзамена и получил соответственно a, b, c, d баллов по каждому из экзаменов. Какой предмет он сдал лучше остальных? (Использовать сложное логическое выражение и неполную форму оператора IF).

3.Дано четырехзначное целое число А. Ответить на вопрос, равны ли последняя и вторая цифра этого числа.

4.Имеется N парт количеством от 1 до 30. Дать этому количеству парт правильное наименование. (Использовать оператор Case).

Контрольные вопросы

1.Перечислите операторы условного перехода.

2.Синтаксис оператора IF.

3.Как работает оператор IF (полная форма)?

4.Краткая форма оператора IF.

5.Как работает оператор IF (краткая форма)?

6.Сколько допускается уровней вложенности условных операторов?

7.В каком случае применяется оператор выбора Case?

8.Код программы выглядит следующим образом:

Case P of

a:S1;

b:S2;

n: Sn

else Sn+1 end;

поясните:

Case («случай») - . . .; P - . . .;

a, b, - . . .;

S1, S2, Sn, Sn+1- . . ..

9.Синтаксис оператора выбора.

10.Как работает оператор выбора?

11.Какому типу данных должен принадлежать селектор?

12.Что может использоваться в вариантах оператора выбора?

13.Какая ветвь в операторе Case может отсутствовать?

14.Какому оператору передается управления после окончания работы условных операторов?

15.Что представляет собой составной оператор.

16.Что такое операторные скобки?

17.В каком случае используется составной оператор?

18.Объясните в чем разница между операторами слева и справа. Каково будет итоговое значение переменной Х для каждого из них, если начальное значение этой переменной

равно 1?

 

If X>=1 then X:=X+1

If X>=1 then X:=X+1;

Else if X>=0 then X:=X+2;

if X>=0 then X:=X+2;

19.Перечислите операции отношения.

20.Перечислите логические операции.

21.Каковы результаты применения логических операций:

а. TRUE and TRUE = . . .? б. TRUE and FALSE = . . .? в. FALSE and TRUE = . . .? г. FALSE and FALSE = . . .? д. TRUE or TRUE = . . .?

е. TRUE or FALSE = . . .? ж. FALSE or TRUE = . . .? з. FALSE or FALSE = . . .? и. not TRUE = . . .?

к. not FALSE = . . .?