Тема 4. Программирование.
Программирование на алгоритмическом языке QBasic.
Программа на QBasic представляет собой последовательность строк, в которых записываются операторы или их метки. Операторы являются теми кирпичиками, из которых строится программа. В QBasic имеется около 100 типов операторов, каждый из которых содержит указание ЭВМ, что надо выполнить в данный момент. В строке может быть ни одного, один или несколько, операторов, разделённых двоеточиями.
Количество операторов в одной строке ограничивается только шириной строки Basic, равной 249 колонкам. Заметим, что все школы программирования считают плохим тоном писать строки программы шире, чем 80 — символьная ширина окна редактора (несмотря на способность редактора горизонтального прокручивания, более широких строк). В тех случаях, когда возникает необходимость в написании строки длиной более 80 символов, используют символ подчёркивания «_» в конце строки. Это заставит транслятор рассматриватьследующую строку как продолжение предыдущей. Эта строка, в свою очередь, так же может быть продолжена.
Часто программы содержат различного рода комментарии, представляющие собой любой текст, помещенный в отдельной строке или в строке с операторами, которые отделяют от комментария символом одиночной кавычки «‘». Например, Вычисление площади круга
‘S=PI*R2
L=2*PI*R ‘Вычисление длины окружности.
Заметим, что в отличие от интерпретирующего Basic, он не фиксирует ошибок в случае наличия в программе пробелов и комментариев, они игнорируются компилятором.
“Метка” оператора располагается в отдельной строке (хотя комментарий в такой строке допустим). Она служит для идентификации оператора, следующего непосредственно за ней. Метка должна начинаться с буквы, и может состоять из любого количества букв и цифр (регистр, на котором набита буква, не имеет значения). За меткой должно следовать двоеточие. Например:
X=PI/n+1.2
M1:
Y=SIN(2*X)+SQR (X)
Z=1-2*Y/X
Основными элементами любой программы являются операторы. Рассмотрим основные классы операторов и их функциональное значение.
Оператор присваивания.
Оператор присваивания является самым распространённым оператором в любой программе вычислительного характера и служит для присваивания переменной значения выражения. Он имеет вид
[LET] V = Е
(LET можно опустить), где V — переменная, Е — выражение.
Например:
Y=X*SIN (x)^2+2.4
РI =3.14159
А$ = ”NAME”
N%=51
M=M+1
В(I)=1-(2*1-1)^3
К моменту выполнения оператора LET значения всех переменных, входящих в правую часть, должны быть определены. Смысл оператора LET заключается в том, что вычисленное значение выражения в правой части оператора присваивается переменной левой части. В этом его отличие от математического знака равенства (в алгебре равенство М=М+1 не имеет смысла).
Переменная и присваиваемое ей значение должны совпадать по типу. Если это условие не выполняется (А$=6.28), то будет выдано сообщение об ошибке.
Числовое значение двойной точности, присваиваемое переменной, которая имеет обычную точность или является целой, округляется в соответствии с типом переменной, стоящей в левой части. Например, в результате выполнения оператора
А%=1.23456789 переменная. А% получит значение 1.
В тех случаях, когда целое значение присваивается переменной обычной или двойной точности, это значение дополняется точкой и следующими за ней нулями. Например, в результате выполнения оператора А=12 переменная А получит значение 12.0.
Операторы ввода исходных данных.
Оператор LET является наиболее распространенным средством однократного присвоения значения переменной. Однако он оказывается неудобным в случае присваивания значений большому числу переменных. Для этой цели служит оператор DАTА и READ. Первый из них формирует в памяти блок данных и имеет вид
DATA список констант
Например,
DATA 5, 7.35, 1Е-2
Оператор DATA может содержать любые допустимые числовые или строковые константы. Используемая строковая константа заключается в кавычки, только если она содержит разделители (запятые, двоеточия) или пробелы в начале и в конце строки; они могут идти вперемежку с числовыми константами. Например,
DATA 7.2, BASIC, 3. 14159, PROGRАM
Оператор DATА может находиться в любом месте программы. В одной программе может быть несколько операторов DATА, которые последовательно создают один блок данных, начиная с констант, указанных в операторе DATА, расположенном первым в тексте программы.
В операторе DATА нельзя использовать символ подчёркивания строки для продолжения строки и записывать в строке с оператором DATA комментарий.
Значения констант из блока данных присваиваются переменным и элементам массивов с помощью оператора ввода.
READ список переменных
В процессе использования программы оператор READ считывает константы из оператора DATА в том порядке, в каком они там появляются. Например, выполнение операторов
DATА 5, 7.35, BАSIC, 1E-2
DATА 701.5, 46, 3.14153
READ N%, А, X%, B, C, D#
эквивалентно следующим присваивания:
N%=5 А=7.35: X=BАSIC: В=1Е-2: С=70.5: М=46: D#=3.14159
Неиспользованные значения из блока данных игнорируются, а если при выполнении некоторого оператора READ оказалось, что блок данных уже исчерпан, выдается сообщение об ошибке «out of DATА» («нет данных»).
Типы переменных, указанных в операторе REАD, должны быть совместимы с типами присваиваемых им значений. Так, недопустимо, чтобы переменная была числовой, а значение — строковой или наоборот. Если и переменная, и константа являются числовыми, но их типы различаются по точности, оператора READ выполняет преобразования, аналогичные действию оператора LET.
Данные из области DATА можно считывать повторно, используя, оператор RESTORES. Например, после выполнения операторов
REАD А, В, С %
DATА 10.6, 0.1,15
RESTORE:
REАD E, F
будет. А=10.6, В=0.1, С%=15, Е=10.6,F=0.1
В BASIC существует еще один способ ввода исходных данных – ввод значения переменных с клавиатуры с помощью операторов
INPUT список переменных
Например:
INPUT A, N%, X$
Выполняя, оператор INPUT, ЭВМ вводит на экран дисплея знак вопроса. Появление этого знака означает, что пользователь программы должен ввести с клавиатуры значение каждой переменной оператора INPUT, отделив, их друг от друга запятыми. Количество и тип значений должны соответствовать количеству и типу переменных в списке оператора INPUT. После набора последнего значения следует нажать клавишу ENTER. Для указанного выше оператора INPUT на экране возможно появление строки
? 7.35; 5,BASIC
Oоператор INPUT, позволяет кроме знака вопроса (или вместо него) выводить некоторое наводящее сообщения. Текст этого сообщения должен указываться в операторе INPUT в виде строковой константы, заключённой в кавычки и отделяется от имени переменной точкой с запятой. Например, следующий оператор:
INPUТ Скорость равна’’; v
Обеспечит появление на экране сообщения:
Скорость равна?
Если вместо точки с запятой поставить запятую, то знак вопроса не появится.
После того как пользователь нажимает клавишу ENTER, отмечая окончание ввода, производится проверка правильности вводимого сообщения. Если количество набранных пользователем значении больше или меньше числа переменных оператора INРUТ либо если пользователь вводит строковое значения числовой переменной, то выдается сообщение «? Redo from start» («Повторите ввод»). После этого сообщения осуществляется повторный ввод всех значений с самого начала строки. Операторов INРUТ может быть сколь угодно много и размещаться они могут в любом месте программы.
Упражнения
1) Определить значение переменной. С после выполнения фрагмента программы:
DATA 1., слон, 5, 6E-3
READ X, 2$, Y
C%=SQR (ABS (X-Y))
2) Перечислите через запятую значения переменных A и B, которые они примут после выполнения фрагмента программы:
READ A
DATA –1.6, 2.3
RESTORE
DATA 5.8
READ B
3) Найти значение третьего элемента массива N(3) после выполнения операторов
OPTION BASE 1
DEFINT K-0
DIM N (3)
DATA 2,3,3
READ N (1), N (2), I
N (i-1)*N (2*i-5)
4) Укажите значение переменной A после выполнения фрагмента программы INPUT X, Т
? 0.6,-1.
A%=FIX (x*t-x/t)
5) Определите значение переменной N после выполнения операторов
DATA country, man READA$, В$
С$=A$+B$
N%=LEN(С$)