INTEGER eta REAL

LENGOAIAREN FUNTSEZKO ELEMENTUAK

Dakigunez programa bat sententzien multzo bat da, eta sententziak funtsezko elementuetan bana daitezke. Programa bateko sententzietan berezko esanahia duten elementu horiei literatura anglosaxoian token esaten zaie eta gainerako hizkuntzen hiztunok hitz hori inportatu egin dugu. Token arteko bereizketa egiteko, zenbaitetan, token bi artean banatzaileren bat jarri behar da, banatzailerik erabiliena zuriunea da baina tabuladorea eta orga-itzulera onargarriak dira ere.


Programa bat sententzien multzoa bada eta sententzia bat zenbait token bilduma dela onarturik, oso sinplistak izanik, programa bat hainbat token multzoa bezala ikus daiteke.


Hona hemen Turbo Pascal lengoaian emandako sententzia bat. Zertarako balio duen jakin gabe, bere itxura azter dezagun token ezberdinak identifikatuz:

Luzera := (Diametroa DIV 2) * PI ;


Sententzian agertzen diren tokenak 10 dira, banan-banan zerrendaturik hauek dira:

                          1. Luzera
                          2. :=
                          3. (
                          4. Diametroa
                          5. DIV
                          6. 2
                          7. )
                          8. *
                          9. PI
                          10. ;

Token sailkapena egitean, lau motatakoak ager daitezkeela jakin behar da:

1. Ikur bereziak edo sinboloak. Adibidez: := ) ( * eta ;

2. Identifikadoreak. Adibidez: Luzera Diametroa eta PI

3. Hitz erreserbatuak. Adibidez: DIV

4. Konstanteak. Adibidez: 2

Sententzian derrigorrezkoak diren banatzaileak bi dira: Diametroa eta DIV artean dagoen zuriunea batetik, eta bestetik DIV eta 2 artean dagoena. Hala ere, eta irakurgarritasuna zaintzearren beste zuriune batzuk tartekatu dira.

KONSTANTEAK

Programa batean aldatzen ez diren balioak konstanteak deitzen dira. Konstanteak programetan bi modutan ager daitezke, balioak zuzenki ager daitezke edo konstanteari lotu zaion identifikadore baten bitartez. Hurrengo adibideetan konstanteak ematen dira:

109 zenbakizko konstante bat (zenbaki osoa)

4.082 zenbakizko konstante bat (zenbaki erreala)

7E-2 zenbakizko konstante bat (zenbaki erreala)

Mkaraktere konstante bat

kaixo ! karaktereen kate konstantea

Hona hemen konstanteen erabilpena programa1 batean:

PROGRAM KonstanteaPantailaratzen ;

BEGIN

WriteLn (kaixo !) ;

END.

Programa honek, pantailaraketa bat eskatzen duen, agindu bakarra du. Programa exekutatzean ondokoa agertuko da pantailan:

kaixo !

_

Baina konstanteen balioak zuzenki erabili beharrean, askotan identifikadore batez izendatzen dira horretarako ondoko programa azal dezagun:

PROGRAM KonstanteakPantailaratzen ;

CONST

ADINA = 37 ;

ABIZEN_1 = Salazar;

BEGIN

WriteLn (ABIZEN_1, ===> , ADINA, urte) ;

END.

Aurreko programarekin alderatuz bigarren honek kontzeptu berri bi gehitzen dizkio lehenengoari. Batetik WriteLn bakar batek gauza bat baino gehiago pantailara dezakeela baldin eta parentesi barnean parametroak jarri eta komaz banatzen badira. Eta bestetik, nahiz eta WriteLn prozedurak dituen lau parametroak konstanteak izan modu ezberdinean erabili dira, ADINA eta ABIZEN_1 konstanteak explizitoki identifikadore banaz definitu dira (ondorioz, memorian 37 eta Salazarbalioak gorde dira).


Bigarren programaren pantailaraketa hau litzateke:

Salazar ===> 37 urte

_

Konstanteak definitzeko blokea CONST hitz erreserbatuaren bitartez markatzen da eta programaren hasieran jartzen da. Bloke horren bidez KonstanteakPantailaratzen izeneko programan 37 eta Salazarbalioak memorian gordetzen dira. Geroago, programan balioak erabili behar direnean bakoitzari dagokion identifikadoreaz erreferentzia egitea aski da. Kontutan izan, ohituraz konstanteen identifikadoreak maiuskuletan jartzen direla.


ALDAGAIAK

Programa baten exekuzioan datu batzuk ez dira aldatzen baina beste batzuek balio ezberdinak har ditzakete. Alda daitezkeen datuak aldagaien bitartez adierazten dira, eta funtsean aldagai batek memoriaren zati zehatz bat erabiltzea ahalbideratzen du.

Aldagaiak definitzeko ondoko lerroak idazten dira, VAR bloke batean aldagaien identifikadoreak eta aldagaien datu-motak agertuko dira:

VAR

Kontagailua : Integer ;

Erantzuna : Char ;

Aurkitua, Amaiturik : Boolean ;

Emaitza, ErroreMaximoa : Real ;

Ikus daitekeenez aldagaien identifikadoreak aukeratzerakoan, programadoreak maiuskulak eta minuskulak erabil ditzake. Adibidean dauden Integer, Char, Boolean eta Real identifikadore estandarrak datu-motak dira.


Hona hemen aldagai bat darabilen gure lehenengo programa:

PROGRAM AldagaiaPantailaratzen ;

VAR

Kontagailua : Integer ;

BEGIN

Kontagailua := 0 ;

WriteLn (Hasieran Kontagailua-ren balioa = , Kontagailua) ;

Kontagailua := 7 ;

WriteLn (Amaieran Kontagailua-ren balioa = , Kontagailua) ;

END.


VAR blokearen bitartez aldagaia definitu ondoren, programan hasierako balio bat ematen zaio eta balio hori alda daiteke programa exekutatzen den bitartean. Aldagai baten nozioa ez da ahaztu behar: aldagai oro datuak gordetzeko “kutxa” bat da, eta askotan kontzeptu bi nahastu egiten dira; batetik aldagaiaren identifikadorea eta bestetik aldagaiak memorian gordetzen duen datua; hau da, adibidearen lehenengo aldagaiari dagokion izena Kontagailua da eta hasieran gordetzen duen balioa 0 izan daiteke, baina programaren amaieran (aldagaieren identifikadorea berdina izanik) memoriko toki horretan kokaturik dagoen balioa 7 da. Balioak emateko := esleipen operazioa erabiltzen da.

Kontagailua

0

(programaren hasieran)



Kontagailua

7

(programaren amaieran)

Datuaren balioa memorian pilatzen dena da, hots, aldagaiaren edukia, eta esan den bezala programaren ibileran memoriko gelaska horietan gorde daitekeena balio ezberdinak izan daitezke. Aldagaiaren identifikadoreak berriz, memoriko helbidearen ideia ematen digu eta datua memorian gordetzeko (zein memoriatik eskuratzeko) lana betetzen du, dakigunez memoriko gelaska baten helbidea aldaezina da. Horrelakoxea da programaren exekuzioa:

Hasieran Kontagailua-ren balioa = 0

Amaieran Kontagailua-ren balioa = 7

_

WriteLn prozedurak bi parametro ditu konstante bat lehena eta aldagai bat bigarrena, konstanteak idatzirik dauden bezala agertzen dira baina aldagaia pantailaratzerakoan aldagaiaren balioa erakutsi behar du WriteLn prozedurak. Aldagaia bera da, lehenengo zein bigarren WriteLn prozeduratan daudenak (helbide bera memorian, baina ez edukiera berdina: hasieran 0 eta 7 amaieran).

INTEGER DATU-MOTA: ZENBAKI OSOAK

Bost dira aurredefiniturik dauden datu-mota osoak: Shortint, Integer, Longint, Byte eta Word. Datu-mota bakoitza zenbaki osoen multzo bat dela onar daiteke, eta ondoko taulan datu-mota bakoitzeko multzoaren behemuga eta goimuga biltzen dira:


Zenbaki osoen heina


Gure ariketa gehienetan Integer, Longint eta Byte datu-motak erabiliko ditugu eta goimugak gogoratu behar izatea ekidin asmoz, Turbo Pascal lengoaiak aurredefiniturik ditu MAXINT eta MAXLONGINT konstanteak.



Datu-mota osoek ezagutzen dituzten operazioak hamabi dira (sei operadore aritmetiko eta erlaziozko beste sei operadore). Operadore aritmetikoak, aurreratu denez, sei dira eta adierazpen aritmetikoak sortzeko ezinbestekoak dira. Adierazpen aritmetiko batean konstanteak, aldagaiak eta funtzioen emaitzak eragile aritmetikoen bitartez konbinatzen dira, esate baterako ondoko adibidean ematen den adierazpen aritmetikoan agertzen diren tokenak 12 dira (aldagai biren identifikadoreak, konstante bi, funtzio baten identifikadorea eta horiek konbinatzen dituzten hiru eragile aritmetiko eta parentesi sinboloak).


(Diametroa DIV 2) * PI + abs(Tentsioa)


Hurrengo taulan zenbaki osoekin erabil daitezkeen sei eragile aritmetikoak biltzen dira:


Eragile aritmetikoak

Sei eragile horien artean hierarkia bat dago, lehenengo biak batuketaren familiakoak dira eta azken hirurak biderkaketa familia osatzen dute, ukatzaile berezeiagoa da eta isolaturik bezala kontsideratuko dugu. Adierazpen aritmetikoak konplexuak eta luzeak izan daitekeela kontutan izan dezagun, horrelakoetan biderkaketa familiako eragileak lehentasuna daukate batuketa familiako eragileen aurrean eta ukatzailea guztien aurretik dago. Horregatik ondoko adierazpen aritmetikoan eragiketak zenbakien ordenez burutuko dira:


Eragileen lehentasuna

Dagoen ukatzailea aplikatuko da aurrena, beraz A identifikadorerari dagokion balioaren ukapena egiten da. Gero biderkaketak egingo dira, ukapenaren bitarteko emaitza hori eta B identifikadorerari dagokion balioen arteko biderkadura lortzen da; ondoren C eta D arteko zatiketa osoa kalkulatzen da eta honi E-k balio duena biderkatzen zaio. Amaitzeko batuketak osatuko dira, 2 gehi 4 alde batetik eta 5 ken F bestetik eginez.


Adibidean ikus daitekeenez familia bereko eragiketak ezkerretik eskuinerantz burutzen dira, eta azkenean adierazpen aritmetiko batek emaitza bakar bat eskainiko du (eragigai guztiak zenbaki osoak direnez eta eragileak zenbaki osoen operadoreak direnez, emaitza ere zenbaki osoa izango da).

Familien arteko lehentasuna aldatzeko parentesiak erabiltzen dira. Hona hemen eragileen lehentasun arauak:

  1. Lehenengo parentesi arteko azpiadierazpenak ebaluatzen dira. Parentesiek beste parentesi kabiatuak barneratzen badituzte, sakonago dauden azpiadierazpenak lehenik ebaluatuz kanporantz abiatuko gara.
  2. Eragilearen ordena, dakigunez, familiaren arabera ordenatzen da (ukapena aurrena, biderkaketak ondoren, eta, batuketak amaitzeko).
  3. Lehentasun bereko eragileak aurkitzean, ezkerrean daudenak ebaluatzen dira lehenago eta ondoren eskuinean daudenak ebaluatuko dira.

Jarraian, OsoenAdierazpenAritmetikoak programaren bitartez Emaitza aldagaiaren balioa kalkulatzen da. Programa hori oinarritzat harturik eta ondoko aldaketak eginez, kasu bakoitzean aterako litzatekeen emaitzaren balioa lehenik igarri eta ostean kalkulatu:

-(Diametroa DIV 2) * R - (T MOD R + (4 * S)) - Diametroa DIV 3

- Diametroa DIV 2 * R - (T MOD R + 4 * S) - Diametroa DIV 3

-(Diametroa DIV (2 * R) - (T MOD (R + 4) * S) - Diametroa DIV 3

-(Diametroa DIV 2) * R - (T MOD R + 4 * S)) - Diametroa (DIV 3)

-(Diametroa DIV 2) * R - (T MOD R + (4 * S)) - Diametroa DIV 3

-(Diametroa / 2) * R + (T MOD R + (4 * S)) - Diametroa DIV 3

- Diametroa DIV 2 * R + (-T MOD R + 4 * -S) + Diametroa DIV -3


Hauxe da OsoenAdierazpenAritmetikoak programaren kodifikazioa:

PROGRAM OsoenAdierazpenAritmetikoak ;

CONST

R=4 ;
S=5 ;
T = 27 ;

VAR

Diametroa, Emaitza : Integer ;

BEGIN

Diametroa := 33 ;

Emaitza := -(Diametroa DIV 2) * R - (T MOD R + 4 * S) - Diametroa DIV 3 ;

WriteLn (Emaitza = , Emaitza) ;

END.


Diametroa eta konstanteen balioak aintzat harturik Emaitza aldagaian gordetzen dena adierazpen aritmetikoa ebaluatuz lortzen da. Honela: bi parentesi daude eta biak maila berekoak, beraz ezkerrean dagoena ebatziko da lehenago.


-(16) * R - (T MOD R + 4 * S) - Diametroa DIV 3


DIV eragileak zenbaki osoen zatiketa ematen duenez 33 zati 2 hamasei eta erdi da, baina emaitza osoa izan behar duenez 16arekin geratzen gara. Gainerako hondarra lortzeko MOD eragilea aplikatuko litzateke.


MOD eta DIV


Eta bigarrena gero. Bigarren parentesia ebaluatzean, biderkaketa familiako eragiketak batuketa familiakoaren aurretik burutzen dira azkenean 23 emanez:

-(16) * R - (3+20) - Diametroa DIV 3


MOD eragileak zenbaki osoen zatiketaren hondarra ematen duenez 27 zati 4 sei baino gehiago da. Geratzen den hondarra 27-(4*6) = 3 litzateke.


DIV eta MOD


Ondoren ukapena burutuko da: -16 * R - 23 - Diametroa DIV 3


Orain biderkaketa familiako eragiketak egingo dira. Ezkerragora dagoen biderkaketa lehenik eta zatiketa osoa geroago.

-64 - 23 - Diametroa DIV 3

-64 - 23 - 11


Amaitzeko, batuketa familiako eragiketak (ezkerretik eskinera ere).

-87 - 11

-98


Zenbaki osoekin adierazpen aritmetikoak sortzeaz gain, adierazpen boolearrak ere sor daitezke. Adierazpen boolear baten emaitzak bi balioen artean bat izango du (horregatik adierazpen boolearrei adierazpen logiko esaten zaie), Turbo Pascal lengoaian adierazpen boolear batek FALSE ala TRUE balioak har ditzake. Erlaziozko eragileak aritmetikoen ostean ebaluatzen dira. Hurrengo taulan osoekin erabil daitezkeen erlaziozko sei eragileak biltzen dira:


Erlaziozko eragiketak
REAL DATU-MOTA: ZENBAKI FRAKZIONATUAK
     

Zenbaki frakzionatuak lantzeko Turbo Pascal lengoaiak Real izeneko datu-mota eskaintzen du. Datu-mota honetako aldagaiek 6 byte hartzen dituzte memorian, eta horietan berretzailea eta mantisa (zeinua eta modulua) gordeko dira. Real batek duen heina 2.9x10-39-tik 1.7x1038-ra doana da, eta dituen digitu esaguratsuak 11 edo 12 dira.


Zenbait programetan, dointasuna edo/eta moduluaren mugak Real izeneko datu- motarenak baino handiagoak behar izanez gero Turbo Pascal lengoaiak datu-mota erreal hedatuak ditu. Horiek erabiltzeko ordenadoreak koprozesadorea edukiko du, edo duela simulatu beharko da. Hona hemen Turbo Pascal 7.0 datu-mota errealen taula:


Errealen heina


Zenbaki errealak idazteko Turbo Pascal lengoaiak modu bi onartzen ditu. Lehenengoan alde osoa puntua eta alde zatigarria idazten da, adibidez hamahiru eta erdi jartzeko 13.5 jarriko litzateke. Bigarren idazkeran (modu zientifikoa delakoan) hamahiru eta erdi jartzeko 1.35E+01 idatziko litzateke, non E ostean dagoena hamarreko berretzailea den eta aurrean dagoena mantisa den.

Ordenadorearen memorian K kopuru frakzionatu bat adierazteko kode bitarrean egingo da. Horretarako eta Real datu-mota adibidetzat harturik, Real bati dagozkion 6 bytak (48 bit) eremuka banatzen dira:


zeinua, mantisa, berretzailea


Datu-mota errealek ezagutzen dituzten operazioak aritmetikoak eta erlaziozkoak dira. Lehenengoek, adierazpen aritmetikoak, formula matematikoak idazteko balio dute, eta erlaziozko eragileak berriz, adierazpen logikoak sortzeko erabiltzen dira. Ondoko tauletan biltzen dira operadore horiek:


Eragiketak


Eragile horiek dituzten lehentasun arauak zenbaki osoek dituztenak berberak dira. Operadore aritmetikoekin, konstanteekin, aldagaiekin eta parentesiekin adierazpen aritmetikoak sortuko dira, eta Turbo Pascal lengoaiak sintaxi zehatz bat exigitzen du. Ondoko zerrendan formula matematikoak eta dagozkien Turbo Pascal token egokiaz osaturiko adierazpenak agertzen dira (lehentasun arauek eskatu ez arren, zenbaitetan eta irakurgarritasuna errazteko asmoz, soberan egon daitezkeen parentesiak jartzen dira):


Parantesiak


Eragile aritmetiko eta eragigaien arteko bateragarritasuna. Dagoenekoz zenbaki osoak eta zenbaki frakzionatuak adierazteko datu-motak ikasi ditugu, eta datu-motarekin batera memoriko biltegitze sistema bat eta onargarriak diren eragiketak definiturik daude. Orain arteko espresio aritmetikoetan zenbaki osoak eta zenbaki errealak erabili ditugu baina talde bakoitza bere aldetik eta nahastu gabe. Adierazpen aritmetiko batek, ikusi dugunez, balio bakar batera ebaluatzen da, adierazpen aritmetikoaren eragigaietan datu-mota ezberdinak agertzen direnean espresioak hartzen duen balio bakar hori adierazpen aritmetikoaren emaitza izango da eta honen datu-mota ere bakarra izango da.


Eragigaien konpatibilitatea edo bateragarritasuna lege batez gidatzen da: bi eragigai arteko operazio batean eragigai bat datu-mota batekoa izanik eta beste eragigaia beste datu-mota batekoa izanik, emaitzari dagokion datu-mota eragigaien bi datu-motetatik garaiena5 izango da.


Lege horren ondorio bezala, ondokoa baiezta daiteke: bi eragigai arteko operazio bat egitean eragigai biak datu-mota berekoak direnean, emaitzaren datu-mota eragigaiena izango da; baldin eta operazioak berak kontrakorik behartzen ez badu. Eragile aritmetikoen eta euren eragigaien konpatibilitatea taula bezala jarririk hau litzateke:


Bateragarritasuna


Eragile eta eragigaien bateragarritasuna lantzeko asmoz hona hemen ariketa bat:

PROGRAM Datu_motenBateragarritasuna ;

VAR

Eragigai1, Eragigai2 : Integer ;

BEGIN

Eragigai1 := 32 ;

Eragigai2 := 17 ;

WriteLn (Batuketaren emaitza = , Eragigai1 + Eragigai2) ;

END.

Datu_motenBateragarritasuna programa honetan zenbaki osoak diren aldagai bi definitu dira, WriteLn egitean adierazpen aritmetiko bat (batuketa bat) burutu eta dagokion emaitza pantailaratuko da, eragigaiek dituzten balioetarako pantailaraketa 49 izango da (zein eragigaiak bezala Integer datu-mota den). Programa hori abiapuntuz harturik ondoko aldaketak egin eta emaitzak (edo errore mezuak) interpretatu:

  1. Eragiketa aldatu. Batuketa kalkulatu beharrean gainerako beste eragileak aplikatu (-, *, /, DIV eta MOD)
  2. Eragigai biren datu-mota Real izan dadila. Eragigai biak errealak izanik, zenbaki errealen eragile guztiak aplikatu
  3. Eragigai bat Real bezala mantendu bestea Integer izan dadila. Emaitzak aztertzean bigarren puntukoak berberak izango dira
PARAMETRO IZATEAN JOKAMOLDEA

Bai Integer zein Real datu-mota sinplea izanik azpiprograma batean honela agertuko da jokamoldearen arabera:
  • Irteerakoa denean VAR marka izango du aurrean
  • Sarrerakoa denean ez du inolako markarik izango
ADIBIDEAK

Hona hemen Integer zein Real datu-motako zenbait programa:
INTEGER eta REAL Boli Koloreko Banatzilea BOOLEAN Boli Koloreko Banatzilea CHAR Boli Koloreko Banatzilea STRING Boli Koloreko Banatzilea ARRAY Boli Koloreko Banatzilea RECORD Boli Koloreko Banatzilea FILE
Azken aldaketa: osteguna, 2013(e)ko abuztuaren 29(e)an, 10:53(e)tan