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

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

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

Пример 4. Даны действительные x, y. Определить, принадлежит ли точка с координатами х, y заштрихованной области, изображенной на рисунке 9 .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Так

как

заштрихованная область

 

 

 

у

 

 

 

 

 

 

 

 

 

 

 

находится

 

 

внутри

окружности

 

 

 

 

x2 y 1 2 1

 

 

x2 ( y 1)2

1,

а

также

ниже графика

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

функции

y 1 x2 ,

то все точки данной

 

 

 

 

 

 

 

x

 

области

удовлетворяют

одновременно

 

 

 

 

 

 

 

 

 

 

 

x2 ( y 1)2 1

 

 

 

 

 

0

 

 

 

 

 

двум

условиям:

и

 

 

 

 

 

y 1 x2

 

 

y 1 x2 .

Обратите внимание во втором

 

 

 

Рис.9

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

условии записано нестрогое неравенство,

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

т. к. точки самого графика

y 1 x2 также принадлежат заштрихован-

ной области.

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

Начало

x, y

Нет

x2+(y-1)2<=1

Да

 

и y<=1-x2

 

Не принадлежит

 

Принадлежит

 

Конец

 

Если для выполнения тех или иных действий нужно одновременное выполнение двух и более условий, то они объединяются логической связкой AND (И). Таким образом, условие данной задачи мож-

но записать так: x^2+(y-1)^2<=1 AND y<=1-x^2

Программа

CLS

INPUT x, y

IF x^2+(y-1)^2<=1 AND y<=1-x^2 THEN ? “Да” ELSE ? “Нет” END

11

УПРАЖНЕНИЯ №1

1.Даны действительные числа x, y. Получить max (x, y).

2.Даны числа a, b, c. Найти сумму этих чисел, если а b c и их произведение, если это не так.

3.Дано действительное число a. Вычислить f(a), если

x 2

4x 5,

при x 2 ;

 

 

 

f x

1

 

,в противоположном случае.

x5

4.Определить, принадлежит ли точка с координатами х0,y0 заштрихованной области:2x 4

а)

y

 

б)

y

 

 

 

1

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

0,5

 

 

 

 

 

– 1

0,5

0,5

1

 

 

 

 

 

0

3

x

 

 

x

 

 

 

 

– 0,5

 

 

 

 

 

 

– 1

 

 

5.Определить, является ли данное целое число чѐтным. Примечание. Дать проверку на четность тремя способами:

1)а / 2 – a \ 2 = 0;

2)а MOD 2 = 0;

3)INT (а / 2) = а \ 2 .

6.Определить является ли треугольник со сторонами a, b, c равносторонним.

12

БЛОЧНАЯ ФОРМА ОПЕРАТОРА IF … THEN … ELSE

Часто возникает необходимость в выполнении целой группы действий как в случае, если значение логического выражения — «истина», так и в случае, когда его значение — «ложь». Однако размещать несколько операторов в одной строке не рекомендуется: это значительно затрудняет зрительное восприятие текста программы и ее сложно понять. В таких случаях желательно использовать блочную форму условного оператора IF … THEN … ELSE.

IF {логическое выражение} THEN

последовательность операторов, которая выполняется в том случае, если логическое выражение принимает значение «истинна»

ELSE

последовательность операторов, которая выполняется в том случае, если логическое выражение принимает значение «ложь»

ENDIF

Пример 5. Проверьте, сколько решений имеет данная система:

a1x b1 y c1a2 x b2 y c2

Если она имеет единственное решение, то решите еѐ методом Крамера.

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

При решении данной системы возможны два случая.

1. Определитель системы 0 . Тогда система имеет единственное решение, которое находится по формулам Крамера:

 

 

 

 

x

 

 

y

 

 

 

 

a

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

,

y

 

 

, где

 

1

 

1

a

b

a

2

b

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

a2

b2

1

2

 

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

b1

 

 

 

 

 

a1

c1

 

 

 

 

 

 

 

x

 

с1

с b с

2

b

y

 

 

a c

2

a

2

c

 

 

 

с2

b2

 

1 2

1

 

 

a2

c2

 

 

1

 

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

13

2. Если определитель системы 0 , то возможны два подслу-

чая:

 

 

 

 

 

 

 

 

 

a) если оба определителя x и y равны нулю, система имеет бесчис-

ленное множество решений;

 

 

 

 

 

 

 

 

b) если хотя бы один из определителей x или y не равен нулю, то

система вообще не имеет решений.

 

 

 

 

 

 

 

 

 

 

Начало

 

 

 

 

 

 

 

 

a1 , b1 , c1 ,

 

 

 

 

 

 

 

 

a2 , b2 , c2

 

 

 

 

 

 

 

 

a1 b2 a2 b1

 

 

 

 

 

 

 

 

x c1 b2 c2 b1

 

 

 

 

 

 

 

 

y a1 c2 a2 c1

 

 

 

 

 

 

 

Нет

 

0

Да

 

 

 

 

 

 

 

 

 

 

 

Нет

x 0 и y 0

 

Да

x

x

, y

 

y

 

 

 

 

 

 

 

 

 

 

 

 

 

Не имеет

 

Множество

Единственное

 

решений

 

решений

 

решение

 

 

x, y

Конец

14

Введем обозначения:

a1 a1

b1 b1

c1 c1

a2 a2

b2 b2

c2 c2

det

x detx

y dety

ПРОГРАММА

CLS

'Вводим значения коэффициентов построчно

INPUT “a1, b1, c1=”;a1, b1, c1 INPUT “a2, b2, c2=”;a2, b2, c2

'Вычисляем определители , x , y .

det=a1*b2-a2*b1 detx=c1*b2-c2*b1 dety=a1*c2-a2*c1

IF det<>0 THEN x=detx/det: y=dety/det

PRINT “Единственнон решение:”

PRINT “x=”;x, “y=”;y

ELSE

IF detx=0 AND dety=0 THEN

PRINT “Множество решений”

ELSE

PRINT “Нет решений”

ENDIF

ENDIF

END

Ветку ELSE первого оператора IF можно было оформить по другому. Попробуйте сделать это самостоятельно, предварительно изучив ещѐ одну форму записи оператора IF, т. е. блочную расширенную форму, рассмотренную ниже.

15

БЛОЧНАЯ РАСШИРЕННАЯ ФОРМА ОПЕРАТОРА IF…THEN…ELSE

Если необходимо осуществить проверку более сложных условий, чем ДА/НЕТ можно использовать либо блочную расширенную форму оператора IF … THEN … ELSE, либо оператор SELECT…

END SELECT.

IF {логическое выражение-1} THEN

последовательность операторов, которая выполняется в том случае, если логическое выражение-1 принимает значение «истинна»

ELSEIF {логическое выражение-2} THEN

последовательность операторов, которая выполняется в том случае, если логическое выражение-2 принимает значение «истинна»

...

ELSE

последовательность операторов, которая выполняется в том случае, если все предшествующие логические выражения имели значение «ложь»

ENDIF

Пример 6.

Дано действительное число а. Вычислить f (a), если

0

 

при x 0;

 

 

при 0 x 1;

f x x

 

 

4

в остальных случаях.

x

 

Начало

Программа

a

 

 

 

 

 

Нет

a 0

Да

 

Нет

a

 

1

Да

 

 

 

 

 

 

 

 

 

 

 

y

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y a 4

 

 

 

y

a

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y

CLS

INPUT "a="; a IF a <= 0 THEN

y = 0

ELSEIF a <= 1 THEN y = a

ELSE

y = a ^ 4

END IF

PRINT "y="; y END

Конец

16

9

 

 

 

 

 

 

Пример 8.

 

 

 

 

 

8

 

 

 

 

 

 

 

 

 

 

 

7

 

 

 

 

 

 

Дано

действительное

число

 

6

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

5

y=(x-3)

2

-9

 

 

х. Вычислить f (х),

если функ-

 

4

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ция задана графически на рис.

 

3

 

 

 

 

 

 

 

21 y=-x3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-4 -3 -2 -1-1 0 1 2 3 4 5 6 7 8

 

 

 

 

 

 

 

 

 

 

 

-2

 

 

 

 

 

 

 

 

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

 

 

 

 

 

 

 

 

 

 

 

-3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-4

 

 

 

 

 

 

 

 

Прежде

чем

приступать

к

 

 

 

 

 

 

 

 

 

-5

 

 

 

 

написанию программы,

необходимо

-6

 

 

 

 

-7

 

 

 

 

записать

аналитический

вид

данной

-8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

-9

 

 

 

 

функции.

На

промежутке

( ; 2)

 

 

 

 

 

-10

 

 

 

 

функция имеет вид y=8, на проме-

 

 

 

 

 

жутке [ 2;2] функция имеет вид y=x3, на промежутке

(2; ) функция

имеет вид y (x 3)2

9 .

 

 

 

 

 

 

 

 

 

 

 

Таким образом, функцию можно записать следующим обра-

зом:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

8,

 

 

 

если x 2

 

 

 

 

 

 

 

 

 

 

3

,

если - 2 x 2

 

 

 

 

 

 

 

 

f (x) x

 

 

 

 

 

 

 

 

 

 

 

3)

2

9, если x 2

 

 

 

 

 

 

 

 

 

(x

 

 

 

 

 

 

 

Начало

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

x

 

 

 

 

 

Программа

 

 

 

 

 

 

 

 

 

 

 

 

 

CLS

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Нет

 

x 2

Да

 

 

 

 

INPUT "x="; x

 

 

 

 

 

 

 

 

IF x < -2 THEN

 

 

 

 

 

 

 

 

 

 

 

 

Нет

Да

 

 

 

 

y 8

y = 8

 

 

 

 

x 2

 

 

 

 

 

 

 

 

 

ELSEIF x > 2 THEN

 

y x3

y (x 3)2 9

 

 

 

 

 

 

y = (x-3)^2-9

 

 

 

 

 

 

 

 

 

 

 

 

ELSE

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

y = -x ^ 3

 

 

END

IF

 

PRINT "y="; y

y

END

 

Конец

17

Оператор выбора SELECT… END SELECT

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

IF...THEN…ELSE.

SELECT CASE {главное_выражение} CASE {список_тестовых_условий1}

блок операторов -1

CASE {список_тестовых_условий2} блок операторов –2

… … …

CASE ELSE

блок операторов - n

END SELECT

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

CASE.

Если одно из тестовых условий принимает значение «истинна», то выполняется соответствующий блок операторов, после этого управление передается оператору, следующему за END SELECT (конец выбора).

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

Если тест_выражение удовлетворяет нескольким условиям CASE, выполняется блок операторов, идущий первым.

Блоки SELECT CASE могут быть вложенными. Каждый блок должен иметь завершение END SELECT.

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

например, х, 5, (x + 10) * 4, s$ + «456»

18

Значение этого выражения проверяется в списках тестовых условий, каждое из которых может записываться в одной из трѐх допустимых форм:

1. Проверяемое значение должно равняться значению одного из перечисленных через запятую выражений, тогда считается, что данное тестовое условие истинно.

{список – выражений – через – запятую}

Например: CASE 1,23,x%+6

2. Проверяемое значение должно укладываться в диапазон значений.

{выражение – 1} TO {выражение – 2}

Например: CASE 5 TO 25

3. Проверяемое значение сравнивается с каким-либо выражением.

CASE IS {оператор_сравнения} {проверочное_выражение}

Ключевое слово IS обозначает значение главного выражения – оно сравнивается с проверочным выражением.

Например: CASE IS < 100

Данное тестовое условие окажется истинным, если значение главного выражения будет меньше, чем 100.

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

Программа

CLS

INPUT "a ="; a SELECT CASE a

CASE IS <= 0 y = 0

CASE IS > 1 y = a ^ 4

CASE ELSE y = a

END SELECT

PRINT "a="; a, "y="; y END

19

Пример 7.

Напишите программу решения квадратного уравнения ax2 bx c 0

Начало

a, b, c

D b2 4ac

D

 

 

D=0

 

D>0

 

D<0

x

b

x1

 

b

D

Нет решений

 

2a

 

 

2a

 

 

 

 

x2

 

b

D

 

 

 

2a

 

 

x

 

 

 

 

 

 

 

 

 

 

 

x1, x2

Конец

Программа

CLS

INPUT "a, b, c="; a, b, c D=b^2-4*a*c

SELECT CASE D CASE IS = 0

x = -b/(2*a)

?“x=”;x

CASE IS > 0

X1 = (-b+sqr(D)/(2*a)

X2 = (-b-sqr(D)/(2*a)

?“x1=”;x1^ ? “x1=”;x1

CASE ELSE

?“Нет решений !!!”

END SELECT END

20