Главная » Basic » ОПЕРАТОРЫ READ И DATA

0

Оператор DATA является средством запоминания ограниченного  числа данных в самой программе и имеет определенные преимущества по отношению к присваиванию значений констант оператором LET. Данные извлекаются   из операторов DATA оператором READ. В качестве примера приведем следующую программу".

10   REM ДЕМОНСТРАЦИЯ ДЕЙСТВИЯ  ОПЕРАТОРОВ   READ-DATA

20   READ А, B, C

30   PRINT   А, В, С

40   REM

50   DATA   3, -2, 45

60   END RUN

3                                  -2                                45

END   AT   LINE   60

В качестве значения А берется первый элемент списка  в операторе DATA, в качестве значения В — второй, в   качестве значения С  —  третий. Оператор  DATA  можно  указывать  в   любом  месте программы, так как при  передаче управления  эти операторы обходятся. Их назначение — создать запас значений для чтения оператором READ. Действия приведенной выше программы совершенно не изменятся, если удалить из  нее строку 50 и  поместить оператор DATA в  любое другое место, например, под номером 5.

Так как в программе допускается несколько операторов DATA, то для удобства чтения рекомендуем группировать  все операторы DATA в начале или в конце программы.

4.4.1.  УПОТРЕБЛЕНИЕ ОПЕРАТОРОВ DATA

Вообразите, что существует указатель, показывающий на самое начало списка данных в  операторе DATA. В приведенном выше примере оператор READ   присваивает переменной А  первое число  из списка данных в операторе DATA (т. е. 3) и перемещает указатель на следующее число (—2) .

Каждое действие  в операторе READ состоит   в присваивании переменной того значения, на которое показывает текущий указатель. Так, если указатель показывает на  —2  и  очередной переменной является В, то этой переменной будет присвоено значение —2 и  указатель переместится на одну позиции).

Если указатель достиг конца оператора DATA и  затребованы оператором READ новые данные, то либо указатель перемещается на начало списка дан-

ных следующего оператора DATA, либо, если такого оператора нет, выдается сообщение о нехватке данных, например:

10   READ A,B,C,D,E,F,G,H,I

20   DATA 14,32,96,78,3,11

30   DATA 303,411,9999

Хотя  операторы  DATA  можно  указывать в   любом  месте  программы, полезно  группировать  их вместе, так  как  они связаны в   том  смысле, что  как  только оператор READ  покончит с  одним оператором  DATA,  он  примется за  следующий оператор  DATA  с  большим номером.   Очень распространенная ошибка состоит в несовпадении   между числом значений, требуемых одним  или несколькими операторами READ, и числом значений, распределенных по многим операторам DATA. Такую ошибку гораздо легче выявить, если все операторы DATA собраны вместе.

Операторы READ и DATA полезны для хранения в программе данных, не изменяющихся от запуска к  запуску.  Они также  очень  полезны  для  присваивания  начальных  значений переменным  или массивам.  Обратимся к программе преобразования  числа из  подразд. 4.3.1: используя операторы READ и DATA, строки 50—140 можно заменить на цикл

50   FOR K=0 TO 3 60      FOR L = 1 ТО 3 70        READ R$(K,L)

80     NEXT L

90    NEXT К

дополненный операторами

100  DATA I,V,X,X,L,C,C

110   DATA D,M,M,,,

Учтите, что,  как  и   в   случае  оператора  INPUT,  при указании  строковых значений кавычки не обязательны и оператор

50   DATA "ФРЕД","ДЖИМ" имеет тот же эффект, что и оператор 50   DATA ФРЕД, ДЖИМ

Обычно строка заключается в кавычки   только в  случае, если в  нее должна входить запятая. Так,

оператор

50   DATA "ФРЕД, ДЖИМ" задает одно строковое значение ФРЕД, ДЖИМ.

Операторы READ и DATA

Общая форма записи: READ переменная1, переменная2,.. .

Оператор READ последовательно присваивает очередные значения из списка данных  оператора

DATA переменным: переменшя1, переменная2 и т. д.

Общая форма записи:                           ,

DATA значение!, зшчение2,...

В операторе DATA  через запятую указываются константы (как числовые, так и  строковые),

значения которых присваиваются переменным, перечисленным в операторе READ.

4.4.2.  ОПЕРАТОР RESTORE

Воображаемый указатель на значение  из списка данных оператора DATA можно вновь установить на начало списка первого оператора DATA с помощью оператора RESTORE (восстановление), который можно указать в любом месте программы. Для изучения его действия изменим пример программы, данный в  начале разд. 4.4, добавляя строки 12, 25, 28 и  изменяя строку 30 так, чтобы получилась следующая программа:

I0 REM ДЕМОНСТРАЦИЯ ДЕЙСТВИЯ ОПЕРАТОРОВ READ-DATA

12 REM И RESTORE

20 READ А,В,С

25   RESTORE

28   READ D,E,F

30 PRINT A,B.C,D,E,F

40 REM

50 DATA 3,-2,45

60 END RUN

3                                   -2                               45                                3

-2                                45

END AT LINE 60

Указанный  в   ней  оператор  RESTORE  позволяет новому оператору  READ  в   строке  28  заново прочитать значения, перечисленные в операторе DATA на

строке 50.

Приведенная  ниже программа иллюстрирует практическое  приложение операторов READ, DATA и RESTORE; она запоминает фамилии,  адреса и  распечатывает адрес, соответствующий  введенной фамилии.  Обратите внимание  на  использованный в   структограмме  символ "ПОВТОРЯТЬ  ДО": аналогичная структура уже применялась в  программе из подразд. 4.2.5. В программе должны быть учтены две возможности: либо достигается  конец списка фамилий и адресов в операторе DATA, либо  в этом списке обнаруживается фамилия, совпадающая  с введенной. В последнем случае переменная F полагается равной 1 и исполнение цикла завершается.

Обратите внимание  на то, что операторы DATA на диаграмме не изображены: в  структограммах изображаются только операторы, выполняющие какие-либо действия. Сама программа такова:

10 REM ПРОГРАММА ПОИСКА ФАМИЛИЙ И АДРЕСОВ

20 REM  (В ОГРАНИЧЕННОМ ЧИСЛЕ)

30 REM P ПОЛАГАЕТСЯ РАВНЫМ ЧИСЛУ ФАМИЛИЙ И АДРЕСОВ 40 REM

50 Р=5

60 PRINT "ВВЕДИТЕ ФАМИЛИЮ";

70 INPUT N$

80 I=0

90 F=0

100  I=I+1

110   READ A$.B$

120   IF N$=A$ THEN F=1

130   IF I<P AND F=0 THEN 100

140 IF F=1 THEN 170

150 PRINT "АДРЕС НЕ ИЗВЕСТЕН"

160 STOP

170 PRINT B$

180 DATA УИЛСОН,126 PALACE ROAD LONDON

190 DATA АРДЕН.5 OXFORD STREET LIVERPOOL

200 DATA ЭЛТИ.94 WATER STREET WALLASEY

210 DATA ДЖОНС,2 SCOTLAND ROAD BRIGHTON

220 DATA СМИТ,42 KEITH PLACE YORK

230 END RON

ВВЕДИТЕ ФАМИЛИЮ ?СМИТ

42 KEITH PLACE YORK END AT LINE 230

RUN

ВВЕДИТЕ ФАМИЛИЮ ? УОЛТОН АДРЕС НЕ ИЗВЕСТЕН

END AT LINE 230

Для удобства чтения каждая пара фамилия-адрес  указана в  отдельном операторе DATA, но такая запись не обязательна. Поскольку фамилии  и адреса никак не упорядочены, то в программе применен самый элементарный метод поиска. При небольшом числе данных (менее 100 элементов) метод поиска не имеет особого значения, так как время полного просмотра списка данных

невелико.

Запускать  программу  заново для  получения новой справки  —  скучное  занятие. Гораздо  лучше организовать цикл, изображаемый  следующей структограммой:

При реализации внутреннего прямоугольника  приведенную выше программу надо слегка изменить для удаления операторов STOP и END. Текст этих  и остальных изменений таков:

5 RESTORE

160 GOTO 230

230 НЕМ КОНЕЦ ПОИСКА

240 PRINT "ПРОДОЛЖИТЬ";

250 INPUT A1$

260 IF А1$="ДА" THEN 5

270 END

Действие  оператора   RESTORE   состоит   в     перемещении  перед   началом   каждого   поиска воображаемого указателя  значения на  начало  списка данных  первого оператора  DATA.  Между применением операторов READ-DATA и работой с файлами данных существует тесная взаимосвязь. Чтобы преобразовать программу для работы с последовательным файлом данных, в  нее  требуется внести очень небольшие  изменения, если не считать добавления нескольких инструкций или команд, обеспечивающих доступ программы к файлам. Например, в системе с Бейсиком для ЭВМ ICL 2903/4 некоторые операторы для работы с файлами при указании специальных  параметров имеют  тот же эффект, что и операторы READ, DATA и RESTORE.

Таким образом, использование операторов READ-DATA служит   введением  в работу с файлами. В некоторых языках программирования, например в  Паскале, файлы рассматриваются как еще один тип "объектов", которыми может манипулировать программа, и  для выполнения  этих манипуляций существуют особые операторы. Полное описание  файлов дается в  гл. 8, а только что сделанные комментарии завершают обзор  "объектов", которыми программист может  воспользоваться при работе с Бейсиком.

4.5.  СОРТИРОВКА И ПОИСК

На темы сортировки   и поиска написано очень много литературы. Настоящий раздел может служить не  более чем  введением  с  целью очертить некоторые основные направления  и  дать достаточно хорошие примеры методов общего назначения. Мы будем предполагать, что данные содержатся во внутренней памяти в массиве,  что подразумевает наличие небольшого или умеренного числа данных. Большие файлы данных, хранящиеся на магнитных лентах или  дисках, требуют других  методов сортировки  и поиска; представление об этих методах дается в гл. 8.

Сортировкой является такая перестановка элементов (в массиве),   после которой они оказываются упорядоченными требуемым образом. Примером  сортировки служит упорядочение по алфавиту. Поиск заключается в отыскании  элемента (в массиве), значение которого совпадает с ключом поиска. Примером поиска служит отыскание элемента данных, включающего  фамилию и адрес, по заданной фамилии.

Вначале рассмотрим сортировку, так как эффективный поиск опирается на то или иное  упорядочение данных. Если данные никак не упорядочены, то единственным способом поиска требуемого значения является последовательная  проверка каждого элемента данных, что и  было продемонстрировано на примере в подразд. 4.4.1.

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

Источник: Уолш Б.    Программирование на Бейсике: Пер. с англ. М.: Радио и связь, 1988. 336 с: ил.

По теме:

  • Комментарии