Переменные и массивы в Бейсике
Одним из основных направлений использования ЭВМ является накопление и обработка данных - различных таблиц, справочников, словарей и другой информации, большую часть которой занимают не столько числовые, сколько символьные данные.
В Бейсике для обработки и хранения символьной информации используются символьные переменные и массивы. Все переменные и массивы в Бейсике принадлежат к одному из трех основных типов:
а) вещественные;
б) целочисленные;
в) символьные.
Если в программе на языке Бейсик нет описаний типов переменных и массивов, то все они считаются вещественными.
Для вычисления целочисленных переменных в начале программы должен быть записан оператор DEFINT. Например, оператор
DEFINT I, J, K, L
Данный оператор объявляет, что все переменные и массивы, начинающиеся с букв I, J, K, L, будут принимать целочисленные значения.
Второй способ получения в языке Бейсик переменных и массивов с целочисленными значениями - приписывание к имени символа процента: %. Примеры: N%, K% - это имена целочисленных переменных.
Для выделения символичных переменных и массивов в программах на Бейсике можно использовать оператор DEFSTR. Пример:
DEFSTR S, P, Q
Этот оператор объявляет, что у все переменных и массивов, имена которых начинаются с букв S, P, Q, значениями будут символьные строки.
Другой способ описания переменных и массивов с символьными значениями состоит в приписывании к их именам символа «солнышко»: ¤ или знака доллара: $. Примеры, С¤, S$, L¤ - это символьные переменные.
Значениями символьных переменных в Бейсике могут быть комбинации любых символов, имеющихся в машинном алфавите, длиной не более 255 знаков.
Примеры команд над символьными переменными.
Команды: N = «Марина» ¿ ? «Привет,»; N ¿ | Результаты: Привет, Марина |
Основными операциями над символьными данными являются сцепление слов и выделение подслов. Эти две операции позволяют образовать новые слова и выделять отдельные буквы и части слов.
Сцепление слов в Бейсике обозначается знаком «+». Пример сцепления: «про» + «грамм» + «а» - результатом этого сцепления будет слово «программа». Проверим на ЭВМ.
Команда: ? «про» + «грамм» + «а» ¿ | Результат: программа |
Для выделения подслов в Бейсике предусмотрена специальная функция MID ¤ (S¤ , K, L), где S¤ - символьная переменная или элемент символьного массива. Здесь К - начало, L - длина выделяемой части слова. Пример выделения подслова:
? MID («информатика», 3, 5) ¿
Результатом будет слово «форма», которое содержит 5 символов и входит в слово «информатика», начиная с 3-й буквы.
Массивы в языке Бейсик описываются с помощью специального оператора DIM - оператора описания размерности (DIM - сокращение то слова DIMENSION - размерность).
Примеры описания одномерного и двумерного массивов:
DIM V (10), DIM XY (2, 12)
В этих описаниях в скобках указываются верхние границы массивов. Отметим, что в Бейсике отчет индексов начинается с 0. В качестве размеров массивов язык Бейсик разрешает указывать не только константы - 10, 20, 30 и т. п., но и переменные - N, M и т. д. Но переменные, используемые в описаниях массивов, должны получать конкретные значения до выполнения оператора DIM. Пример описания массива с переменными размерами:
N = 4; M = 3; DIM A (N, M)
В качестве простейшего примера применения массивов рассмотрим программу формирования и печати таблицы умножения:
АЛГ «ТАБЛИЦА УМНОЖЕНИЯ» НАЧАРГ t [1: 9, 1: 9]: ЦЕЛ ОТ К= 1 ДО 9 ЦИКЛ ОТ L= 1 ДО 9 ЦИКЛ t (K, L): = K * L ВЫВОД (t (K, L)) КЦИКЛ ВЫВОД (НОВАЯ СТРОКА) КЦИКЛ КОН | 10 ¢ таблица умножения 20 DIM T% (9, 9) 30 FOR K = 1 TO 9 40 FOR L = 1 TO 9 50 T% (K, L) = K * L 60 PRINT T% (K, L); 70 NEXT L 80 PRINT 90 NEXT K 100 END |
Главную роль в этой программе играет 20-й оператор, в котором описывается двумерный массив Т [0:9, 0:9]. В этом массиве могут храниться 100 целых чисел. Заполнение элементов этого массива и вывод их на экран в форме таблицы умножения проводятся в этой программе парой вложенных циклов.
Внутренний цикл по L от 1 до 9 формирует и выводит на экран строки таблицы умножения. Знак точки с запятой в операторе PRINT T% (K, L); означает, что следующее число будет выводиться на той же строке экрана. Оператор PRINT без аргументов означает перевод курсора на новую строку экрана. Тем самым подготавливается вывод следующей строки таблицы умножения, который осуществляется внешним циклом по К то 1 до 9.
Массивы в программах используются для организации и обработки различных таблиц и других совокупностей данных. Рассмотрим в качестве примера алгоритм и программу анализа успеваемости в группе.
Для этой задачи данные об успеваемости в машинной памяти могут быть представлены двумя массивами. Фамилии студентов могут быть помещены в массив символьной информации фам [1:30]:симв, а оценки студентов, например, по трем дисциплинам - в двумерный массив оц [1:25, 1:3] с целочисленными данными. Описания этих массивов в Бейсике будут такими:
N = 30: M = 3: DIM FM (N), OC % (N, M)
Заполнение массивов осуществляется либо вводом данных с клавиатуры, либо путем их заблаговременной записи в память ЭВМ. В программах на Бейсике таблицы и другие совокупности данных могут записываться в тексте программ с помощью операторов данных.
Рассмотрим пример описания данных в программе на Бейсике для нашей задачи со следующими конкретными данными:
ДАН «ОБ УСПЕВАЕМОСТИ» НАЧ КРЫЛОВ, 5, 5, 5 РУДАКОВ, 4, 5, 5 ИВАНОВ, 3, 3, 3 КОН | 1000 ¢ данные об успеваемости 1010 DАТА Крылов, 5, 5, 5 1020 DАТА Рудаков, 4, 5, 5 1030 DАТА Иванов, 3, 3, 3 1040 DАТА ¤, 0, 0, 0 |
В этом примере первые три оператора DATA описывают первые три строки таблицы успеваемости. Далее можно будет добавить любое число новых строк. Последний оператор с номером 1040 служит признаком конца табличных данных. В каждой строке операторов DATA через запятые перечисляется некоторая последовательность числовых и символичных значений. В приведенном примере в каждой строке должны указываться фамилии и три числа - три оценки студента.
Обработка этих последовательностей в данных программах на Бейсике проводиться с помощью операторов READ. Это операторы последовательного чтения данных, записанных в программе в операторах DATA. В нашем конкретном примере чтение данных об студентах можно проводить оператором
READ F¤, O1%, O2%, O3% - читать (фам, о1, о2, о3)
Выполнение этого оператора приведет к тому, что в переменную F¤ будет записана фамилия «Крылов», а переменные О1%, О2% и О3% будут записаны пятерки. Для чтения следующей, второй строки данных оператор READ должен быть выполнен повторно. Для считывания третьей строки данных - в третьей раз и т. д.
Таким образом, обработку таблиц и совокупностей данных приходится выполнять в циклах. Рассмотрим типичный алгоритм последовательной обработки данных - алгоритм и программу на Бейсике, решающие задачу выделения студентов, имеющих хотя бы одну пятерку.
Алг «студенты с пятерками» нач арг фам [1:30] симв оц [1:30,1:3] цел вывод пятерки имеют L:=0 читать (f, 01, 02, 03) пока f # «*» цикл если 01 = 5 или 02 = 5 или 03 = 5 то вывод (f, 01, 02, 03) L:= L+1 кесли читать (f, 01, 02, 03) кцикл если L = 0 то вывод никто кесли кон дан « об успеваемости» нач . . . . . . . . . . . . . . . кон | 10 ‘ студенты с пятерками 20 N=30 : DIM FM$ (N ) 30 DIM OC % ( N, 3 ) 40 PRINT «пятерки имеют:» 50 L = 0 60 READ F$, 01%, 02%, 03% 70 IF F$ = «¤» THEN GO TO 140 80 IF 01%<>5 AND 02%<>5 AND 03%<>5 THEN GO TO 110 90 PRINT F$; 01%; 02%; 03% 100 L = L + 1 110 ‘ кесли 120 READ F$, 01%, 02%, 03% 130 GO TO 70 140 ‘ кцикл 150 IF L = 0 THEN PRINT «никто» 160 END 1000 ‘ данные об успеваемости 1010 DATA . . . . . ... ... ... ... ... ... ... ... ... ... 1500 DATA ¤, 0, 0, 0 |
Для решения в дальнейшем и других задач обработки данных об успеваемости в данную программу вставлены два массива: массив фамилий и массив оценок. Для описания размера этих массивов используется переменная n = 30, значение которой при необходимости может быть изменено.
Рассмотрим логику работы этой программы. Чтение данных об успеваемости проводится в 60 - м и 120 - м операторах. В 60 - м операторе считывается первая строка таблицы. Далее в 70 - м операторе проверяется, не достигнута ли последняя строка таблицы. Если это не так, то анализируются прочитанные оценки студента. Обратите внимание: в алгоритме записано условие «О1 = 5 или О2 = 5 или О3 = 5», а в программе закодировано его отрицание «О1 =/= 5 и О2 =/= 5 иО3 =/= 5».
Цикл чтения и обработки данных прекращается, как только в переменной F$ окажется знак ¤. После этого будет проведён анализ числа выявленных студентов, и если ни у кого не окажется пятёрок, то ЭВМ выведет соответствующее сообщение.
Работу с данной программой на ЭВМ лучше всего начать с ввода операторов 50 и 150 для вывода сообщений. Далее можно по частям проверить средства описания и чтения таблицы. Прежде всего, ввести оператор 1010 со своей фамилией и последними оценками по физике, математике и информатике. Затем ввести оператор 60 – чтение этой строки данных и операторы 90, 50, 100 – вывод на экран введённых данных и подсчёта числа выведенных фамилий. После этого можно дать команду на выполнение введённой части программы.
После проверки этих операторов необходимо ввести операторы 80 и 110 – операторы анализа данных и точку соответствующего перехода. Затем ввести вторую и конечную строки таблицы – операторы 1020 и 1500, операторы 120, 130 и 70 – ввода следующей строки данных, переход к началу цикла и анализ конца введённых данных. Теперь введённая часть программы уже может ввести любую таблицу с данными и выделить всех студентов, имеющих пятёрки.
После проверки этой части программы в неё осталось ввести её конец – оператор 160, заголовок – оператор 10, описания массивов – операторы 20 и 30 – и ввести остальные данные об успеваемости. Теперь можно с проверками добавлять новые и новые строки таблицы данных об успеваемости вплоть до завершения ввода и получения окончательного результата.
Вопросы и упражнения и задания для самопроверки
1. Получите на ЭВМ с помощью операций сцепления и выделения подслов новые слова из слова:
а) электрификация б) индустриализация
в) компьютеризация г) информатизация
2. Введите и отладьте на ЭВМ программу формирования выбранной таблицы чисел.
3. Составьте таблицу успеваемости в своей группе по выбранным трём дисциплинам и подготовьте план ввода и испытаний своей программы. Введите и испытайте программу на ЭВМ в соответствии со своим планом. По завершении отладки введите пробную часть составленной таблицы успеваемости и после этого введите всю таблицу.
4. Составьте алгоритм и программу выбора студентов, имеющих только пятёрки и четвёрки.
5. Составьте алгоритм и программу выбора лиц, имеющих только положительные оценки.
6. Какие операции над словами можно проводить в Бейсике?
7. Какова длина символьных строк в Бейсике?
8. Как в программах на Бейсике описываются символьные данные?
9. Как в программах на Бейсике описываются массивы?
10. Как в программах на Бейсике организуются таблицы?
11. Как считываются данные из операторов DATA?
12. Подберите слова, которые можно получить из частей слова:
а) электрификация б) индустриализация
в) компьютеризация г) информатизация
13. Составьте алгоритм и программу формирования таблицы:
а) сложения чисел б) вычитания чисел
в) деления чисел нацело г) модуля разности чисел
14. Составьте алгоритм и программу выбора всех отличников по заданной таблице успеваемости.
Диалоговые программы
Одним из назначений языка Бейсик является создание простейших диалоговых программ для персональных ЭВМ: моделирующих и обучающих программ, диалоговых справочников, игр и т.д. По существу, язык Бейсик позволяет получать на персональных ЭВМ всё многообразие функций и форм предоставления информации, имеющееся в этих машинах.
Выбор вариантов функций и других возможностей в диалоговых программах обычно организуется в форме меню. Примером использования меню в организации диалога человека с ЭВМ служит следующая программа построения абстрактных картинок из всевозможных, случайных точек, отрезков и рамок:
Нач вывод вывод вывод вывод запрос ,V запрос ,N графика если V = 1 то рисунок из точек кесли если V = 2 то рисунок из отрезков кесли если V = 3 то рисунок из рамок кесли кон | 10 , абстрактная живопись 20 PRINT «абстрактные картинки» 30 PRINT «1. Из точек» 40 PRINT «2. Из отрезков» 50 PRINT «3. Из рамок» 100 INPUT «Ваш выбор: « :V 110 INPUT «элементов = « :N 120 , графика 130 IF V = 1 THEN GOSUB 200 ' из точек 140 IF V = 2 THEN GOSUB 400 ' из отрезков 150 IF V = 3 THEN GOSUB 800 ' из рамок 190 END |
Построение отдельных картинок должно осуществляться вспомогательными алгоритмами и соответствующими подпрограммами, начинающимися с номеров 200, 400 и 600. Пример алгоритма построения картинок из случайных точек «звёздное небо» приводился раньше. Поэтому здесь приведены только алгоритм и подпрограмма рисования картинки из случайных отрезков:
Алг «Рисунок отрезков» Арг n: цел Нач cm = 3 xm = 255; ym = 191 от К = 1 до n цикл x = xm случайное (0,1) y = ym случайное (0,1) x1 = xm случайное (0,1) y1 = ym случайное (0,1) с = сm случайное (0,1) отрезок (х, у) – (х1, у1), с кцикл кон | 400 ' рисунок из отрезков 410 ' n – число отрезков 420 СМ = 3 430 ХМ = 255; УМ = 191 440 FOR K= 1 TO N 450 X = XM * RND (1) 460 Y = YM * RND (1) 470 X1 = XM * RND (1) 480 Y1 = YM * RND(1) 490 C = CM * RND(1) 500 LINE (X, Y) – (X1, Y1), C 510 NEXT K 520 RETURN |
Представленный алгоритм и программу легко расширить, добавляя новые вспомогательные алгоритмы и подпрограммы для рисования новых картинок. При этом нужно добавлять новые строки в меню и в соответствующие операторы вывода сообщений и выбора подпрограмм.
В создании диалоговых программ важен также подбор наиболее простых правил и команд управления работой ЭВМ. В наиболее удачных программах команды управления представляются отдельными символами и знаками, имеющимися на клавиатуре.
Вопросы, упражнения и задания для самоконтроля
1. Как можно организовать добавление новых частей в программу на языке Бейсик?
2. Проведите отладку на ЭВМ программы «абстрактная живопись».
3. Составьте программу проверки знаний арифметических действий на языке Бейсик и проведите отладку программы на ЭВМ.
4. Составьте диалоговый алгоритм проверки знания обозначений первых 20 элементов таблицы Менделеева.