Az előző fejezetet ott fejeztük be, hogy négy (tulajdonképpen
öt) alapműveletet tárgyaltunk az egész
számok halmazán. Most áttekintünk
néhány változótípust, köztük a "real"-t is, ami a leggyakrabban
használt valós változó.
Egészszámváltozók
típusnév
helyfoglalás (bájt)
maximális értelmezési tartomány
byte
1
0—255
shortint
1
-128—127
word
2
0—65535
integer
2
-32768—32767
longint
4
-2147483648—2147483647
Valósszámváltozók
típus
értékkészlet
értékes számjegyek
helyfoglalás(byte)
single
1,5*10-45—3,4*1038
7—8
4
real
2,9*10-39—1,7*1038
11—12
6
double
5,0*10-324—1,7*10308
15—16
8
comp
-2-64+1—263-1
19—20
8
extended
3,4*10-4932—1,1-104932
19—20
10
A valós változóknál nem használható a div és mod művelet,
csak az osztás.
Szöveges típusok
típus
értelmezési tartomány
helyfoglalás(byte)
char
1 karakter
1
string
1—255 karakter
1—256
Láthatod, hogy annak ellenére, hogy a "string" 256 bájtot használ
el, maximum 255 karaktert tud tárolni. Ez azért van, mert az első
bájt, amit nem ír ki, a karakterlánc hasznos (kiírandó) bájtjainak
mennyiségét tartalmazza.
Logikai típus
Ilyen csak egy van, ezért semmi értelme nincs
annak, hogy táblázatba foglaljam. Ez az egy a "boolean". Értéke
két féle lehet: "true" és " false", azaz igaz és hamis. Összesen
egy bájtot foglal el a memóriából.
Mutató (pointer) típus
Erre most nem térek ki bővebben, de fontos
megemlítenem, hogy mi is ez. Amint a neve mutatja, mutat
valahova. Hogy hova is? A memóriában egy címre (helyre), azaz
segít a memóriában elérni adatokat.
Egy demonstráló program
Programunk bekéri a neved, köszönt, bekéri a korod, végül
számol egy alsó, meg egy felső határt az életedből eltelt
napokból.
program
valtozok;
uses crt;
var
nev:string;
kor:byte;
{Nem
árt, ha a var címszó alatt található összes változót
ugyancsak bennebb kezdjük. Próbáld ki annélkül is. Ugye
mennyivel átláthatóbb?}
begin
writeln('Mi a kereszteved?
'); readln(nev);
writeln('Szia ',nev,'!
Hány éves vagy?'); readln(kor);
write('Ha nem számoltam
el, akkor te nem kevesebb, mint ',kor*255.25,' napja
születtél, de még nem vagy ',(kor+1)*255.25,' napos.');
Hupsz. A számok helyett valami egészen más értelmetlen
szöveget írt ki a gép. Ez az alapértelmezett
valósszám-ábrázolása a gépnek, amin tudunk változtatni. A gép
azért így jelenítette meg a számot, mert tizedes számmal
szoroztam be.
Mivel vannak olyan nevek, hogy a hajam égnek áll tőle, olyan
hosszú, ezért nem mondom, hogy fejleszteni lehet a programot, de
azt meg lehet oldani, hogy kevesebb memóriát használjon. Eddig
256 bájtot foglalt a memóriában a név. Most kevesebbet fog.
Akkor lássuk a progit!
program
valtozok2;
uses crt;
var
nev:string[20];
{Ez a szögletes zárójelbe tett
20-as azt jelenti, hogy csak 20 karakternyi lehet
maximum a bejegyzett név, tehát 21 bájtot foglal a
memóriából.}
kor:byte;
begin
writeln('Mi a kereszteved?
'); readln(nev);
writeln('Szia ',nev,'!
Hány éves vagy?'); readln(kor);
write('Ha nem számoltam
el, akkor te nem kevesebb, mint ',kor*255.25:8:2,' napja
születtél, de még nem vagy ',(kor+1)*255.25:8:2,'
napos.');
{Bebiggyesztettem még két-két számot pontosvesszőkkel
elválasztva. Az első szám azt jelenti, hogy a szám
összesen hány karaktert foglal el (beleértve a tizedes
előtti számok mennyiségét, a tizedespontot, ami egy
karakter és a tizedespont utáni számjegyeket), a második
pedig, hogy hány tizedes pontossággal jelenjen meg. Ha
így marad üres hely abból a 8 karakterből, akkor azok a
szám elejére kerülnek.}