Смекни!
smekni.com

Информатика Базовый курс (стр. 183 из 188)

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

Итальянский математик Леонардо Фибоначчи придумал оригинальную числовую последовательность, названную в его честь, которая описывает рост численности поколений кроликов. Считается, что каждый год каждая пара животных приносит приплод — новую пару (самца и самку), которые в свою очередь начинают давать приплод через два года (смертность не учитывается). То есть каждый следующий член последовательности равен сумме двух предыдущих, а классическая последовательность Фибоначчи выглядит так:

1,1,2,3,5,8,13,21,...

Надо определить, через сколько лет будет достигнута популяция в N особей.

Запуск QBasic

Интерпретатор QBasic входит в стандартную поставку MS-DOS и расположен обычно в каталоге \DOS. Программа-интерпретатор называется qbasic.exe. После ее запуска на экране появится приветствие, которое пропускается нажатием на клавишу ENTER, после чего QBasic вызывает встроенную справочную систему на английском языке. Она закрывается нажатием клавиши ESC.

Рабочая область экрана (рис. 20.1) поделена на две части. В нижней части, в окне

Immediate (Немедленное выполнение) можно вводить операторы Бейсика и тут же их выполнять.
Вывод на экран

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


20.7. Пример на Бейсике. Разведение кроликов

Для перехода в окно Immediate (Немедленное выполнение) надо нажать клавишу

F6. Чтобы сразу получить ответную реакцию от QBasic, достаточно набрать оператор

PRINT 2+2 и нажать клавишу ENTER, чтобы этот оператор выполнился.

На экране вывода появится число 4 (результат вычисления выражения 2+2), а в нижней строке — сообщение Press any key to continue (Нажмите любую клавишу для продолжения). Чтобы вернуться в QBasic, надо это сделать.

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

PRINT "Сумма = "; 2+3

Если теперь нажать клавишу ENTER, то на экране вывода в новой строке (под ранее напечатанной четверкой) появится фраза

Сумма = 5

Редактор программы

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

Набор и редактирование исходного текста программы осуществляется в верхнем окне интерпретатора. Для перехода в него используется клавиша F6.

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

Ввод информации от пользователя

В Бейсике ввести в переменную значение с экрана можно с помощью оператора INPUT. Сначала указывается необязательная текстовая подсказка, а потом — имя переменной. Например, оператор

INPUT "Введите число: ", х

при выполнении напечатает в новой строке подсказку

Введите число:

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

Главная часть программы

Ввод и редактирование текста программы осуществляется во встроенном редакторе

QBasic, правила работы с которым аналогичны правилам работы с большинством известных текстовых редакторов.


Глава 20. Основы программирования

Рис. 20.1. Окно программы QBasic

Главная часть программы набирается в этом редакторе и должна выглядеть так (комментарии вводить не обязательно):

' описание переменной N — числа, особей

Главная часть программы набирается в этом редакторе и должна выглядеть так (комментарии вводить не обязательно):

' описание переменной N — числа особей DIM N AS INTEGER

' начало бесконечного цикла DO

' ввод числа особей в переменную N

? INPUT "Введите количество особей: ", N • если введен 0, то IF N = 0 THEN

' закончить программу

торы, взавершенагляднВ текст' прLOOне ыделяюапENDPой.ния рабодолжиRINTсполчатEND IF аьзуется оператор END, котороты программы. Операторы, втся отступами, чтобы структ"Требуемое число лет:ть цикл с началаь результат: ло">ыурай ж енные в цикл текста была преднYears%(N)значени в условные опера-более понятной и для немедленного


20.7. Пример на Бейсике. Разведение кроликов

Основная, глобальная часть алгоритма реализована. Осталось «спуститься вниз» и запрограммировать функцию Years%(), которая в качестве аргумента получает количество особей и возвращает число лет, требуемое для их разведения.
Типы данных в Бейсике

В конце названия функции Years% указан символ %. Таким образом в Бейсике описывается тип возвращаемого функцией значения. Допустимые символы приведены в таблице.

Тип переменной Символ в конце имени переменной

INTEGER

%

STRING

$

DOUBLE

#

Добавление новой функции

В QBasic имеется удобная возможность добавить в программу новую функцию, избежав при этом дополнительного ручного кодирования. Это делает команда Edit • New Function (Правка • Создать функцию). В появившемся диалоговом окне надо ввести название функции Years% и нажать клавишу ENTER. Основной текст программы временно пропадет, и появится автоматически сгенерированное описание новой функции:

, FUNCTION Years%

END FUNCTION

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

Функции Years% надо указать список аргументов. В данном случае он будет состоять из одного параметра:

FUNCTION Years% (X AS INTEGER)

Расчет популяции

Так как для определения нового члена последовательности Фибоначчи требуется знать значения двух предыдущих членов, прежде всего надо описать три локальные переменные F1, F2 и F3, хранящие три очередных значения последовательности. Исходно первые три значения 1,1 и 2 запишутся в переменные F1, F2 и F3 явно, а в дальнейшем новые значения будут вычисляться программно.

Сам расчет представляет собой условный цикл, который выполняется до тех пор, пока очередное значение не превысит заданное количество особей. Число таких циклов — число лет — будет подсчитываться в локальной переменной-счетчике YearsNum, первоначально имеющей значение 3.

FUNCTION Years%(X AS INTEGER)

' описание переменных


Глава 20. Основы программирования

DIM Fl AS INTEGER, F2 AS INTEGER, F3 AS INTEGER

DIM YearsNum AS INTEGER задание начальных значений

Fl = 1: F2 = 1: F3 = 2: YearsNum = 3 цикл, пока число кроликов меньше заданного

DO WHILE F3 < X определяем новый член последовательности

Fl = F2: F2 = F3

F3 = Fl + F2

' увеличиваем число лет на 1: YearsNum = YearsNum + 1

' повторяем цикл LOOP

' в качестве возвращаемого значения

' используется значение переменной YearsNum

Years%.= YearsNum END FUNCTION

Сохранение текста программы е файле

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