Алгоритмы и программы с разветвлением 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Алгоритмы и программы с разветвлением



 

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

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

При решении задач нередко возникает ситуация, когда действие осуществляется в зависимости от некоторого условия. Для программирования проверки условия выбора действия в зависимости от этого условия используются условные операторы. В качестве условий выбора используется значение логического выражения (BOOLEAN) операторов: IF и CASE.

Форма условного оператора IF:

 

IF <условие> THEN <оператор(ы)>

ELSE <оператор(ы)>;

 

Сокращенная форма условного оператора IF:

 

IF <условие> THEN <оператор(ы)>;

 

Оператор условия IF выполняется следующим образом. Если значение выражения, записанного в условии, равно TRUE (истинно), то выполняется оператор или группа операторов, следующих за словом THEN, иначе, т.е. значение выражения, записанного в условии равно FALSE (ложно), выполняется оператор или группа операторов, следующих за словом ЕLSE.

При истинности логического условия в сокращенной форме условного оператора выполняется оператор или группа операторов, следующих за словом THEN, иначе управление программой передается оператору, следующему за условным оператором IF.

Пример фрагмента программы с оператором условия IF:

READ (A, B, C);

IF (А>0) AND (В>0) AND (С>0) AND (А+В+С=180)

THEN WRITE (А, ‘, ', В, ‘, ‘, С, ‘ являются углами треугольника ‘)

ELSE WRITE (A, ‘, ’, B, ‘, ‘, C, ‘ не являются углами треугольника ‘);

В данном примере с клавиатуры считываются значения А, В, С. Затем проверяется условие. Если оно выполняется, то выводится сообщение о том, что значения А, В, С являются углами треугольника, иначе - что значения А, В, С не являются углами треугольника.

 

Если после выполнения условия необходимо выполнить не один оператор, а несколько, в этом случае используются операторные скобки BEGIN и END. В Паскале любая последовательность операторов, находящаяся между словами BEGIN и END, считается одним оператором, называемым составным оператором. При этом для каждой открывающей скобки (слово BEGIN) должна быть закрывающая (слово END). Например, вводятся значения двух переменных целого типа Х и У. Если значения обеих переменных больше 0, то переменной Х присваивается значение квадратного корня из Х, а переменной У – значение квадратного корня из У, иначе оба числа остаются прежними.

 

READLN (X, У);

IF (Х> 0) AND (У>0)

TNEN

BEGIN Х: = SQRT (X);

У: = SQRT (У);

END;

WRITE (‘ Х= ‘, Х:2:2,’, У= ‘, У:2:2);

 

В данном примере часть ELSE отсутствует т.е., если условие не выполняется, то значения переменных Х и У остаются прежними.

Обратите внимание на то, как выглядит логическое условие. Наличие скобок обусловлено тем, что операции отношения имеют приоритет ниже, чем логическая операция AND, но должны быть выполнены раньше ее. Поэтому выражения Х> 0 и У> 0 находятся в круглых скобках.

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

Например, во фрагменте:

 

IF Х>0 THEN

BEGIN IF У>0

THEN У: = SQRT (У);

END

ELSE У: = У+Х;

 

часть ELSE относится к первому оператору IF.

 

Рассмотрим более сложный случай использования условного оператора – случай, когда возможных вариантов действий больше двух, тогда можно воспользоваться несколькими операторами IF. Например, пусть программа определяет животное, соответствующее введенному пользователем году по китайскому гороскопу.

 

VAR YEAR, NUM: INTEGER;

BEGIN

READ (YEAR);

NUM: = YEAR MOD 12;

IF NUM = 0

THEN WRITE (‘ Обезьяна ‘);

IF NUM = 1

THEN WRITE (' Петух ‘);

IF NUM = 2

THEN WRITE ('Собака ‘);

IF NUM = 3

THEN WRITE (' Кабан ‘);

IF NUM = 4

THEN WRITE (‘ Крыса’);

IF NUM = 5

THEN WRITE (' Бык');

IF NUM = 6

THEN WRITE (' Тигр ‘);

IF NUM = 7

THEN WRITE (' Кролик’);

IF NUM = 8

THEN WRITE ('Дракон’);

IF NUM = 9

THEN WRITE (' Змея’);

IF NUM = 10

THEN WRITE ('Лошадь’);

IF NUM = 11

THEN WRITE ('Овца ');

END.

 

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

 

Общий вид оператора выбора:

 

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

<параметр 1>: <оператор 1>;

<параметр 2>: <оператор 2>;

.

.

<параметр N >: <оператор N>;

ELSE <оператор N + 1>

END;

 

Если при выборе альтернативы необходимо выполнение нескольких операторов, то нужно заключить их в функциональные скобки, т.е. использовать составной оператор. Конструкция ELSE необязательна и может быть опущена.

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

 

Тип параметров должен совпадать с типом выражения.

 

С помощью оператора CASE можно следующим образом переписать серию условных операторов IF из приведенной выше программы:

 

CASE NUM OF

0: WRITE ('Обезьяна’);

1: WRITE ('Петух');

2: WRITE ('Собака’);

3: WRITE ('Кабан');

4: WRITE ('Крыса’);

5: WRITE ('Бык');

6: WRITE ('Тигр’);

7: WRITE ('Кролик’);

8: WRITE ('Дракон');

9: WRITE ('Змея’);

10: WRITE ('Лошадь’);

11: WRITE ('Овца);

END;

 

 

Передача управления

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

Общий вид оператора:

 

GOTO <метка>;

 

Место передачи управления обозначается меткой и двоеточием после нее. Все метки должны быть описаны в разделе объявления меток LABEL. Передачу управления можно осуществить как вверх, так и вниз программы. Следует помнить, что это действие можно выполнять только для выхода из внутреннего блока во внешний или внутри блока. Ни в коем случае нельзя переходить внутрь цикла или процедуры. Если в строке стоит только одна метка и двоеточие, то такой оператор называется пустой.

По поводу оператора перехода всегда велись споры – корректно его использовать или нет. Практически все специалисты соглашаются с тем, что использовать операторы перехода не следует, тем более что можно вполне обходиться и без него. Мы рассмотрели его лишь потому, что он является неотъемлемым элементом языка Паскаль.

В современных версиях Паскаля для передачи управления чаще используются стандартные процедуры EXIT, HALT и, начиная с версии 7.0, процедуры BREAK и CONTINUE.

Процедура EXIT осуществляет выход из блока (цикла или подпрограммы). При использовании ее в основной программе вне цикла она осуществляет выход в операционную систему.

Процедура HALT выполняет выход в операционную систему.

Процедура BREAK осуществляет выход из цикла. Процедура CONTINUE осуществляет переход к следующей интеграции цикла, даже если процедура еще не завершена.

Процедуры BREAK и CONTINUE можно применять только внутри циклов.

 

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

1. Наибольшее из 3-х различных значений переменных вещественного типа Х, У, Z уменьшить на 0.3.

2. Вычислить:

3. 3.Вычислить:

D = max (A+С, B2, C+В);

4. Вычислить:

5. Вычислить:

6. Вычислить:

 

7. Вычислить:

8. Даны 3 целых числа. Найти среднее из них. Средним назовем число, которое больше наименьшего из данных чисел, но меньше наибольшего.

9. Вычислить значение переменной d=a+в, если а – нечетное, и d=a×в, если а –четное, где а и в целые числа.

10. Найти произведение двух наибольших из трех введенных с клавиатуры чисел.

11. Вычислить:

К = МАХ (а+в, в·с, в2)

12.Вычислить значение с=а+в, если а – четное и с=а*в, если а – нечетное.

13.Даны Х # У. Меньшее из этих двух чисел заменить их полусуммой, а большее – их удвоенным произведением.

14.Если целое число М делится нацело на целое число N, то вывести частное от деления, иначе вывести сообщение «М на N не делится».

15.Найти:

16. Найти:

17. Даны целые числа А, В, С. Если А ≤ В ≤ С, то все числа заменить их квадратами, если А > В > С, то каждое число заменить наибольшим из них, в противном случае сменить знак каждого числа.

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

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

20. Составьте программу вычисления выражения:

МАХ (Х+У+Z, X·Y·Z)+3

21. Составьте программу вычисления выражения:

MIN (X2 +Y2, Y2 + Z2, X2+Z2) – 4

22. Составьте программу вычисления выражения:

MAX (X·Y, Y·Z, X·Z) +20

23. Составьте программу вычисления выражения:

MIN (X2, Y·Z, Z2) ·15

24. Составьте программу вычисления выражения:

MAX (X·Z-Y, Z·Y-X, X·Y-Z) + 10

25. Составьте программу вычисления выражения:

MIN (X·Z·Y, Y2, Z2) ·X·Z·Y

26.Составьте программу, заменяющую большее из двух данных чисел модулем суммы, а меньшее – модулем полуразности этих чисел.

27. Составьте программу, заменяющую большее из двух данных чисел модулем произведения, а меньшее – модулем разности этих чисел.

28. Составьте программу, заменяющую большее из двух данных чисел удвоенным произведением, а меньшее – модулем полусуммы этих чисел.

29.Составьте программу расположения трех чисел в порядке убывания.

30. Составьте программу расположения трех чисел в порядке возрастания.

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

1. Титульный лист.

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

3. Краткие теоретические сведения.

4. Программный код с комментариями.

5. Результаты работы программы в виде скриншота.

6. Выводы.

 

 

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



Поделиться:


Последнее изменение этой страницы: 2017-02-09; просмотров: 203; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.134.104.173 (0.047 с.)