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

3_Метод_Часть_2_Разветвл_алгоритм

.pdf
Скачиваний:
42
Добавлен:
28.03.2015
Размер:
1.29 Mб
Скачать

Федеральное агентство по образованию

Государственное образовательное учреждение высшего профессионального образования

Казанский государственный технологический университет Нижнекамский химико–технологический институт

АЛГОРИТМИЧЕСКИЙ ЯЗЫК QBASIC

ЧАСТЬ II

РАЗВЕТВЛЯЮЩИЕСЯ АЛГОРИТМЫ

Методические указания для самостоятельной работы студентов

КАЗАНЬ 2006

Составители: ст. преп. Т.А. Хрузина ст. преп. В.А. Садыкова

Алгоритмический язык QBasic. Часть II. Разветвляющиеся алгоритмы: Метод. указания для самостоятельной работы студентов / Казан. гос. технол. ун-т; Сост.: Т.А. Хрузина, В.А. Садыкова. Казань, 2006. 64 с.

Дано краткое изложение основных теоретических положений языка QBASIC по разветвляющимся алгоритмам, операторам организации ветвления. Предлагается список задач, которые могут быть использованы в при организации контрольных и самостоятельных работ, РГР, зачетах, экзаменах.

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

Подготовлены на кафедре математики и информатики Нижнекамского химико–технологического института Казанского государственного технологического университета.

Печатаются по решению методической комиссии по циклу дисциплин общего математического и естественнонаучного профиля Нижнекамского химико–технологического института Казанского государственного технологического университета.

Рецензенты: к. . н., доц. к. . н., доц.

2

С помощью операторов присваивания можно организовать весьма сложные последовательности вычислений и немного упрощать их. Однако не удастся обойтись одними операторами присваивания, когда требуется программно реализовать логически «запутанную» последовательность действий, например: если с клавиатуры введено положительное число, то необходимо вычислить квадратный корень из этого числа, а если введено отрицательное число, его необходимо возвести в квадрат. Но каким-то образом управлять теми или иными последовательностями действий в программе всѐ-таки надо, и именно для этого предназначены условные операторы. Рассмотрим некоторые основные понятия, связанные с разветвляющимися алгоритмами.

1. Разветвляющийся алгоритм

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

При этом форма разветвления может быть как полная (рис.1), так и сокращенная (рис.2), а также множественного выбора (рис.3)

 

 

 

Полная форма

 

 

 

 

Сокращенная форма

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Условие

 

 

 

 

 

 

 

Условие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Действие 1

 

 

 

 

Действие 2

 

 

 

 

 

Действие

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис. 1 Рис. 2

3

Множественный выбор

Выбор

 

 

 

 

... ... ...

 

 

Действие 1

 

Действие 2

 

 

Действие N

 

 

 

 

 

 

 

Рис. 3

2. Операторы для организации ветвления

ОПЕРАТОРЫ СРАВНЕНИЯ

Чтобы в какой-то момент изменить порядок выполнения операторов программы надо, прежде всего, проверить истинно ли некоторое условие, и на основе этой проверки определить, как будет выполняться программа дальше. Это условие представляет собой некоторое логическое выражение и вычисляется способом, аналогичным вычислению арифметического выражения. Вместо арифметических операторов сложения, вычитания и других применяются логические операторы сравнения, которые служат для сравнения числовых и строковых величин. В QBASIC существует шесть операций отношения:

=

Равно

< > Неравно

>

Больше

<=

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

<

Меньше

>=

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

ЛОГИЧЕСКИЕ ОПЕРАТОРЫ

Логическое выражение может быть намного сложнее, чем простое сравнение двух величин. Часто возникает необходимость проверить, например, не выходит ли некоторое число из допустимого диа-

4

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

Чтобы связать эти два условия проверки логической связкой И или ИЛИ, используются соответствующие операторы AND и OR. Например, необходимо проверить принадлежит ли число Х% диапазону [0,10]. Для этого в программе используется следующее выражение:

X%>0 AND X%<10.

ЗНАЧЕНИЕ ЛОГИЧЕСКОГО ВЫРАЖЕНИЯ

В Qbasic любое логическое выражение имеет числовое значение. Если его выражение истинно, то его значением будет единица, если же оно ложно, то его значением будет ноль. Относительно выше рассмотренного примера: если перед проверкой выражения X%>0 AND X%<10 число X% принимало значение –3, то результатом проверки будет ноль.

Операторы OR и AND обрабатывают результаты вычислений логических выражений. Они работают со значениями «истинна» (не ноль) и «ложь» (ноль). Полный список логических операторов и возвращаемых ими значений приведен в таблице на рис. 4.

x

y

x AND y

x OR y

x XOR y

x EQV y

x IMP y

 

 

 

 

 

 

 

0

0

0

0

0

1

1

 

 

 

 

 

 

 

0

1

0

1

1

0

1

 

 

 

 

 

 

 

1

0

0

1

1

1

0

 

 

 

 

 

 

 

1

1

1

1

0

1

1

 

 

 

 

 

 

 

Рис. 4

ПРИОРИТЕТЫ ЛОГИЧЕСКИХ ОПЕРАТОРОВ

Логические операторы, точно также как и арифметические, имеют приоритеты, определяющие, в каком порядке будет вычисляться выражение. Наивысший приоритет имеют все операции сравнения (они всегда выполняются первыми), потом следует оператор NOT, остальные операторы идут по убыванию приоритетов так: AND (логическое умножение), OR (логическое сложение), XOR (исключающее ИЛИ), EQV (эквивалентность), IMP (импликация).

5

УСЛОВНЫЕ ОПЕРАТОРЫ

Часто при составлении алгоритма решения задачи приходится проводить анализ выполнения тех или иных условий. Как правило, от выполнения таких условий зависит дальнейший ход решения задачи. Для изменения естественного порядка выполнения программы при выполнении некоторого условия используется оператор условного перехода. Условные операторы Qbasic помогают осуществить "ветвление" программы, т. е. передать управление по условию на ту или иную "ветку". Существует несколько условных операторов, рассмотрим их.

Оператор IF … THEN … ELSE

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

Линейная форма оператора IF … THEN … ELSE

IF логическое выражение THEN операторы1 [ELSE операторы2]

Работает данный оператор следующим образом: если (IF) логическое выражение «истинно», то (THEN) далее будут выполняться операторы1, если же логическое выражение «ложно», т.е. в противном случае (ELSE), то будут выполняться операторы2.Обратите внимание на то, что ветка ELSE взята в квадратные скобки, это означает, что этой ветки вообще может и не быть (проведите соответствие с различными структурами ветвления: полная и сокращенная).

В данной записи оператора конструкции операторы1, операторы2 означают один или несколько операторов, разделенных двоеточием.

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

6

Предположим, что даны переменные а и b и необходимо вы-

числить значения функций y

a 2b

при условии,что ab 0 и

a2 b2

 

 

 

 

y

ab при условии,что ab 0 для любых значений переменных a и

b. Условия таких задач обычно записывают в другом виде:

Пример 1. Вычислите значение функции

a 2b

если ab 0

y a2 b2

ab , если ab 0

Алгоритм решения задачи:

 

 

 

 

Начало

 

 

 

 

a, b

 

 

 

Нет

ab<0

Да

 

 

 

 

y

ab

 

y

a 2b

 

 

a2 b2

 

 

 

 

y

Конец

Программа:

CLS

INPUT a, b

IF a*b<0 THEN y=(a-2*b)/(a^2+b^2) ELSE y=SQR(a*b) PRINT y

END

7

Часто в программе бывает необходимо обойти особую точку, когда решение отсутствует.

Пример 2.

Вычислите значение квадратного корня из числа х.

Казалось бы, что для этой решения этой задачи можно составить линейную программу:

CLS

INPUT "Введите любое число"; X

? "Корень квадратный из Х="; SQR(X)

END

Предположим, что мы запустили эту программу на выполнение. Вводим число 4. Ответ 2. Вводим 121. Ответ 11. Вводим число -9. Аварийное прерывание программы и сообщение об ошибке "Неверный вызов функции". Что такое? А все потому, что корень квадратный вычисляется только из положительного числа. Вот программа и "ругается". Поэтому необходимо добавить условный оператор, и будет она работать для любых чисел.

CLS

INPUT "Введите любое число";X

IF Х>=0 THEN ?"Ответ:"; SQR (X) ELSE ?"Корень квадрат-

ный из отрицательного числа не существует!"

END

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

Приведем решение ещѐ нескольких задач с использованием условного оператора.

8

Пример 3. Даны действительные числа x, y, z.

Найти max x y z, x y z .

Алгоритм решения задачи:

 

 

 

Начало

 

 

 

 

 

 

x, y, z

 

 

 

 

 

 

 

 

 

 

 

 

 

a=x+y+x

 

 

 

 

 

 

b=xyz

 

 

 

 

 

 

 

 

Да

 

Нет

a>b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

max b

 

 

max a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

max

Конец

Программа:

CLS

'Вводим значения чисел x, y, z

INPUT "x="; x

INPUT "y="; y

INPUT "z="; z

'Вводим дополнительные переменные a и b a = x + y + z

b = x * y * z

'Проверяем: что больше a=x+y+z или b=x*y*z

IF a>b THEN max=a ELSE max=b

'Выводим наибольшее значение на экран

PRINT "max=";max END

9

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

Утверждение 1.

Пусть дан график функции y=f(x) на некотором промежутке [а,b], тогда все точки, находящиеся ниже данной кривой удовлетворяют неравенству y<f(x) (рис.5 ).

 

y

 

 

 

y

 

 

 

 

 

 

 

 

 

y=f(x)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y>f(x)

 

 

 

0

 

 

 

0

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

 

 

x

 

 

y<f(x)

 

 

 

 

y=f(x)

 

Рис.5

 

 

Рис.6

 

 

 

 

y

 

 

 

y

(x a)

2

( y

b)

2

R

2

 

 

 

 

 

 

 

b

(x a)2

( y b)2

R2

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

0

 

 

a

 

 

 

 

 

a

 

 

 

 

 

 

 

x

 

 

x

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Рис.7

 

 

Рис.8

 

 

 

 

Утверждение 2.

Пусть дан график функции y=f(x) на некотором промежутке [а,b], тогда все точки, находящиеся выше данной кривой удовлетворяют неравенству y>f(x) (рис.6).

Утверждение 3.

Пусть дана окружность с центром в точке (a, b) и радиусом R, тогда все точки, находящиеся внутри данной окружности удовлетво-

ряют неравенству (x a)2 ( y b)2 R2 (рис.7).

Утверждение 4.

Пусть дана окружность с центром в точке (a, b) и радиусом R, тогда все точки, находящиеся вне данной окружности удовлетворяют

неравенству (x a)2 ( y b)2 R2 (рис.8).

10