Orrialdeak

2016-03-31

25. astea | haiku, gehiago

Haiku jatorrian japonierazko olerki mota bat da, 5-7-5 silabako lerroetan antolatutako 17 silabek osatua. Emaniko esaldi bat haikua den ala ez frogartzen duen programa egin dezagun, hau da, 24. astea | haiku ariketari jarraipena demaiogun sarrerako katean hiru esaldien arteko banatzailerik ez dagoela.

24. astea | haiku ariketan bezala gure programaren lehen bertsioan ez da diptongorik emango sarrerako esaldi nagusian, baina programaren bigarren bertsioak diptongoekin lan egiteko gaitasuna izango du.


Lehen programa

 

Udazkena da,
milaka txori hegaz
bat izan ezik


Aztertu beharreko haikua string batean jasorik daukagu eta sarrera horrek haikuaren formalismoa betetzen duen izango da programaren emaitza. Hau da, sarrerako kateak hiru esaldi izan behar ditu eta esaldi bakoitzean 5, 7 eta 5 silaba hurrenez hurren.

Adibidez, hona hemen haiku desberdinak nola eman zaizkion gure programari:

    Udazkena  da,    milaka   txori   hegaz  bat  izan  ezik   
5, 7, 5 bokal eta 5, 7, 5 silaba --> sarrerako katea haiku bat da

   Udazkena  da,  XYZ  milaka   txori   hegaz  bat  izan  ezik   
5, 7, 5 bokal eta 5, 7, 5 silaba --> sarrerako katea haiku bat da

Bertan ikus daitekeenez, teklatuaren bitartez ematen den sarrerako datuaren ezaugarriak honako hauek dira:
  1. Diptongorik ez dagoela, eta ondorioz silabak zenbatzeko aski da bokalen kopurua ezagutzea
  2. Soberazko zuriuneak egon daitezke sarrerako kate nagusian, bai katearen aurretik zein atzetik zein hitzen artean
  3. Bokalik gabeko hitzak egon daitezke, adibidez XYZ hitza edo WMW hitza
  4. Sarrerako katea bat izanik, ez dago inolako banatzaile berezirik haikuaren hiru esaldien artean  


Sarrerako karaktere-katea irakurrita ondoko lanak eskatzen dira algoritmo hau jarraituz:
  1. Sarrerako esaldi nagusia txukundu, hau da, esaldiaren aurrean zein atzean soberan egon daitezkeen zuriuneak kendu eta hitzen artean soberan egon daitezkeen zuriuneak kendu (adibidez fnsEsaldiaTxukundu funtzioaren bitartez)
  2. Txukundutako esaldi nagusia garbitu, hots, txukundutako esaldiari bokalik gabeko hitzak kendu (adibidez fnsEsaldiaGarbitu funtzioaren bitartez)
  3. Esaldi nagusiaren bokal kopurua 17 ez bada mezua eta programa bukatu, esaldi nagusiaren bokal kopurua 17 bada hurrengo puntuetan adierazitako egin
  4. DM_sKate50 datu-motako 3 kate biltzeko arrayarekin lan eginez, esaldi nagusiaren hitzak arrayaren dagozkien posizioetara eraman (jarraian datozen irudietan kolore larrosaz adierazitakoa). Beraz, txukundu eta garbitutako katetik abiatuta: lehen 5 silabak osatzen dituzten hitzak arrayaren 1. posizioan kokatu, hurrengo 7 silabak osatzen dituzten hitzak arrayaren 2. posizioan kokatu, eta,  azkenengo 5 silabak osatzen dituzten hitzak arrayaren 3. posizioan kokatu:
    • 4.1.    Haikuaren lehenengo esaldia zehaztu (adibidez Haikuaren_1_Esaldia prozeduraren bitartez). Hainbat hitz eta guztien artean 5 bokal, errorerik ez badago lehenengo esaldi hori arrayaren lehen posizioan gorde. Errorea gertatu bada zein hitzetan suertatu den adierazi eta programa bukatu
    • 4.2.    Haikuaren bigarren esaldia zehaztu (adibidez Haikuaren_2_Esaldia prozeduraren bitartez). Hainbat hitz eta guztien artean 7 bokal, errorerik ez badago bigarren esaldi hori arrayaren bigarren posizioan gorde, eta, prozesatu gabe geratu den esaldiaren zatia haikuaren hirugarren esaldia denez hirugarren esaldi hori arrayaren hirugarren posizioan gorde. Errorea gertatu bada zein hitzetan suertatu den adierazi eta programa bukatu
    • 4.3.    Haikuaren esaldiak zehaztean errorerik ez bada gertatu, arrayaren edukia pantaialartu (adibidez HaikuaErakutsi prozeduraren bitartez) eta programa bukatu

Programaren irteerak jarraian erakusten dira:

Algoritmoaren 3. urratsa gogoratuz silabak/bokalak 19≠5+7+5 direnez, esaldi nagusia ez da haiku bat

Hurrengo hiru irteeretan esaldi nagusiaren silabak 17 dira guztira, baina beti ez da gordetzen 5+7+5 banaketa:

Sarrera haiku bat da eta arrayaren hiru elementuak bete daitezke, lehen bi elementuen silabak/bokalak 5+7=12 dira eta ondorioz hirugarren elementuaren silaba/bokal kopurua 5 izango da, guztira 5+7+5=17

Sarrera ez da haiku bat arrayaren 1. elementua ezin delako egoki bete 7 silaba baitira

Sarrera ez da haiku bat eta arrayaren 2. elementuak huts egiten duelako 5+8≠5+7


Hau duzu StringArrayHaikuDiptongorikEz.exe lehen bertsioaren programa exekutagarria. Eta hauxe da lehen bertsioaren iturburu-programa:
 [esteka hau oraindik ez dabil]



Bigarren programa

 

Udaberriko
euria da hodeien
negar alaia


Baina, diptongoak ditugunean bokalen kopurua ez dator bat silaben kopuruarekin. Horregatik jarraian erakusten diren haiku hauek okertzat emango ditu aurreko algoritmoa darabilen programak: 

   XYZ  Neguko   hotza  goimendiko    elurra,     zure babesa   
5, 8, 5 bokal eta 5, 7, 5 silaba --> sarrerako katea haiku bat da

   Ni zoraturik     haizeak darabilzu   XYZ   adatsa      dantzan
5, 8, 5 bokal eta 5, 7, 5 silaba --> sarrerako katea haiku bat da

Haizearekin     zure    adatsa    dantzan   ni   liluratuz   
6, 7, 5 bokal eta 5, 7, 5 silaba --> sarrerako katea haiku bat da

   XYZ  Inaurria beltz   langilea ere beltz XYZ  denak esklabu  
6, 7, 5 bokal eta 5, 7, 5 silaba --> sarrerako katea haiku bat da

    Udaberriko  XYZ  euria  da   hodeien    negar  alaia  XYZ   
5, 9, 6 bokal eta 5, 7, 5 silaba --> sarrerako katea haiku bat da

Hemen dituzu euskarazko sei diptongoak [au] [eu] [ai] [ei] [oi] [ou] eta programaren bigarren bertsioak elkarketa hauek aintzakotzat hartuko ditu.

Bigarren programa honetan lehen bertsioaren algoritmo bera erabil datiteke, baina hitzaren silabak zenbatzean ezin daiteke onartu bokalen kopuruarekin bat datorrenik. Horregatik, hitz edo esaldi baten silabak zenbatzeko urratsak hauek dira:
  1. Hitzaren bokalak zenbatu iBokalKopurua lortuz
  2. Hitzaren diptongoak bilatu iDiptongoKopurua eskuratuz
  3. Hitzak dituen silaba kopurua kalkulatu kenketa hau burutuz: iBokalKopurua-iDiptongoKopurua  

Hau duzu StringArrayHaikuDiptongorikBai.exe bigarren bertsioaren programa exekutagarria. Eta hauxe da bigarren bertsioaren iturburu-programa:
 [esteka hau oraindik ez dabil]

iruzkinik ez:

Argitaratu iruzkina