НОВОСТИ   БИБЛИОТЕКА   ЮМОР   КАРТА САЙТА   ССЫЛКИ   О САЙТЕ  




предыдущая главасодержаниеследующая глава

§ 21. Ветвления в языке Бейсик

В этом параграфе мы покажем, как оформляются на языке Бейсик разветвляющиеся программы. Простейшей командой, изменяющей естественный порядок выполнения программы, является команда GOTO (GO TO - "перейти к..."). Эта команда имеет вид

 GOTO N

где N - номер строки программы. По этой команде ЭВМ переходит к выполнению команды с номером N.

Вы знакомы с двумя способами записи ветвлений - неполной и полной. Ветвление в неполной форме записывалось так:

 Если Q, то: 
 Р 
 Конец ветвления

(здесь Q - условие, а Р - последовательность команд, которую надо выполнять в случае, когда условие верно).

Можно по-разному перевести на язык Бейсик эту форму записи. Если Р состоит из одного действия, то перевод такой:

 IF Q THEN P

(слово IF означает "если", а слово THEN - "то"). Например:

 10 IF X>0 THEN Y = LOG (X) 
 20 ...

Если значение переменной х>0, то ЭВМ вычислит ln x и присвоит результат переменной у, а затем будет выполняться команда с номером 20. Если же значение x не превосходит нуля, то сразу будет выполняться команда с номером 20.

Допустим теперь, что последовательность Р состоит из нескольких действий. Тогда сокращенная форма ветвления будет записываться сложнее. Пусть, например, в Р содержится 6 действий P1, ..., Р6, ветвление должно начинаться со 120-й строки, а следующая после ветвления команда имеет номер 150. Это означает, что в случае невыполнения условия Q надо перейти к команде 150. Поэтому запись будет такой:

120 IF NOT (Q) THEN GOTO 150

121 P1

122 P2

. . . . . . . . . .

126 P6

150 ...

Здесь NOT (Q) означает отрицание условия Q (NOT - "не"). Например, NOT (X<Y) означает Х> = Y, a NOT (X = Y) означает X<>Y.

Отметим еще, что в строках вида

 IF ... THEN GOTO К

где К - номер строки, одно из слов, GOTO или THEN, можно не писать, т. е. три команды

 IF ... THEN К 
 IF ... GOTO К 
 IF ... THEN GOTO К

означают одно и то же.

Например, алгоритм нахождения максимума из двух чисел:

 Запросить А, В. 
 Присвоить М значение А. 
 Если М<В, то: 
 Присвоить М значение В. 
 Конец ветвления. 
 Сообщить М.

На языке Бейсик можно записать так:

 10 INPUT А,В 
 20 М = А 
 30 IF M<B THEN М=В 
 40 PRINT M 
 50 END

Тот же алгоритм можно перевести на язык Бейсик и иначе:

 10 INPUT А,В 
 20 М = А 
 30 IF N0T(M<B) THEN 50 
 40 М = В 
 50 PRINT M 
 60 END

Покажем теперь, как записать на языке Бейсик команду ветвления в полной форме:

 Если Q, то: 
 Р 
 Иначе: 
 Т 
 Конец ветвления.

Аналогично предыдущему, если Р и Т состоят из одного действия, то удобно переводить так:

 IF Q THEN P ELSE T

(ELSE - иначе).

Если же Р или Т состоят из нескольких действий, то удобнее переводить следующим образом (для примера: пусть Р состоит из трех, Т - из четырех команд, ветвление начинается с 530-й строки, следующая за ветвлением строка имеет номер 600):

 530 IF Q THEN 536 
 531 T1 
 532 Т2 
 533 Т3 
 534 Т4 
 535 GOTO 600 
 536 P1 
 537 Р2 
 538 Р3 
 600 ...

Проверьте, что, исполняя этот фрагмент, ЭВМ выполнит команды P1, Р2, Р3, если условие Q выполняется, и команды Т1, T2, Т3, Т4, если Q не имеет места. А затем, после выполнения соответствующей серии команд, ЭВМ перейдет к выполнению команды, записанной в строке 600.

Рассмотрим пример программы для вычисления значения функции по следующему правилу:


 10 INPUT X 
 20 IF Х>=2 THEN Y=SQR(X) ELSE Y=ABS(X) 
 30 PRINT"Y="Y 
 40 END

Можно было эту программу записать и так:

 10 INPUT X 
 20 IF X>=2 THEN 50 
 30 Y=ABS(X) 
 40 GOTO 60 
 50 Y=SQR(X) 
 60 END

Составим теперь математическую модель и программу решения следующей "артиллерийской" задачи.

Задача. На заданном расстоянии от пушки находится стена. Известен угол наклона пушки и начальная скорость снаряда. Попадет ли снаряд в стену?

Стрельба из пушки
Стрельба из пушки

Сначала, как обычно, выскажем упрощающие предположения. Снаряд считаем материальной точкой, сопротивлением воздуха и размерами пушки пренебрегаем. Разумеется, мы считаем также, что выполняются законы Ньютона. Из условия задачи видно, каковы в ней исходные данные: это угол а, начальная скорость v, расстояние до стены S и высота стены h. Результатом является одно из сообщений "попал" или "не попал". Начальные данные подчиняются естественным ограничениям: 0<α<π/2, S>0, h>0, 0<v<1000 м/с (подумайте, как можно обосновать эти ограничения). Теперь нам надо записать на языке математики тот факт, что снаряд попал в стену. Для этого надо найти высоту L снаряда на расстоянии S от пушки: ведь попадание снаряда в стену означает, что L находится в пределах от 0 до h.

Значит, нам надо вывести формулу для определения L. Как вы знаете из курса физики, перемещения снаряда по горизонтали и вертикали за время t равны, соответственно:

x = (v cos α) t; y = (v sin α) t-gt2/2,

где g - ускорение свободного падения (9,8 м/с2). Определим, сколько времени понадобится снаряду, чтобы преодолеть расстояние S:

t = S/(v cos α).

Подставив это значение t в выражение для у, получим значение L:


Конечно, значение L, вычисленное по этой формуле, может оказаться и отрицательным. Это означает, что снаряд до стены не долетит. Если же L окажется больше h, то снаряд перелетит через стену. Вот математическая модель и построена.

Составим алгоритм для ВЫЧИСЛИТЕЛЯ:

 Сообщить "Введите начальную скорость снаряда, расстояние до стены, высоту стены". 
 Запросить v, S, h. 
 Сообщить "Введите угол наклона ствола пушки". 
 Запросить А. 
 Если Vν≤0, то: 
 Сообщить "Скорость должна быть положительной". 
 Стоп. 
 Конец ветвления. 
 Если vν≥1000, то: 
 Сообщить "Скорость слишком велика". 
 Стоп. 
 Конец ветвления. 
 Если S≥0, то: 
 Сообщить "Расстояние должно быть положительным". 
 Стоп. 
 Конец ветвления. 
 Если h≤0, то: 
 Сообщить "Высота стены должна быть положительной". 
 Стоп. 
 Конец ветвления. 
 Если A≤0, то: 
 Сообщить "Пушка не должна стрелять в землю". 
 Стоп. 
 Конец ветвления. 
 Если А≥3,14/2, то: 
 Сообщить "Пушка направлена не в сторону стены". 
 Стоп. 
 Конец ветвления. 
 Присвоить L значение  
 Если L>h, то: 
 Сообщить "Снаряд не попал в стену...". 
 Стоп. 
 Конец ветвления. 
 Если L<0, то: 
 Сообщить "Снаряд не попал в стену...". 
 Иначе: 
 Сообщить "Попал!!!" 
 Конец ветвления. 
 Стоп.

А теперь переведите этот алгоритм на язык Бейсик (мы и так сделали большую часть работы).

Вопросы

1. По какой команде можно заставить ЭВМ, не проверяя никаких условий, изменить порядок выполнения действий?

2. Как в языке Бейсик оформляется ветвление:

а) в неполной форме;

б) в полной форме?

3. Для чего нужны первые 28 строк в алгоритме решения "артиллерийской" задачи?

Задания для самостоятельного выполнения

1. Переведите на Бейсик алгоритмы решения задач 5-7 из § 8 и 1-7 из § 9.

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

10 INPUT X 
 20 IF X> = 0 THEN 30 
 30 PRINT SQR(X) 
 40 GOTO 60 
 50 PRINT. "Корень вычислить невозможно" 
 60 END

3. Злоумышленник стер команду 100 в следующей программе нахождения корней квадратного уравнения:

 10 INPUT А,Б,С 
 20 IF А <> 0 THEN 50 
 30 PRINT "Это уравнение не квадратное" 
 40 STOP 
 50 D=B^2 - 4∗A∗C 
 60 IF D<0 THEN 110
 70 X1 = (-B + SQR (D) )/(2∗A)
 80 X2 = (-B - SQR (D) )/(2∗A)
 90 PRINT "Корни уравнения "X1,X2
 100 ...
 110 PRINT "Уравнение корней не имеет"
 120 END

4. Составьте математическую модель, алгоритм и программу на Бейсике решения следующей задачи.

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

предыдущая главасодержаниеследующая глава








© Злыгостев А.С., 2001-2019
При использовании материалов сайта активная ссылка обязательна:
http://informaticslib.ru/ 'Библиотека по информатике'
Рейтинг@Mail.ru
Поможем с курсовой, контрольной, дипломной
1500+ квалифицированных специалистов готовы вам помочь