Файл: Основы программирования на языке QBasic.pdf

ВУЗ: Не указан

Категория: Курсовая работа

Дисциплина: Не указана

Добавлен: 01.04.2023

Просмотров: 106

Скачиваний: 2

ВНИМАНИЕ! Если данный файл нарушает Ваши авторские права, то обязательно сообщите нам.

LET имя.переменной = содержимое переменной

Использование оператора LET не является обязательным, формат

имя.переменной = содержимое переменной

тоже является верным и не нарушает синтаксис[22]. В качестве содержимого переменной при объявлении имени может выступать результат математической операции, объединения строк (конкатенация), любой другой функции/оператора, например: LET int25 = 5*5. Способы указания типа содержимого переменной рассмотрены далее.

Принудительно указать тип переменной можно тремя способами[23]:

  • явное указание типа с помощью соответствующего символа, добавляемого к имени переменной, например: k%, factorial&, summa!, integral#, str$, где: k% – признак целой переменной, factorial& – признак длинной целой переменной, summa! – признак переменной одинарной точности (Подробнее о типах см. раздел 2.4).
  • неявное указание типа переменной по первой букве ее имени при помощи оператора DEF:

DEFтип {буква|диапазон_букв}[,{буква|диапазон_букв}]…

где тип соответствует одному из зарезервированных типов: INT — тип integer, LNG — тип long, SNG — тип single, DBL — тип double, STR — тип string, буква – первая буква имен переменной, диапазон_букв – набор латинских символов в алфавитном порядке, которые являются первыми буквами имен переменных. Например:

DEFINT i-n (переменные, чьи имена начинаются на i, k, l, m, n, теперь имеют тип INTEGER – целая переменная, см. 2.4);

DEFSTR a,r-t (переменные, чьи имена начинаются на a, r, s, t, теперь имеют тип STRING – строка символов, см. 2.4);

  • явное указание типа переменной при помощи оператора DIM:

DIM имя AS тип [, DIM имя AS тип]…

где имя – имя переменной, тип – тип содержимого переменной, например: DIM str1 AS STRING, index AS INTEGER

QBasic позволяет произвести обмен содержимым переменных через оператор SWAP. В качестве параметра обязательно передаются два параметра – имена переменных. Фактически происходит изменение имен-ссылок на адреса памяти. Например:

LET A = 1 ← объявляем переменную А с содержимым 1;

LET B = 2 ← объявляем переменную B с содержимым 2;

SWAP A, B ← вызов оператора с передачей параметров;


PRINT A ← вывод на экран содержимого переменной A: 2;

PRINT B ← вывод на экран содержимого переменной B: 1.

2.5.2 Массивы

QBasic позволяет работать с массивами, при этом объявление и работа с массивом во многом аналогична работе с переменной. Технически работа с массивом и есть работа с имененем-указателем на блок данных в памяти. В QBasic массив называется индексированной переменной (см. раздел 2.2). Для работы с массивами используются операторы DIM, ERASE и REDIM[24]. Параметры операторов:

имя – имя массива или простой переменной, правила написания соответствуют правилам для имени переменной;

индексы – константы, переменные или арифметические выражения, разделенные запятыми, максимальные значения которых определяют величину массива, а число индексов – размерность массива. Индексы вводятся в формате: [начало TO] конец

начало и конец – устанавливают нижнюю и верхнюю границы индексов массива из диапазона -32768 до 32767. Если отсутствует параметр начало, то он равен нулю;

тип – устанавливает тип элементов массива или простой переменной. В случае отсутствия, параметр по умолчанию – SINGLE;

SHARED – атрибут, который предписывает переменную или массив сделать глобальным (см 2.5.1).

Оператор DIM (DIMension – резервирование места). Примеры объявления:

DIM SHARED a(50), b(10 TO 100) AS DOUBLE

В данном примере объявлено два массива:

  • с именем a одномерный массив с данными типа двойной точности, содержащий 51 элемент (условно 51 переменную): a(0), a(1), …, a(50);
  • с именем b двухмерный массив с данными типа двойной точности, индексы которого меняются от 10 до 100.

DIM wiza(100,100)

В данном примере объявлен массив с именем wiza, содержащий 101*101 элемент с типом по умолчанию (SINGLE).

DIM k%(15), k!(15), k#(15), k$(15)

В данном примере объявлены 4 массива, формально имеющие одно и то же имя – k, но, фактически, это совершенно разные массивы с разными типами данных по 16 элементов в каждом: k# – массив элементов двойной точности, k$ – массив строковых переменных и т. д.

Следующие три оператора/команды эквивалентны:

  • DIM f(8,3)
  • DIM f(0 TO 8, 0 TO 3)
  • DIM f(8, 0 TO 3)

Объявление массивов с отрицательными границами возможно только в следующем формате: DIM s(-4 TO 10), b(-99 TO -5, -3 TO 0).


Оператор ERASE (ERASE – стирать) – этот оператор используется для управления памятью, обнуления элементов статических массивов (см. STATIC раздел 2.5.1) и удаления динамических массивов.

Синтаксис оператора: ERASE имя_массива

Оператор REDIM – предназначен для переопределения границ объявленного ранее динамического массива. Например:

DIM a(49, 49) объявление динамического массива

REDIM a(19, 14) переопределение границ динамического массива

3. Управляющие операторы, организация циклов и передача управления

При запуске программы, написанной на языке QBasic, операторы выполняются последовательно, в порядке из записи в коде, передача управления к следующему оператору происходит только при завершении предыдущего. В случае необходимости организации цикличности или ветвления предусмотрены операторы передачи управления[25]. Такие операторы можно выделить в три группы:

  • операторы ветвления – позволяют реализовать структурное программирование;
  • операторы цикла – позволяют многократно выполнять группу операторов;
  • оператор безусловного перехода[26].

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

3.1 Операторы ветвления

Операторы ветвления – это операторы передачи управления, предназначенные для изменения порядка выполнения операторов в соответствии с заданным условием[27]. Операторами ветвления являются:

      • IF...THEN...ELSE (подробно описан далее по тексту в качестве примера структуры синтаксиса);
      • CASE...SELECT (описание отсутствует, так как выходит за рамки задач курсовой работы).

Оператор IF...THEN...ELSE (если…тогда...иначе). Полная форма записи при однострочной записи:

IF условие THEN оператор/ы группы 1 ELSE оператор/ы группы 2


Полная форма записи при многострочной записи (добавляется END IF для определения окончания конструкции ветвления):

IF условие THEN

оператор/ы группы 1

ELSE

оператор/ы группы 2

END IF

Принцип работы заключается в вычислении условия (ИСТИНА/ЛОЖЬ) и передаче управления одной из групп операторов. Если условие истинно (например 1=1), то выполняется оператор/ы группы 1, после выполнения управление передается оператору, который идут после конструкции ветвления игнорируя оператор/ы группы 2. Если условие ложно (например 1=2), то выполняется оператор/ы группы 2, после выполнения управление передается оператору, который записан после конструкции ветвления игнорируя оператор/ы группы 1.

Блок-схема:

Условие всегда содержит знак сравнения для вычисления истинности:

  • < – меньше;
  • > – больше;
  • = – равно;
  • <= – меньше или равно;
  • >= – больше или равно;
  • <> – не равно;

Кроме того, условия могут быть простыми и сложными[28]. Простое условие содержит одно вычисление (например, 1=1), сложное условие состоит из двух и более простых условий через союзы AND или OR. Союз AND – каждое из простых условий должно быть истинно (например, 1=1 AND 2=2). Союз OR – одно из простых условий должно быть истинно (например, 1=2 OR 1=1).

Пример ветвления с простым условием (однострочная запись):

IF 1=1 THEN PRINT "1=1" ELSE PRINT "1<>1"

Пример ветвления с простым условием (многострочная запись):

a = 1

b = 2

IF a=b THEN

PRINT "число 1 рано числу 2 (1=2)"

ELSE

PRINT "число 1 не равно числу 2 (1<>2)"

END IF

Пример ветвления со сложным условием (многострочная запись):

a = 1

b = 2

IF a>b OR a<b THEN

PRINT "число 1 больше или меньше числа 2"

ELSE

PRINT "число 1 равно числу 2"

END IF

Неполная[29] форма записи: IF условие THEN оператор/ы (или метка перехода). В неполной форме может быть опущен оператор ELSE, тогда, при невыполнении условия, управление передается следующему в коде оператору, записанному после конструкции оператора ветвления.

Пример:

IF 1=2 THEN

PRINT "эта строка никогда не будет исполнена"


END IF

PRINT "эта строка всегда будет выполнятся, независимо от условия"

Расширить оператор ветвления можно при помощи ключевого слова ELSEIF[30]. Пример записи:

a = 1

b = 2

IF a=b THEN ← условие ложно

PRINT "a = b" ← этот оператор не будет запущен

ELSEIF a>b THEN ← условие ложно

PRINT "a > b" ← этот оператор не будет запущен

ELSEIF a<b THEN ← условие истинно

PRINT "a < b" ← этот оператор будет запущен

END IF

Число вставок ELSEIF не ограничено. Оператор CASE...SELECT структурно похож на оператор IF...THEN...ELSE с ключевым словом ELSEIF.

3.2 Операторы цикла

Операторы цикла позволяют определенный набор операторов выполнить какое-то (обычно известное) число раз образуя цикл операций – циклический алгоритм[31][32].

Список операторов цикла:

      • FOR...NEXT (цикл со счетчиком)
      • WHILE...WEND (цикл с проверкой условия)
      • DO...LOOP (цикл с проверкой условия)

Оператор FOR...NEXT (для...следующий). Формат записи:

FOR переменная цикла = нзп TO кзп ← начало цикла

группа операторов ← тело

NEXT переменная цикла ← конец цикла

Этот оператор/цикл состоит из двух частей:

  1. начало цикла, где, нзп – начальное значение переменной цикла, кзп – конечное значение переменной цикла. По умолчанию шаг равен единице, для изменения шага используется ключевое слово STEP (первая строка будет иметь следующий вид «FOR переменная цикла = нзп TO кзп STEP шаг», где шаг, это шаг изменения переменной);
  2. конец цикла, где проверяются значения переменной и принимается решение, если переменная цикла > конечного значения (кзн), то управление передается оператору, следующему за NEXT, а если переменная цикла <= конечного значения (кзн), то переменная цикла увеличивается на заданный в операторе шаг (по умолчанию на единицу) и последовательно запускаются все операторы в теле цикла.

Оператор WHILE...WEND (WHILE – пока; While END – конец цикла)[33]. Формат записи: