14. Dáta v programe: DATA, READ, RESTORE

Na čo to je

Program často potrebuje zoznam hodnôt, ktoré sa nemenia: mená mesiacov, noty melódie, body obrázka. Namiesto dvadsiatich riadkov A(0)=12:A(1)=14… ich napíšeš za sebou do riadkov DATA a program si ich po jednej číta.

Ako sa to píše

Atari BASIC
DATA hodnota,hodnota,hodnota
READ premenná,premenná
RESTORE
RESTORE číslo riadka
SlovoVýznam
DATAzoznam hodnôt oddelených čiarkami; sám nič nerobí, len ich drží
READ Avezmi ďalšiu hodnotu zo zoznamu a ulož ju do A
RESTOREzačni čítať znova od prvého DATA v programe
RESTORE npokračuj čítaním od DATA na riadku n

Všetky DATA v programe tvoria jeden dlhý zoznam v poradí čísel riadkov. Program si pamätá, pokiaľ dočítal; každý READ vezme ďalšiu hodnotu.

Celý program

Súbor examples/data.abas:

Atari BASIC
10 REM DATA: values written in the program
20 DIM NAME$(10)
30 FOR I=1 TO 4
40   READ NAME$,AGE
50   PRINT NAME$;" is ";AGE
60 NEXT I
70 RESTORE 1010
80 READ NAME$,AGE
90 PRINT "Again: ";NAME$
100 END
1000 DATA Anna,12
1010 DATA Boris,15,Cyril,9
1020 DATA Dana,11

Preklad a spustenie

Basic26 data.abas --sim

Čo uvidíš

Anna is 12
Boris is 15
Cyril is 9
Dana is 11
Again: Boris

Ako to funguje

Typický vzor: naplnenie poľa

Atari BASIC
10 DIM TEMP(6)
20 FOR D=0 TO 6:READ X:TEMP(D)=X:NEXT D
30 DATA 12,14,11,17,19,16,13

Číta sa do pomocnej premennej X a tá sa uloží do poľa. Tak sa v kapitole 13 dali nahradiť dva riadky priradení.

Koniec zoznamu značkou

Keď nechceš počítať, koľko hodnôt v DATA je, daj na koniec hodnotu, ktorá sa inak nevyskytne, a čítaj, kým na ňu nenarazíš:

Atari BASIC
10 READ X
20 IF X=-1 THEN END
30 PRINT X
40 GOTO 10
50 DATA 5,8,13,21,-1

Časté chyby

Čo sa staloČo sa stane
READ a žiadne hodnoty už nie súERROR- 6 AT LINE 40
do číselnej premennej príde text (READ A a v dátach Anna)ERROR- 8
poradie v READ nesedí s poradím v DATAchyba 8, alebo sa číslo načíta ako text – program beží, ale s nezmyslami
text v úvodzovkách (DATA "Anna")úvodzovky sa stanú súčasťou textu
medzera za čiarkou (DATA Anna, Boris)druhé meno sa začína medzerou
RESTORE na riadok, za ktorým už žiadne DATA nie súerror B26006: there is no DATA at or after line 500

Vyskúšaj si

  1. Pridaj do DATA piatu osobu a uprav slučku.
  2. Prečítaj z DATA desať čísel a vypíš ich súčet.
  3. Napíš program, ktorý sa spýta na číslo mesiaca a z DATA vypíše jeho meno. (Čítaj mená v slučke a zastav sa pri správnom.)

Zhrnutie

Späť: 13. Polia · Ďalej: 15. Znaky a čísla