Разработка и отладка приложений с ветвлением




Практическая работа

Цель работы: научиться решать задачи на разветвляющиеся алгоритмы; научиться использовать в программах условный оператор if и оператор выбора case.

Ход работы:

Операторы выбора

В языке Паскаль алгоритмическая базовая конструкция выбора может быть реализована с помощью двух структурных операторов – IF (выбор из двух вариантов) и CASE (выбор из множества вариантов), называемых операторами выбора. С их помощью можно выбрать для выполнения один из составных операторов (или ни одного оператора).

Оператор ветвления IF

Оператор IF можно представить в общей форме записи как

IF <Условие> THEN <Оператор 1> ELSE <Оператор 2>,

где конструкция «Условие» есть логическое выражение, которое принимает два значения типа BOOLEAN: TRUE, FALSE (истинно или ложно).

Само логическое выражение складывается из операций сравнения: >, >=, <, <=, =, <>. Результат сравнения может быть TRUE или FALSE.

Логические выражения могут формироваться также и с помощью трех логических операций: NOT, AND, OR. Приоритеты всех используемых в Паскале операций таковы:

Высший: ()

NOT *, /, DIV, MOD

AND

OR +, -

Низший: >, =, <, >=, <>, <=

В качестве условия может быть использована и логическая переменная, например:

I and J or K ---> (I and J) or K;

not X and Y ---> (not X) and Y, где I, J, K, X, Y – переменные типа BOOLEAN;

(A < B) or (B = 0), где A, B – переменные простого типа.

В операторе IF всегда за словами THEN и ELSE должен следовать один оператор. Этим оператором может быть не только оператор присваивания, но и любой другой. Если хотя бы один из них является снова оператором IF, то полученную конструкцию называют вложением.

П р и м е р:

IF <условие1> THEN <ветвь 1>

ELSE IF <условие2>THEN <ветвь 2>

ELSE <ветвь 3>;

Такое вложение используется для уменьшения числа необходимых проверок. Этот метод часто обеспечивает большую эффективность, чем составное условие, однако одновременно он уменьшает надежность программы. Не рекомендуется использовать более двух-трех уровней вложения IF. Вложения могут идти и после слова THEN.

Первый способ предпочтительнее, чем второй, так как конструкция THEN-IF менее удобна, чем ELSE-IF. С помощью конструкции ELSE-IF чаще всего осуществляется выбор одного из нескольких альтернативных вариантов. Заметим, однако, что иногда такое вложение можно заменить на последовательность операторов короткой формы IF-THEN. Это видно на следующем примере:

program QUARD;

var A, B, C: real; D: real;

begin

read (A, B, C); D:= sqr (B) – 4 * A - C;

1-й вариант 2-й вариант
if D < 0 then write ('Не имеет корней'); if D < 0 then write ('Нет корней') else if D = 0 then write ('Один корень')
if D = 0 then write ('Один корень'); if D > 0 then write ('Два корня'); else write ('Два корня');

end.

Рис. Пример программы двух разных вложений

 

Однако в данном примере 2-й вариант более эффективен, так как имеет на одно сравнение меньше, и в случае D < 0 сразу же дает ответ, не делая последующих проверок.

В Паскале существует специальный оператор, позволяющий сделать выбор из нескольких альтернатив – множественное ветвление, или оператор варианта.

 

Оператор варианта CASE

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

 

Общая форма записи

CASE <выражение> OF

константы: оператор;

....................

константы: оператор

ELSE <оператор>

END;

Выражение, стоящее между CASE и OF, называется селектором. Константы (значения выражения), предшествующие двоеточию, называются метками случаев. Порядок работы оператора: сначала вычисляется значение селектора, затем выполняется оператор, одна из меток которого совпадает со значением селектора. Все остальные операторы не выполняются, и управление передается следующему после END оператору. В случае короткой формы оператора CASE при несовпадении значения селектора (ключа) ни с одной из констант из списка никакой оператор не подлежит исполнению. Если же в операторе есть строка ELSE, то при несовпадении значения селектора ни с одной константой выполняется оператор, следующий за ELSE.

Выражение «селектор» может относиться к любому скалярному типу, кроме REAL. Метки случаев должны принадлежать тому же типу, что и селектор. Нежелательно, чтобы одна и та же метка появлялась более одного раза в операторе CASE. Если же это произойдет (компилятор не проверяет повторяемость меток), то выполнится тот оператор, который соответствует первому вхождению метки в список констант.

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

П р и м е р 1. Печать названия десятичных цифр.

program DICITS;

var DIGIT: integer;

begin

writeln ('Введите цифру');

readln (DIGIT);

case DIGIT of

0: writeln ('нуль');

1: writeln ('один');

..................

9: writeln ('девять');

else writeln ('это не цифра');

end;

end.

Пример 2. Печать номера квартала года.

program NUMKVART;

var MESIATZ: 1..12;

begin

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

read (MESIATZ);

case MESIATZ of

1, 2, 3: writeln ('Первый квартал');

4, 5, 6: writeln ('Второй квартал');

7, 8, 9: writeln ('Третий квартал');

10, 11, 12: writeln ('Четвертый квартал');

end;

end.

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

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

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

Пример. Дано действительное x. Для функции f, график которой представлен на рисунке, вычислить f(x).

Решение задачи.

Математическая модель: функция вычисляется по следующей формуле:

Составим схему алгоритма, детализировав все блоки (рис. 2).

Дальнейшая детализация не требуется. Переводим алгоритм на язык Паскаль.

Program example1;

var x, f:Real;

begin

Write('Введите x: '); Readln(x);

if x<-1 then f:= - x-1 else

if (x>=-1) and (x<0) then f:= x-1 else

if (x>=0) and (x<1) then f:= - x+1 else f:= x+1;

Writeln('F= ',f:6:2);

Readln;

end.

Рис. 3. Блок-схема ветвления в 4-х направлениях

Варианты заданий

Задание 1. Используя оператор if, вычислить заданное выражение для данных типа Integer:

а) b)

c) d)

Задание 2. Найти алгоритм решения задачи и реализовать его с помощью оператора (операторов) if-then-else:

a) Составить программу, реализующую эпизод сказки: машина спрашивает, куда пойдет герой, и в зависимости от ответа (налево – (-1), прямо – 0, направо – 1), печатает, что произойдет с героем.

b) Определить, имеется ли среди чисел A, B, C хотя бы одно четное.

c) В зависимости от введенного признака вычислить длину окружности при k = 1 (L = 2πR); площадь круга k = 2 (L = πR2); объем шара k = 2 (L = 4πR3 /3). Радиус один и тот же, задается пользователем.

d) Радиус окружности, вписанной в равносторонний треугольник, равен R. Составить программу для вычисления стороны (признак N = 1), высоты (признак N = 2) или площади треугольника (признак N = 3).

Задание 3. Используя оператор выбора, составить программы решения следующих задач.

a) Ввести два целых числа Х и У. Составить программу-меню для операций (MULT, DIVIDE, PLUS, MINUS) и выполнить в зависимости от этого соответствующую операцию над числами Х и У, например: для значения Х = 10, значения Y = 5 операции DIVIDE получим результат выполнения операции деления, равный 2.

b) По номеру месяца указать, к какому времени года он относится.

c) Самолет летит из пункта А в пункт В со средней скоростью V. Составить программу нахождения времени в полете t, если возможны три варианта:

1. дует встречный ветер (К = 1);

2. ветра нет (К = 2);

3. дует попутный ветер (К = 3).

d) Единицы массы пронумерованы следующим образом: 1 — килограмм, 2 — миллиграмм, 3 — грамм, 4 — тонна. Дан номер единицы массы N и масса тела M в этих единицах (M - вещественное число). Вывести массу данного тела в килограммах.

Варианты заданий

1. 1а,2а,3а

2. 1b,2b,3b

3. 1c,2c,3c

4. 1d, 2d, 3d

5. 1a,2b,3c

6. 1d,2a,3b

7. 1b,2c,3d

8. 1c,2d,3d

9. 1d,2c,3d

10. 1b,2d,3a

11. 1c,2a,3a

12. 1b,2c,3c

13. 1a, 2d,3c

14. 1c,2a,3d

15. 1b,2a,3c

 

Содержание отчета

1. Постановка задачи.

2. Описание алгоритма.

3. Тестовые примеры и анализ результатов тестирования.

4. Вывод.

 

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

1. Какие операторы используются для программирования ветвлений?

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

3. Какую из функций: Sin(x), Abs(x), Trunc(x) можно заменить условным оператором if x<0 then x:= - x?

4. Если выбор вариантов осуществляется из конечного числа элементов выбора, то лучше взять для этого оператор if или case?

5. Как заменить оператор case операторами if?

6. В чем отличие оператора case от оператора if?

7. Какой тип переменной можно использовать в качестве ключа оператора case?



Поделиться:




Поиск по сайту

©2015-2024 poisk-ru.ru
Все права принадлежать их авторам. Данный сайт не претендует на авторства, а предоставляет бесплатное использование.
Дата создания страницы: 2020-06-05 Нарушение авторских прав и Нарушение персональных данных


Поиск по сайту: