6. Premenné: BYTE, CARD, INT, CHAR

Na čo to je

Premenná je pomenované miesto v pamäti, do ktorého si program odloží hodnotu, aby ju mohol neskôr použiť alebo zmeniť. Bez premenných by program vedel len vypisovať to, čo máš napísané v zdrojáku.

Ako sa to píše

Premennú treba najprv deklarovať – povedať, ako sa volá a aký druh hodnoty v nej bude:

Action!
BYTE age
CARD year, score          ; viac premenných toho istého typu, oddelené čiarkou
INT  temperature
CHAR grade
BYTE lives=[3]            ; premenná, ktorá má hodnotu hneď od začiatku

Druh hodnoty sa volá typ. Action! má štyri základné:

TypVeľkosť v pamätiAké hodnotyNa čo sa hodí
BYTE1 bajt0 až 255malé čísla: vek, počet životov, súradnica na obrazovke
CHAR1 bajt0 až 255jeden znak; je to to isté ako BYTE, len meno hovorí, že ide o znak
CARD2 bajty0 až 65535väčšie čísla bez znamienka: rok, skóre, adresa
INT2 bajty−32768 až 32767čísla, ktoré môžu byť záporné

CARD je skratka z cardinal (číslo bez znamienka), INT z integer (celé číslo).

Hodnotu do premennej vloží priradenie: meno=hodnota.

Deklarácie patria na začiatok procedúry, pred prvý príkaz.

Celý program

Súbor examples/variables.act:

Action!
; Variables of the four basic types

PROC Main()
  BYTE age                   ; 0 to 255
  CARD year                  ; 0 to 65535
  INT  temperature           ; -32768 to 32767
  CHAR grade                 ; one character
  BYTE lives=[3]             ; a variable with a value from the start

  age=12
  year=1983
  temperature=-5
  grade='A

  Print("Age: ")          PrintBE(age)
  Print("Year: ")         PrintCE(year)
  Print("Temperature: ")  PrintIE(temperature)
  Print("Grade: ")        Put(grade) PutE()
  Print("Lives: ")        PrintBE(lives)

  age=13                     ; a variable can change
  Print("Next year: ")    PrintBE(age)
RETURN

Preklad a spustenie

action26 variables.act --sim

Čo uvidíš

Age: 12
Year: 1983
Temperature: -5
Grade: A
Lives: 3
Next year: 13

Ako to funguje

Ako vybrať typ

Časté chyby

Čo sa staloČo povie prekladač alebo program
premenná nie je deklarovaná, alebo je v mene prekleperror ACT008: undeclared name 'ag'
deklarácia až za príkazomerror ACT006: declaration error: declarations must come before the statements
chýba čiarka medzi menami (BYTE a b)chyba na prvom príkaze, ktorý premennú použije
hodnota sa do typu nezmestí (age=300)warning ACT215: value 300 does not fit into a BYTE; v premennej bude 44
INT t a t=40000prekladač mlčí; v premennej bude −25536
BYTE lives=3 bez hranatých zátvoriekprekladač mlčí – a je to niečo celkom iné

Posledný riadok je najzákernejší. BYTE lives=3 nedá premennej hodnotu 3. Znamená „premenná lives leží v pamäti na adrese 3“. Na to sa hodí pri práci s pamäťou počítača (kapitola 24), ale začiatočník tým prepíše niečo, čo patrí systému. Počiatočná hodnota sa píše vždy do hranatých zátvoriek: BYTE lives=[3].

Premenná, ktorej si nič nepriradil, má po nahraní programu hodnotu 0. Nespoliehaj sa na to – keď program spustíš druhýkrát bez nového nahrania, ostane v nej to, čo tam bolo naposledy.

Vyskúšaj si

  1. Pridaj premennú CARD score s počiatočnou hodnotou 1000 a vypíš ju.
  2. Zmeň temperature na typ BYTE a pozri, čo sa vypíše pri temperature=-5. (Použi PrintBE. Vyjde 251 – BYTE záporné čísla nemá.)
  3. Priraď do grade znak 'B a potom číslo 66. Líši sa výpis?

Zhrnutie

Späť: 5. Čísla, znaky a texty · Ďalej: 7. Počítanie