Oparin
.pdfPRINT USING "##"; i;
PRINT "!";
FOR j = 1 TO p
PRINT USING "####"; i * j;
NEXT j: PRINT
NEXT i
END
SUB frame (n)
'Подпрограмма построения линии
'из n чёрточек
FOR k = 1 TO n
PRINT "-";
NEXT k: PRINT
'Для возврата в основную программу
'нажать клавишу F2 и затем выбрать
'среди программных элементов SUBs
'программу с именем prim0006.bas END SUB
Рис. 6. Таблица умножения (файл prim0006.bas)
'prim0007.bas
'Старояпонский календарь
CLS ' Очистка экрана
' Запрос года
INPUT "Введите год"; year
'Вычисление номера цвета
'и номера животного
c = ((9910 - year) MOD 60) \ 12 k = (year - 3) MOD 12
' Определение по номеру цвета года
PRINT "Цвет года - ";
31
SELECT CASE c
CASE 0
PRINT "зелёный"
CASE 1
PRINT "красный"
CASE 2
PRINT "жёлтый"
CASE 3
PRINT "белый"
CASE 4
PRINT "чёрный"
END SELECT
' Определение по номеру животного года
PRINT "Животное года - ";
SELECT CASE k
CASE 0
PRINT "кабан"
CASE 1
PRINT "крыса"
CASE 2
PRINT "бык"
CASE 3
PRINT "тигр"
CASE 4
PRINT "кот"
CASE 5
PRINT "дракон"
CASE 6
PRINT "змея"
CASE 7
PRINT "лошадь"
CASE 8
PRINT "овца"
CASE 9
32
PRINT "обезьяна"
CASE 10
PRINT "петух"
CASE 11
PRINT "собака"
END SELECT
PRINT "Удачи вам!"
END
Рис. 7. Пример использования оператора выбора (файл prim0007.bas)
'prim0008.bas
'Упорядочение целочисленного
'массива методом "пузырька"
'Начальная установка счётчика перестановок
count = 0
CLS ' Очистка экрана
PRINT "Сколько чисел в массиве?"
INPUT n
OPTION BASE 1
DIM massiv0(n) AS LONG, massiv1(n) AS LONG ' Ввод массива
FOR i = 1 TO n
PRINT "Введите "; i; "-е целое число";
INPUT massiv0(i)
massiv1(i) = massiv0(i) NEXT i
' Сортировка
FOR i = 1 TO n - 1
FOR j = i + 1 TO n
IF massiv1(i) < massiv1(j) THEN ' Подсчёт перестановок
count = count + 1 term = massiv1(i)
33
massiv1(i) = massiv1(j) massiv1(j) = term
END IF
NEXT j
NEXT i
PRINT TAB(28); "Исходный массив"
FOR i = 1 TO n
PRINT USING "###"; massiv0(i);
NEXT i
PRINT TAB(25); "Отсортированный массив"
FOR i = 1 TO n
PRINT USING "###"; massiv1(i);
NEXT i
PRINT "Количество перестановок ="; count
END
Рис. 8. Программа сортировки целочисленного массива (файл prim0008.bas)
'prim0009.bas
'Российский флаг
CLS ' Очистка экрана
SCREEN 12
LOCATE 3, 4: PRINT "Российский флаг" ' Белая полоса
LINE (80, 100)-(550, 190), 15, BF ' Синяя полоса
LINE (80, 190)-(550, 280), 1, BF ' Красная полоса
LINE (80, 280)-(550, 370), 4, BF
END
Рис. 9. Российский флаг (файл prim0009.bas)
34
DECLARE SUB g (x0!, y0!, r0!, t!)
'prim0010.bas
'Построение графика функции, заданной параметрически
CONST pi |
= |
3.1415926# |
||
t = 18 ' |
Количество точек на графике |
|||
x0 |
= 320 |
|
|
|
y0 |
= |
200 |
|
|
r0 |
= |
100 |
' |
Радиус окружности |
'Установка графического экранного режима
'с разрешением 640 x 480 точек
SCREEN 12
'Вызов подпрограммы-процедуры g,
'строящей график функции
'с центром в точке (x0,y0),
'радиусом r0 и количеством линий t CALL g(x0, y0, r0, t)
END
SUB g (x0, y0, r0, t)
'Подпрограмма построения графика
'функции по t опорным точкам
CONST pi = 3.1415926# k = 20
l = 1 m = 1
PSET (x0, y0 + r0), 2
FOR a = 0 TO pi * 2 STEP pi / t r = r0 * COS(a * k)
x = x0 + r * SIN(a * l) y = y0 + r * COS(a * m) LINE -(x, y), 2
NEXT a
END SUB
Рис. 10. Пример графической программы (файл prim0010.bas)
35
DECLARE SUB g (x0!, y0!, r0!, t!, k!)
'prim0011.bas
'Построение графиков функций, заданных параметрически
CONST pi = 3.1415926# k = 1
t = 90 ' Количество точек на графике x0 = 50
y0 = 50
r0 = 30 SCREEN 12
FOR y0 = 50 TO 450 STEP 60 FOR x0 = 50 TO 600 STEP 60 CALL g(x0, y0, r0, t, k) k = k + 1
NEXT x0
NEXT y0
END
SUB g (x0, y0, r0, t, k)
CONST pi = 3.1415926#
l = 1 m = 1
PSET (x0, y0 + r0)
FOR a = 0 TO pi * 2 STEP pi / t r = r0 * COS(a * k)
x = x0 + r * SIN(a * l) y = y0 + r * COS(a * m)
LINE -(x, y), k * 4 MOD 7 + 1, B
'Можно убрать B или поставить BF NEXT a
'Запустить несколько раз,
'изменяя значения k, l и m
END SUB
Рис. 11. Пример графической программы (файл prim0011.bas)
36
DECLARE SUB waits ()
'prim0012.bas
'Организация диалога "Человек - ЭВМ" CLS ' Очистка экрана
'Подготовка данных
'Начальное значение счётчика баллов
Count = 0
' Количество вопросов n = 1
' Начальное значение количества вопросов
CountAnswer = 0
PRINT "Ответьте, пожалуйста, на вопросы,"
PRINT "выбирая ответы из списка и нажимая"
PRINT "на соответствующую номеру ответа"
PRINT "клавишу и затем <Enter>"
PRINT : PRINT : PRINT : PRINT : PRINT
' Обращение к подпрограмме ожидания нажатия любой клавиши
CALL waits
CLS ' Очистка экрана
' Подсчёт количества вопросов
CountAnswer = CountAnswer + 1
Ball = 0
' Меню ввода
PRINT "Вам сладко от:"
PRINT TAB(15); "1. Соли"
PRINT TAB(15); "2. Глюкозы"
PRINT TAB(15); "3. Каротина"
PRINT TAB(15); "4. Фруктозы"
INPUT ask
READ a, Ball
IF a = ask THEN
Count = Count + Ball
END IF
CLS ' Очистка экрана
37
Ball = 0
' Подсчёт количества вопросов
CountAnswer = CountAnswer + 1 PRINT "Вам холодно от:" PRINT TAB(15); "1. Воды" PRINT TAB(15); "2. Снега" PRINT TAB(15); "3. Пара" PRINT TAB(15); "4. Массажа" INPUT ask
READ a, Ball
IF a = ask THEN
Count = Count + Ball
END IF
CLS
' Подсчёт количества вопросов
CountAnswer = CountAnswer + 1
Ball = 0
PRINT "Вам смешно от:" PRINT TAB(15); "1. Тоски" PRINT TAB(15); "2. Комедии" PRINT TAB(15); "3. Жизни" PRINT TAB(15); "4. Зарплаты" INPUT ask
IF CountAnswer = 3 THEN READ b1, b2, b3, b4 END IF
SELECT CASE ask
CASE 1
Ball = b1
CASE 2
Ball = b2
CASE 3
Ball = b3
CASE 4
38
Ball = b4
END SELECT
Count = Count + Ball / 4
CLS ' Очистка экрана
' Подсчёт количества вопросов
CountAnswer = CountAnswer + 1
PRINT "Вам спать хочется от:"
PRINT TAB(15); "1. Усталости"
PRINT TAB(15); "2. Шума"
PRINT TAB(15); "3. Книги"
PRINT TAB(15); "4. Погоды"
INPUT ask
Ball = (ask - 1) / 3
Count = Count + Ball
'Окончание опроса
'Окончательный подсчёт
mark = Count / CountAnswer PRINT "Конечный результат:"
PRINT "Вы набрали в"; CountAnswer; PRINT "вопросах"; Count; "баллов" PRINT "В среднем "; mark
PRINT "Ваша оценка = "; PRINT USING "#.##"; mark * 5 ' База данных
DATA 4,1,2,1,1,2,4,2
END
SUB waits
' Подпрограмма ожидания нажатия любой клавиши
DO
LOOP UNTIL INKEY$ <> ""
END SUB
Рис. 12. Простейший тест (файл prim0012.bas)
39
Учебное электронное текстовое издание
Опарин Дмитрий Всеволодович
ПРАКТИКУМ ПО АЛГОРИТМИЗАЦИИ И ПРОГРАММИРОВАНИЮ НА ЯЗЫКЕ ВЫСОКОГО УРОВНЯ QBASIC
Редактор |
Н.В. Лутова |
Компьютерная вёрстка |
Д.В. Опарин |
Рекомендовано Методическим советом Разрешено к публикации 28.10.10.
Электронный формат – pdf Объём 2,0 уч.-изд. л.
УрФУ 620002, Екатеринбург, ул. Мира, 19
Информационный портал УрФУ http://www.ustu.ru