2023(e)ko otsailaren 4(a), larunbata

BOOLEAN datu-mota





















SARRERA




Aintzinako Grezian arrazonamenduaren sistematizazioa lortu zen. Geometria aztertzeko axiomak erabiliz egiten zen Grezia klasikoan. Beraz, esate baterako, zirkuluaren propietateak ikasteko esperimentuak eta neurketak egin beharrean, grekoek zirkuluaren definizio formala eginez dagokion geometriaren dedukzio-sistema bat eraiki zuten.






Αριστοτέλης (Aristoteles)




Era berean, garai hartako pentsatzaileek baliozko arrazonamendua nola egin zitekeen sakonki ikertu zuten (izan ere, hizkuntza naturala zalantzagarria izaten da zenbaitetan). Aristoteles (Mazedonia, K. a. 384 - Eubea, K. a. 322) filosofoak logika formala sortu zuen eta bere lanek XIX. mendean jarraipena izan zuten. Aristotelesek proposatu zituen arrazoiketa zuzenaren legeak lau dira, hauek:


  1. Identitate legea: P→P (P↔P)   (P proposizioa berdin-berdin P proposizioa)

  2. Ukazio bikoitzaren legea: ⊣⊣P→P   (⊣P proposizioa ukatua P proposizioa da)

  3. Tercio Exclusoren legea: P∨⊣P   (P proposizioa egia da ala gezurra da, bitarteko aukerarik gabe)

  4. Ez-kontraesanaren legea: ⊣(P∧⊣P)   (P proposizioa eta ⊣P proposizioa elkar baztertzaileak dira)



P proposizio-logikoa "Egarriak nago" bada, lau lege horiek honela ulertzen dira:

  1. P→P (P↔P)   "Egarriak banago, orduan egarriak nago"

  2. ⊣⊣P→P   "Egarriak ez nagoela egia ez bada, orduan egarriak nago"

  3. P∨⊣P   "Egarriak nago ala ez nago egarriak"

  4. ⊣(P∧⊣P)   "Ez da egia aldiberean egarriak nagoela eta egarriak ez nagoela"


Aristotelesen lanei jarraipena emanez, George Boole matematikari eta filosofoak, 1847 urtean, proposizio-logikaren hedapena lortu zuen. Adierazpen aritmetikoen eta adierazpen logikoen arteko paralelismoa aurkitu zuen Boolek, hori dela eta, AND eta OR eragile logikoek x eta + eragile aritmetikoekin duten parekotasuna handia dela frogatu zuen. Jakina da adierazpen aritmetikoek ahalmena daukatela zenbakiak eta kopuruak maneiatzeko, modu beretsuan Boole-ren Algebrak proposizioak (esaldiak) zuzentasunez eta doitasunez maneiatzeko ahalmena du.






George Boole




Boole-ren Algebra zertan den jakiteko blogeko artikulu hau irakur dezakezu Boole-ren Aljebra (kontsultarako ikas-materiala).




Boole-ren funtsezko ideia izan zen argumentazio logikoak sinboloen bitartez ordezkatzea. Jarraian ematen diren esaldiak bi balio onartzen dituzte gezurra ala egia, horregatik proposizio-logikoak (edo laburrago, proposizioak) izango dira:
  • Zenbaki naturalen artean negatiborik ez dago
  • Auto gehienen erregaia alkohola da
  • 4+6=15
  • Hiru bider lau hamabi dira
  • Esaldi hau proposizio bat da
  • Ez dugu bukatu
Goian aipaturiko esaldiak proposizioak dira, baina horien maneiaketa errazteko aldagai sinbolikoen bitartez ordezkatzen dira, aldagai horien datu-mota Pascal goimailako lengoaian Boolean deitzen da.

DEFINIZIOA

Datu-mota boolearren bitartez definituriko konstanteek edo/eta aldagaiek bi balioetatik bat har dezakete. Aldagai edo konstante boolear batek FALSE ala TRUE balio dezake, baina ez besterik. Beraz, datu-mota boolearrek duten heina 2 da, eta zentzu fisikorik izan ez arren FALSE balioa TRUE balioa baino txikiagoa da:
      FALSE < TRUE    { konbentzio edo hitzarmen hutsa, besterik ez da }

Aldagai boolearrak deklaratzeko Boolean hitz erreserbatua erabiliko dugu. Esan bezala, aldagai boolear batek har ditzakeen balioak FALSE eta TRUE dira, adibidez boNegatiboaDa aldagaiaren edukia TRUE izan daiteke. FALSE eta TRUE balio horiekin erabakiak hartu ahal izango dira programan.

Aurreko adibidearekin jarraituz, gure programan holako zerbait idatz daiteke:
  IF boNegatiboaDa THEN       { baldin eta boNegatiboaDa TRUE bada,  }
WriteLn('Negatiboa') ; { ondokoa egin: testu bat pantailaratu }
boNegatiboaDa aldagaiaren edukia TRUE bada, hauxe erakutsiko litzateke pantailan:
  Negatiboa
boNegatiboaDa aldagaiaren edukia FALSE bada, pantailan ez litzateke idazketarik egingo.

Aurreko adibidearekin jarraituz, gure programan holako hau idatziko bagenu:
  IF NOT boNegatiboaDa THEN     { baldin eta boNegatiboaDa TRUE ez bada, }
WriteLn(boNegatiboaDa) ; { boNegatiboaDa-ren edukia pantailaratu }
boNegatiboaDa aldagaiaren edukia FALSE bada, hauxe erakutsiko litzateke pantailan:
  FALSE
boNegatiboaDa aldagaiaren edukia TRUE bada, pantailan ez litzateke idazketarik burutuko.

BOOLEARREN ERAGILEAK

Boolearrak diren datu-motek onartzen dituzten eragiketak bi taldetan sailkatzen dira, batetik eragile logikoak deitzen direnak, eta bestetik ezagunak diren erlaziozko eragileak. Berriak diren eragile logikoei begirada bat eman diezaiegun:

Besteek, erlaziozko eragileak, sei dira eta aurrerago esan dugunez, lehen lau eragileek zentzu fisikorik ez dute eragigai boolearrekin (edozein kasutan ere, erlaziozko eragileen bitartez sortzen diren adierazpenak ebaluatzeko FALSE balioa TRUE balioa baino txikiagoa dela gogoratu). Datu-mota boolearrekin erabiliko ditugun erlaziozko eragileak azken biak izango dira, = eta <> alegia:

ADIERAZPEN BOOLEARRAK

Pascal lengoaiaren eragile logikoak lau dira, eta eragigaiak eragileekin elkar lotuz adierazpen logikoak eraikiko dira, hots, FALSE ala TRUE balioetatik bat hartuko duten adierazpenak.

A eta B eragigai boolearrak izanik, proposizioak izanik, eragile logikoak aplikatu eta ondorioztatzen den adierazpen bakoitzari dagokion emaitza taula batean antolantzen da, horri egia-taula esaten zaio. Egia-tauletan agertuko diren emaitzak egiazkoak (e) ala gezurrezkoak (g) izan daitezke:

Ikusten denez, NOT eragileak A-ren balioari dagokion aurkakoa lortzen du. Beste hiru eragileek eragigai bi darabiltzate. Banan banan ikus ditzagun:
  • Konjuntzioa, A AND B adierazpena egia izan dadin eragigai biek TRUE balio behar dute.
  • Disjuntzioa, A OR B adierazpena egia izan dadin nahikoa da eragigai bietarik batek TRUE balio izatea.
  • Disjuntzio elkarbaztertzailea, A XOR B adierazpena egia izan dadin sarrerako eragigaiak desberdinak izango dira elkarrekiko (bat TRUE bada bestea FALSE izan dadila).
Disjuntzio elkarbaztertzailearen beharra justifikatzeko adibide hau azal dezagun: Amak umeari honela esaten dionean “piszina edo zinema”, bien artean bat aukeratu behar duela ulertzen da, hots, piszinara joan ala bestela zinemara. Argi dagoenez disjuntzio logiko arruntaren egia-taulak ez dio disjuntzio elkarbaztertzailearen egoera horri egoki erantzuten, horretarako A XOR B disjuntzioa dago, eta dagokion emaitza egia izango da sarrera biak desberdinak direnean.









AND
eta OR eragileen ukatuak NAND eta NOR dira, hona hemen NAND eragilearen azalpen bat:






Baina freepascal lengoaiak ez dituenez ez NAND ez NOR eragileak onartzen, A NAND B eragiketaren baliokidea den NOT(A AND B) erabiliko beharko genuke. Modu beretsuan, A NOR B eragiketaren emaitza lortzeko NOT(A OR B) idatzi beharko genuke.




ERAGILE BOOLEARREN LEHENTASUNA

Lau eragile logiko horien artean hierarkia bat dago, eta operadore aritmetikoen antzera familietan sailka daitezke: ukatzailea logikoa alde batetik, disjuntzio biek batuketaren familia osatzen dute eta konjuntzioa biderketa familia litzateke.

Adierazpen logikoetan eragileak konbinatzen direnean, ukatzailea ebaluatzen da lehen, ondoren, eta ordena zainduz, konjuntzio eragilea eta batuketa logiko familiako disjuntzioekin amaitzeko.

Orain arte aipatu ditugun eragile guztien (aritmetikoak, logikoak eta erlaziozkoak) lehentasuna jarraian laburbiltzen da:

Ez da ahaztu behar familien arteko lehentasuna aldatzeko parentesien bitartez egiten dela. Eta lehentasun bereko eragileak adierazpen batean aurkitzean, ezkerragora agertzen den eragiletik hasten dela adierazpenaren ebaluazioa.

Jarraian agertzen diren adierazpen logikoen emaitzak iruzkin bezala jarri dira. Baldin eta rX=12.4, rY=37.0, rZ=0.1 eta boOrdenaturik=FALSE orduan:
   (rZ < rX) AND (rY >= 21)         { Egia }
(rZ < rX) AND boOrdenaturik { Gezurra }
rZ < (rX AND rY) >= 21 { Errorea: 12.4 AND 37.0 }
rZ < rX AND rY >= 21 { Aurreko errore bera }
NOT boOrdenaturik { Egia }
(rX >= rY) OR ((rY-4) >= rZ) { Egia }
rX > 12.4 { Gezurra }
boOrdenaturik AND TRUE { Gezurra }
boOrdenaturik XOR TRUE { Egia }
ARITMETIKA VS. LOGIKA

Dakargun berriro gure begietara SARRERA izeneko atalean esandako hau:
George Boole matematikari eta filosofoak, 1847 urtean, proposizio-logikaren hedapena lortu zuen. Boolek adierazpen aritmetikoen eta adierazpen logikoen arteko paralelismoa aurkitu zuen, hori dela eta, AND eta OR eragile logikoek x eta + eragile aritmetikoekin duten parekotasuna handia dela frogatu zuen. Adierazpen aritmetikoek zenbakiak eta kopuruak maneiatzeko ahalmena dute, modu beretsuan Boole-ren Algebrak proposizioak (esaldiak) zuzentasunez eta doitasunez maneiatzeko ahalmena du.
   Zenbazkizko   
aldagaia
1.   VAR iZbk : Integer;  { Zenbakia deklaratu }
2. iZbk := 1; { Konstante bat esleitu }
3.  iZbk := -iZbk; { Aldagaiaren ukapena }
4.  ReadLn(iZbk); { Zenbakia irakurri }
5. iZbk := iZbk + 1; { Adierazpen aritmetiko bat }
6. IF iZbk > 0 THEN { Ados baina, adierazpen aritmetikoa? }
Aldagai
boolearra
1.   VAR boAmaiturik : Boolean;           { Boolearra deklaratu }
2. boAmaiturik := FALSE; { Konstantea esleitu }
3. boAmaiturik := NOT boAmaiturik; { Aldagaiaren ukapena }  
4.   ReadLn(boAmaiturik); { EZIN DA EGIN }
5. boAmaiturik := boAmaiturik OR TRUE; { Adierazpen logikoa }
6. IF boAmaiturik THEN { Adierazpen logikoa }





PARAMETRO IZATEAN JOKAMOLDEA

Datu-mota boolearra sinplea izanik, azpiprograma batean honela agertuko da jokamoldearen arabera:
  • Irteerakoa denean VAR marka izango du aurrean
  • Sarrerakoa denean ez du inolako markarik izango
ADIBIDEAK

Aldagai boolearrak lantzeko, programa hauek ikusi:
















INTEGER REAL BOOLEAN CHAR STRING ARRAY RECORD FILE





 

iruzkinik ez:

Argitaratu iruzkina