Запись текста программы на языке программирования.
Используя нарисованный алгоритм, можно без особых трудностей написать текст программы. Проделаем это для приведенного примера. Начинать программу следует с оператора CLS – очистки экрана. Нумерация строк в Бейсике принята через 10 (если Вы что-то пропустили, то между строками 10 и 20 можно вставить строки 11, 12… 19 с необходимыми операторами, не меняя остального текста программы). Оператор в строке 20 запускает генератор случайных чисел. Строка 30 выводит на экран название программы. Блок 1 алгоритма реализуется строками 40-50 программы. Строкой 60 подготавливается место в памяти для вводимых элементов последовательности, объявляя массив a(n1). Строки 70-80 выводят на экран своеобразное меню, выбор режима ввода завершается в строке 90 (строки 70-90 соответствуют блоку 3 алгоритма). Строка 100 исключает ошибку выбора (допустимы n2 = 1 или n2 = 2, если введено число > 2, то программа возвращается к повторению выбора. В литературе это обычно называют защитой от дурака). Цикл, реализованный в алгоритме в блоках 2-7, записан в программе в строках 110-150 с помощью операторов FOR…NEXT. Причем блоки 2,6,7 алгоритма отображаются в строках 110, 150 программы. В строке 120 обрабатываются результаты выбора (блок 3 алгоритма) и осуществляется ввод последовательности с клавиатуры (блок 5 алгоритма). Автоматический ввод последовательности из чисел в диапазоне от 1 до 20 с помощью функции случайных чисел RND(1) обеспечивается строкой 130 программы (блок 4 алгоритма).
Цикл блоков 8-14 алгоритма записан в строках 160-190 программы с помощью оператора FOR…NEXT. Блоку 8 алгоритма соответствует строка 160 программы, блокам 9,13,14 – строки 170,190. Блоки 11,12 реализованы в строке 180 посредством оператора IF… THEN…ELSE, где в качестве условия использована функция MOD, вычисляющая остаток от деления очередного a(j) на 2. Очевидно, что четные числа делятся на 2 без остатка. В противном случае по ELSE вычисляется произведение всех нечетных элементов последовательности. Вывод результата на экран обеспечивается строкой 200 с помощью оператора PRINT. Конец программы.
Рекомендуется в программе каждый оператор записывать в своей строке. Если же логика программы диктует многооператорную строку, то операторы в ней отделяются двоеточием. Например:
10 FOR i = 1 TO 1000: NEXT i
пустой цикл, реализующий временную задержку.
10 CIRCLE (320, 165), 40, 1: PAINT (320, 165), 1, 1
оператор CIRCLE рисует окружность, которую затем оператор PAINT заливает краской.
Тип переменных лучше объявлять только при необходимости, так как Бейсик, анализируя программу, сам это успешно делает. В начале программы обычно объявляются массивы (см. рекомендации к лабораторной работе № 3). Строковые переменные лучше объявлять с помощью суффикса $, например p$.
Ввод входных данных, в основном, осуществляется тремя способами: с помощью операторов READ и DATA (лабораторная работа № 1), INPUT (лабораторная работа № 2), из файла (лабораторная работы № 6). Еще один способ – с помощью оператора присваивания. Например, a = 2, где = и есть оператор присваивания. В левой части оператора присваивания может находится только имя той переменной, в которую будет заносится новое значение (и больше ни-
чего!). В правой части может находится: конкретное значение (число или символ, или строка – в зависимости от типа переменной), арифметическое или алгебраическое выражение, имя другой переменной, уже имеющей значение. Типы переменных в левой и правой частях оператора присваивания должны совпадать. Например:
40 y = 2 * x ^ 2 + 4 * x – SIN (x)
50 z$ = "верно"
Вывод результата на экран дисплея осуществляется в Бейсике посредством оператора PRINT, используемого практически в любой программе. Например, PRINT 8 выведет на экран 8. Перед отрицательным числом PRINT ставит знак минус, а перед положительным – пробел. Элементов в списке оператора PRINT может быть несколько. Оператор PRINT без списка элементов выводит на экран строку пробелов (пустую строку). Это иногда необходимо, например, для отделения заголовка таблицы от данных.
|
Оператор и его описание |
CLS Оператор очистки экрана. Если все аргументы опущены, очищаются и графический и текстовый экраны. |
CLS 1 Очищает только графический экран, если он активен |
CLS 2 Очищает только текстовый экран, исключая нижнюю строку |
RANDOMIZE 32767 – TIMER Оператор, запускающий генератор случайных чисел |
GOTO 20 Оператор безусловного перехода, здесь задает переход на строку 20 |
END Оператор-указатель конца программы, останавливает выполнение программы и закрывает все файлы. |
SLEEP Управляющий оператор, приостанавливающий выполнение программы до нажатия любой клавиши. |
SLEEP 2 Управляющий оператор, приостанавливающий выполнение программы на 2 секунды. |
REM Вся строка после оператора является комментарием Оператор, указывающий на комментарий. Вместо ключевого слова REM можно использовать апостроф ' При использовании REM в конце строки операторов его необходимо отделять двоеточием, а при записи с использованием апострофа, двоеточие можно опускать. |
PRINT 2*x ^ 2 + 1; (3 + 7) / (0.5 + 1.5); 3 Оператор при x = 2 вычислит и выведет на экран 9, затем 5 и 3 |
PRINT "Значение х = "; 2; TAB(15); 3; SPC(5); 4 Оператор выводит на экран Значение x = 2,в 15-й позиции 3 и, сделав 5 пробелов, выводит 4. |
Примечание:1. Операторы в многооператорной строке разделяются двоеточием. 2. При наборе программы можно вместо слова PRINT ставить знак ?, который затем Бейсик сам переделает в PRINT. 3. Если в программе впервые встречается какая-либо переменная, которой до этого не было присвоено никакого значения, то по умолчанию значение переменной будет равно 0. |
Если после оператора PRINT записано арифметическое или алгебраическое выражение, то оно будет вычислено, и результат будет выведен на экран. Например:
10 PRINT (10 – 5) / (1 + 1.5)
вычислит и выведет на экран 2.
10 READ y: DATA 5
20 PRINT 2 * y + 1, 10, 5
вычислит и выведет на экран 11, а затем выведет на экран 10 и 5 (в списке элементов оператора PRINT в строке 20 их 3).
Бейсик печатает результаты вычислений в виде десятичного числа (целого или с плавающей запятой), если эти результаты находятся в интервале от 0.01 до 999999. В остальных случаях Бейсик использует экспоненциальное представление. Например:
Вводимое значение Значение, печатаемое Бейсиком
.000789 7.89000E-04
.03 .03
999889 999889
2200000 2.20000E+06
Строка символов, выводимая на экран, состоит из 5 зон по 14 позиций в каждой зоне. Если элементы в списке оператора PRINT разделены запятыми, то каждый последующий элемент печатается в следующей свободной зоне. Когда последняя зона в строке заполнена, Бейсик продолжает печать с 1-й зоны следующей строки. Наличие в списке оператора PRINT двух рядом стоящих запятых вызывает пропуск одной зоны.
Разделение элементов списка оператора PRINT точкой с запятой позволяет выводить их в одной строке один рядом с другим (печать без перевода строки), а также печатать результат рядом с символьной строкой. Например:
10 READ y: DATA 5
20 PRINT "z = "; 2 * y + 1
выведет на экран z = 11.
Заключенные в кавычки строковые выражения, печатаются в том виде, в каком они представлены в операторе PRINT. Например:
10 READ y: DATA 3
20 PRINT "Площадь квадрата S = "; y ^ 2; "кв. см"
выведет на экран: Площадь квадрата S = 9 кв. см
В записанных в операторе PRINT выражениях возможно использование тригонометрических или иных функций, а также функций округления. Например:
10 READ y: DATA 3
20 PRINT CINT(2 * y ^ 2 / SIN (y)); 2 * y ^ 2 / SIN (y)
|
Число n | -1.99 | -1.5 | -1.01 | 1.01 | 1.5 | 1.99 | Примечание |
CINT(n) | -2 | -2 | -1 | Округление | |||
FIX(n) | -1 | -1 | -1 | Отсечение дробной части | |||
INT(n) | -2 | -2 | -2 | Ближайшее целое, меньшее или равное аргументу |
Вид вывода оператором PRINT может регулироваться с помощью функции TAB (n), где n – номер позиции печати. Например:
10 x = 2: y = 3: z = 4
20 PRINT TAB (7); x; TAB (18); y; TAB (23); z
выведет 2 в 7-й позиции, 3 в 18-й позиции и 4 – в 23-й. Если указана позиция, находящаяся левее текущей, то Бейсик игнорирует требование функции TAB..
Чтобы вывести таблицей элементы матрицы (двумерного массива), необходимо поставить оператор PRINT в двойной цикл.
40 FOR i = 1 TO 4
50 FOR j = 1 TO 3
60 PRINT m(i, j);
70 NEXT j
80 PRINT
90 NEXT i
Точка с запятой после m(i, j) в строке 60 позволяет вывести на экране в одной строке все элементы m(1, j). После чего PRINT из строки 80 обрывает экранную строку и 60 PRINT m(i, j); выводит уже на следующей экранной строке все элементы m(2, j), 80 PRINT обрывает 2-ю экранную строку и т.д.
Если же элементы массива могут быть, например, как однозначными числами, так и двузначными, то в строке 60 лучше использовать PRINT USING – оператор отформатированного вывода. В таблице 0.0.4 даны примеры использования этого оператора.
| ||
PRINT USING "Число ###"; 16 Выводит: Число 16, где # – позиция цифры | ||
PRINT USING "Число #"; 16 Выводит: Число # (переполнение)или %16 | ||
PRINT USING "Число +##"; 16 Выводит: Число +16, где + печатает знак минус для отрицательных чисел и знак плюс для положительных | ||
PRINT USING "Число $$####"; 16 Выводит: Число $16, где $$ печатает $ перед выводимым числом | ||
PRINT USING "Число **####"; 16 Выводит: Число ****16, где **заполняет звездочками места перед числом | ||
PRINT USING "Число **$####"; 16 Выводит: Число ****$16, где **$совмещает **и $$ | ||
PRINT USING "Ответ: #.### кг."; x Выводит: Ответ: 3.041 кг.для x = 3.0406 и Ответ: #.### кг.или %40.000 кг.для x = 40, где . (точка) – позиция десятичной точки | ||
PRINT USING "Ответ: #.##^^^^ кг."; x Выводит: Ответ: .30E+01 кг.для x = 3.0406 и Ответ: .40E+02 кг.для x = 40, где ^^^^ - позиция для печати степени (числа в экспоненциальном представлении или в так называемом научном формате) | ||
PRINT USING "!, &, \ \ , _&"; "Москва", "Москва", "Москва" Выводит: М, Москва, Мос, &,где ! – печать только первого символа, & - место для неограниченного строкового выражения, \ \ - печать первых n символов строкового выражения (n - число пробелов между косыми чертами + 2), _- следующий символ воспринимается не как управляющий, а как простой литерал | ||
Примечание: #, !, $ и др. – управляющие символы. Остальные символы в управляющей строке печатаются без изменений. |