Enuntziatua
Lehen faseko Biziaren Jokoa programarekin jarraituko dugu. Biziaren Jokoa simulagailu bat da, eta, dakigunez, gizarte bat irudikatzen du. Gizarteak 20x20=400 kide ditu eta bakoitzari taula baten gelaxka dagokio. Kideak 20x20 array bateko posizioak dira, nahiz eta kalkuluak egin ahal izateko 22x22 neurriko taula bat beharko dugun. Kide jakin batek hiru egoera izan ditzake:
- Hilda egotea, gelaxka horren tokia hutsik balego bezala da. Gelaxka bat hutsik dagoela (edo bere kidea hilik dagoela) adierazteko -1 balioa erabiltzen da.
- Kutsatuta egotea. Gelaxka baten kidea gaixorik dagoela adierazteko 0 balioa erabiltzen da.
- Bizirik egotea. Gelaxka baten kidea osasuntsu dagoela adierazteko +1 balioa erabiltzen da.
Biziaren Jokoa simulagailuan abiapuntua, gizartearen hasierako egoera bat da. Gizartearen egoera orokorra, gizarteko kide guztien egoren bilduma da. Gizartearen hasierako egoera TaulaDatuzBete prozedurak ematen du zorizko balioak lortuz. Ikusi, simulagailu programaren egikaritze batean eskuratu den gizartearen hasierako egoera:
Irudi 1. Programan 22x22 array bat erabiliko da: gizartea adierazteko 20x20 taula bat eta horrez gain, leiho-marko bat osatzen duten taularen inguruko gelaxkak (guztiz beharrezkoak kalkuluak egin ahal izateko). Egun jakin batean, gelaxka bakoitzean hiru balio hauetarik bat egon ahal da: -1, 0 edo 1(lehen eguneko hiru balio horiek Random funtzioak ematen ditu).
Biziaren Jokoa simulatzen duen programan gizartea bilakatuz doa denboraren arabera. Horrela, egun batetik bestera, gizarteko kide guztien egoera berria kalkulatzen da (EgoeraEguneratu prozedura arduratzen da zeregin horretaz). Biztanleen egoerak egunero aldatzen dira, irudi honetan erakusten den bezala:
Irudi 2. Egoeren aldaketak denborarekin ematen dira, gelaxka baten balio berria: gelaxkaren inguruko 8 gelaxken egoerek erabakiko dute.
Kideen egoerak aldatzeko arauak lau dira, taula honetan eta ondoko bi irudietan erakusten dira:
Koord. | E-1 | E-2 | H / K /B | Aldaketaren Araua | |
(12, 10) | 0 | 1 | 0 / 1 / 7 | B > Hx3 | 7 > 0x3 |
(1, 1) | 0 | -1 | 2 / 1 / 5 | B < Hx3 | 5 < 2x3 |
(16, 18) | -1 | 1 | 3 / 0 / 5 | B >= 4 | 5 >= 4 |
(10, 1) | 1 | 0 | 3 / 2 / 3 | H+K > B | 3+2 > 3 |
Taularen Koord. lehen zutabean hurrengo bi irudietako adibideen koordenatuak daude. E-1 eta E-2 zutabeak egun batetik besterako aldaketak dira. Laugarren zutabea H/K/B gelaxkaren inguruko kopuruak dira (hildakoak-kutsatuak-bizidunak). Aldaketaren Araua azken zutabea: arauak eta haien aplikazioak.
Irudi 3. Egunak igaro ahala, gizartea irudikatzen duten 20x20
gelaxken balioak aldatuko dira (leiho-markoa osatzen duten balioak ez dira aldatzen). Egun batetik hurrengora, gelaxka batek nozitzen duen aldaketa gelaxkaren inguruko balioen araberakoa da, hots, gelaxka inguratzen duten 8 balioek erabakiko dute gelaxka horren egoera berria hurrengo egunean (-1, 0 edo 1).
Abiapuntuko exekutagarria
Lehen faseko Biziaren Jokoa simulazioaren programa abiapuntua delako, berreskura dezagun Windows sistema baterako, lehen faseko programa exekutagarria:
|
Lehen faseko Biziaren Jokoa simulazioaren programa abiapuntua delako, berreskura dezagun Macintosh sistema baterako, lehen faseko programa exekutagarria:
|
Zer eskatzen da
Bigarren faseko Biziaren Jokoa simulazioaren zeregina dela eta, egin behar dituzun lanak A eta B dira. A zatiak iturburu-programa bat izango du eta B zatiak beste iturburu programa bat izango du:
- A zatia: Datuen fitxategiak sortuko dira, eta fitxategi horien informazioa bilduko duen datu-basea sortuko da.
- B zatia: Datu-basea kudeatuko da.
A zatia
Biziaren Jokoaren bigarren faseko A zatia, lehen faseko programaren jarraipena da. A zatiaren azken helburua C:\Herriak\2020-03-29_DB.dat tankerako izenak dituzten fitxategiak lortzea da, bakoitzak data jakin bateko hainbat herriren informazioa biltzen du eta horregatik datu-basea deituko diogu. Datu-base bat, egutegiko egun bakoitzeko. Datu-base guztiak C:\Herriak karpetan kokaturik.
Edozein datu-basek gordeko duen informazioa erregistroetan antolaturik dago. Datu-base jakin batek (adibidez C:\Herriak\2020-03-29_DB.dat izeneko datu-baseak) hainbat fitxategitik hartuko ditu bere datuak; esate baterako, adibidearen datu-base horren edukia bi herri hauen informazioa izan daiteke (2x5=10 erregistro):
- C:\Herriak\2020-03-29_Arizkun.dat
- C:\Herriak\2020-03-30_Arizkun.dat
- C:\Herriak\2020-03-31_Arizkun.dat
- C:\Herriak\2020-04-01_Arizkun.dat
- C:\Herriak\2020-04-02_Arizkun.dat
- C:\Herriak\2020-03-29_Hondarrabia.dat
- C:\Herriak\2020-03-30_Hondarrabia.dat
- C:\Herriak\2020-03-31_Hondarrabia.dat
- C:\Herriak\2020-04-01_Hondarrabia.dat
- C:\Herriak\2020-04-02_Hondarrabia.dat
Adibidearekin jarraituz, ikus dezagun orain C:\Herriak\2020-03-29_Arizkun.dat izeneko fitxategiaren edukia zein den. Erantzun laburra: zenbaki osoen 22x22 neurriko taula bakar bat. Beraz, XXXX-XX-XX datako eta YYYYYYY eguneko C:\Herriak\XXXX-XX-XX_YYYYYY.dat izena duen fitxategiaren edukia elementu bakar dat da, lehen faseko 22x22 neurriko aaiTaulak array bat (lehen faseko aiTaula1, aiTaula2, aiTaula3, aiTaula4 edo aiTaula5 aldagai baten edukia).
Irudi 4. Bost taulen taaiTaulak datu-motako aaiTaulak arrayaren bitartez bost fitxategi erdiesten dira (irudia handiago ikusteko bere gainean klik egin).
Beherago ematen den kodean, HERRIEN DATUAK ESKURATU atala ikusi.
Urratsak:
- iDataHila eta iDataEgun aldagaien balioak teklatuaren bidez hartu ondoren, fnboEgunEgokia funtzio boolearra aplikatu (lehen faseko D zatian egiten zen bezalaxe).
- fnsDataEraiki funtzioari deia egin (lehen faseko D zatian egiten zen bezalaxe). Hurrengo hiru urratsak haibat aldiz errepikatu…
- sHerria aldagaiaren balioa teklatuz hartu eta fnboDataHerriBerriaDa(sData, sHerria, ardDatakHerriak, iDatakHerriakLuzera) funtzio boolearrari esker, data-herri bikote hori dagoeneneko ardDatakHerriak array laguntzailean dagoen ala ez aztertu. Aintzat hartu, ardDatakHerriak array laguntzaileak gehienez MUGA=45 elementu izan ditzakeela.
- Lehen faseko aiTaula1, aiTaula2, aiTaula3, aiTaula4 eta aiTaula5 aldagaien ordez, bigarren fasean aaiTaulak array lineala erabiliko da:
{ Proiektu I zatiaren A atala berreskuratu eta horri esker aaiTaulak }
{ arrayari balioak eman, lehena random eta beste lauak hedapen legez }
TaulaBatArrayanGorde(aaiTaulak, k) ; { 22x22 neurriko osoen 5 taula } - BostFitxategiSortu prozeduraren bitartez bost herrien fitxategiak sortu.
1., 2. eta 3. urratsen argibidea
Array laguntzailearen datu-mota:
trdDataHerria = RECORD sDataBat: tsKate10 ; sHerriBat END ; tardDatakHerriak = ARRAY [ 1.. MUGA] OF trdDataHerria ;
Array laguntzailearen aldagaiak:
ardDataHerriak : tardDataHerriak ;
Hasiera-hasiera batean, dena hutsik dago:
Lehen data-herri [2020-03-29|Arizkun] bikoterako,
ardDatakHerriak arraya aztertu
ondoren arazorik ez dagoelako:
Bigarren data-herri
[2020-03-29|Hondarrabia] bikoterako,
ardDatakHerriak arraya aztertu
eta datu berriak direlako:
Hirugarren data-herri
[2020-05-01|Hondarrabia] bikoterako,
ardDatakHerriak arraya aztertu
eta datu berriak direlako, Hondarrabia herriko daturik badago baina dauden fitxategien izenak 2020-03-29_Hondarrabia.dat, 2020-03-30_Hondarrabia.dat, 2020-03-31_Hondarrabia.dat, 2020-04-01_Hondarrabia.dat eta 2020-04-02_Hondarrabia.dat direlako arazorik ez dago bikote honekin:
Laugarren data-herri [2020-03-31|Arizkun] bikoterako,
ardDatakHerriak arraya aztertu
eta ez onartu fitxategien kointzidentziak egongo direlako (adibidez: dagoeneko 2020-03-31_Arizkun.dat fitxategia badago C:\Herriak karpetan, eta ardDatakHerriak arrayaren informazioa arakatuz jakiterik dago).
Ez onartu, baina nola erantzun? Ezezkoan, programak zer egin behar duen
zuei utziko dizuet erabakitzen (posibilitate desberdinak daude: batzuk
hobeak eta astunagoak programatzeko, beste batzuk errazagoak
programatzeko baina eskasagoak programaren malgutasunaren aldetik).
Laugarren saiakera horren osteko egoera hirugarrenekoa litzateke:
|
Beherago ematen den kodean, HERRIEN DATUAK ESKURATU atala ikusi ondoren...
Beherago ematen den kodean, HERRIEN DATU-BASEA SORTU atala azter dezagun.
Hasteko, deskriba dezagun datu-basearen elementuek zer nolako egiturari erantzuten dioten. Datu-basea rdInformazio erregistroetan oinarritzen da, hiru eremuko erregistroetan hain zuzen ere. Eremuak hauek dira:
- rdDatuak, bi eremuko erregistro hau:
1.1. aaiLaginak, bost elementuen arraya (lehen faseko C zatian lortzen ziren 3x3 bost arrayak).
1.2. asDatak, bost kateen arraya. - sHerria, 30 karakteredun kararaktere-katea.
- sKalifikazioa, 11 karakteredun kararaktere-katea.
Irudi 5. Datu-basearen elementu bakoitzak ondoko informazioa biltzen du: 9 zenbakiren 5 taulen sorta bat, 5 daten sorta bat, izen bat eta beste izen bat. Erregistroaren datu-motaren identifikadorea rdInformazio izan daiteke eta rdElem edo rdFitxa datu-mota horretako aldagai bat (irudia handiago ikusteko bere gainean klik egin).
rdInformazio datu-motako hiru eremu dituzten erregistroak izango dira datu-baseaen elementuak. Adibidez, C:\Herriak\2020-03-29_DB.dat datu-basearen lehen bi elementuen eskema hau izan daiteke:
Irudi 6. 2020-03-29_DB.dat datu-basearen lehen elementua Arizkun eta bigarrena Hondarrabia, herri biren pandemiaren datuak 2020-03-29 datan hasi zien hartzen (irudia handiago ikusteko bere gainean klik egin).
Urratsak:
- iDataHila eta iDataEgun aldagaien balioak teklatuaren bidez hartu ondoren, fnboEgunEgokia funtzio boolearra aplikatu (lehen faseko D zatian egiten zen bezalaxe).
- fnsDataEraiki funtzioa erabili sFitxIzenDB aldagaiaren balioa lortzeko. Hurrengo 3. eta 4. urratsak hainbat aldiz errepikatu...
- sHerria aldagaiaren balioa teklatuz hartu eta konprobatu C:\Herriak karpetan dagoela.
- Baiezkoan, HerriaErregistratuDBan prozedurari esker elementu berri bat erregistratu datu-basean.
- Ezezkoan, mezu bat pantailaratu.
- Datu-basera herri gehiago gehitu nahi den galdetu.
A zatiaren kodea
Hona hemen balizko soluzioren eskema bat:
(* -------------------------------------------------------- *) (* DATU-BASEA: C:\Herriak\2020-03-29_DB.dat fitxategia eta *) (* bere barnean *) (* fitxategi hauen *) (* edukia: *) (* *) (* C:\Herriak\2020-03-29_Arizkun.dat *) (* C:\Herriak\2020-03-30_Arizkun.dat *) (* C:\Herriak\2020-03-31_Arizkun.dat *) (* C:\Herriak\2020-04-01_Arizkun.dat *) (* C:\Herriak\2020-04-02_Arizkun.dat *) (* C:\Herriak\2020-03-29_Hondarrabia.dat *) (* C:\Herriak\2020-03-30_Hondarrabia.dat *) (* C:\Herriak\2020-03-31_Hondarrabia.dat *) (* C:\Herriak\2020-04-01_Hondarrabia.dat *) (* C:\Herriak\2020-04-02_Hondarrabia.dat *) (* -------------------------------------------------------- *) PROGRAM BiziarenJokoa_II_A_Azp3 ; USES SysUtils ; { FileExists erabiltzeko } CONST X_MAX = 20 ; Y_MAX = 20 ; LAGIN3x3 = 3 ; MUGA = 45 ; TYPE taiTaula = ARRAY[0..X_MAX+1, 0..Y_MAX+1] OF Integer ; taaiTaulak = ARRAY[1..5] OF taiTaula ; tFitxategiTaulaBat = FILE OF taiTaula ; tsKate99 = STRING[99] ; tsKate30 = STRING[30] ; tsKate11 = STRING[11] ; tsKate10 = STRING[10] ; trdDataHerria = RECORD sDataBat: tsKate10 ; (* array laguntzailerako *) sHerriBat: tsKate30 ; END ; tardDatakHerriak = ARRAY[1..MUGA] OF trdDataHerria ; (* array laguntzailerako *) tasDatak = ARRAY[1..5] OF tsKate10 ; taiLagin = ARRAY[1..LAGIN3x3, 1..LAGIN3x3] OF Integer ; taaiLaginak = ARRAY[1..5] OF taiLagin ; trdDatuak = RECORD aaiLaginak: taiLagin ; asDatak: tasDatak ; END ; trdInformazio = RECORD rdDatuak: trdDatuak ; sHerria: tsKate30 ; sKalifikazioa: tsKate11 ; END ; tDBfitxategi = FILE OF trdInformazio ; { ------------------------- Programa Nagusia ------------------------- } VAR //aiTaula1, aiTaula2, aiTaula3, aiTaula4, aiTaula5 : taiTaula ; aaiTaulak : taaiTaulak ; iDataHila, iDataEgun, k : Integer ; sData : tsKate10 ; sHerria : tsKate30 ; sDataHerriFitxIzen, sFitxIzenDB : tsKate99 ; ardDatakHerriak : tardDatakHerriak ; (* data-herri bikotearen datu berriak kontrolatzeko array laguntzailea *) iDatakHerriakLuzera : Integer ; (* array laguntzailearen luzera MUGA=45 *) cErantz : Char ; BEGIN WriteLn ; WriteLn ; { ================================================================= } { 2020KO DATA BATEKO HERRIEN DATUAK ESKURATU } { ------------------------------------------ } { Data bateko herrien datu-basea sortu aurretik datuak jasoko dira. } { 2020ko data bat teklatuaren bitartez hartu eta hainbat herriren } { izenak emango ditu erabiltzaileak, herri bakoitzari datu sorta } { bat dagokio (22x22ko bost array) eta bost taula horiekin bost } { fitxategi lortulo dira, taula bakoitzetik fitxategi bat. 22x22ko } { taulen edukia balio osoak dira eta proiektuaren I zatian bezala, } { lehen taula random bitartez betetzen da eta beste lau taulak } { pandemiaren hedapena simulatzen duten arauak aplikatuta; baina } { proiektuaren I zatian ez bezala, 22x22ko taulak ez dira 5 aldagai } { izango, baizik aaiTaulak izeneko array baten elementuak, hau da, } { bost array karratu biltegitzen dituen array lineala. Bost taulen } { array horri esker eskuratuko dira herriari dagozkion datuen bost } { fitxategiak. } { } { Programaren hasiera hau izan daiteke, non azpiprogramen ardurak } { hauek diren: } { } { fnboEgunEgokia funtzio bolearrak hile baterako eman den egunaren } { zenbakia ondo dagoen kontrolatzen duen } { fnsDataEraiki funtzioak data karaktere-kate bezala itzultzen du } { fnboHerriBerriaDa funtzio bolearrak asHerrienZerrenda arraya ara- } { katzen du teklatuz emandako herria datu-basean } { birritan ez gordetzeko } { TaulaBatArrayanGorde prozedurari esker bost egunen aaiTaulak } { arraya betetzen da (lehen eguna random bidez } { eta beste lauak pandemia hedatzeko arauez) } { BostFitxategiSortu prozedurak, aurreko informazioan oinarrituta, } { izen hauetako fitxategiak sortuko ditu, esate } { baterako: 2020-03-29_Arizkun.dat } { 2020-03-30_Arizkun.dat } { 2020-03-31_Arizkun.dat } { 2020-04-01_Arizkun.dat } { 2020-05-02_Arizkun.dat } { ================================================================= } REPEAT Write('Datuak noiz hasi ziren hartzen? 2020ko zein hiletan: ') ; ReadLn(iDataHila) ; UNTIL (iDataHila >= 1) AND (iDataHila <= 12) ; REPEAT Write('2020ko ', fnsHilabetea(iDataHila),'ren eguna eman: ') ; ReadLn(iDataEgun) ; UNTIL fnboEgunEgokia(iDataEgun, iDataHila) ; sData := fnsDataEraiki(iDataHila, iDataEgun) ; iDatakHerriakLuzera := 0 ; REPEAT WriteLn(sData, ' datarako herrien datuak sortzen') ; REPEAT Write('Eman herriaren izena, ''Arizkun'' adibidez: ') ; ReadLn(sHerria) ; sDataHerriFitxIzen := 'C:\Herriak\' + sData + '_' + sHerria + '.dat' ; UNTIL fnboDataHerriBerriaDa(sData, sHerria, ardDatakHerriak, iDatakHerriakLuzera) ; FOR k:=1 TO 5 DO BEGIN { Proiektu I zatiaren A atala berreskuratu eta horri esker aaiTaulak } { arrayari balioak eman, lehena random eta beste lauak hedapen legez } TaulaBatArrayanGorde(aaiTaulak, k) ; { 22x22 neurriko osoen 5 taula } END ; BostFitxategiSortu(sData, sHerria, aaiTaulak) ; Write('Herri gehiagoren fitxategirik sortu nahi duzu? (B/E): ') ; ReadLn(cErantz) ; cErantz := Upcase(cErantz) ; UNTIL (cErantz = 'E') OR (iDatakHerriakLuzera = MUGA) ; { ================================================================= } { 2020 URTEKO HERRIEN DATU-BASEA SORTU } { ------------------------------------ } { 2020ko herrien datu-basea erregistroen fitxategi bat izango da, } { datu-basearen erregistroek hiru eremu izango dituzte: } { 1. eremua, rdDatuak erregistroa, bi eremu: } { 1.1 eremua: aiDatak bost kateen arraya } { 1.2 eremua: aiLaginak bost osoen arraya } { 2. eremua, sHerria kararaktere-katea } { 3. eremua, sKalifikazioa 11 karakteredun kararaktere-katea } { } { Datu-base sortzeko eta betetzeko, erabiltzaileak data bat finkatu } { ondoren, hainbat herriren izenak emango ditu. Datu-baseak izango } { duen izen osoa 'C:\Herriak\XXXX-XX-XX_DB.dat' izan daiteke, non } { XXXX-XX-XX data bat den. Programak kontrolatu beharko du data } { jakin bateko herriren datuak, ez direla behin baino gehiagotan } { datu-basean grabatuko. } { } { Programaren jarraipena hau izan daiteke, non azpiprogramen lanak } { hauek diren: } { } { fnboEgunEgokia funtzio bolearrak hile baterako eman den egunaren } { zenbakia ondo dagoen kontrolatzen duen } { fnsDataEraiki funtzioak data karaktere-kate bezala itzultzen du } { fnboHerriaDBn funtzio boolearraren lana da frogatzea herri jakin } { bat ote dagoen XXXX-XX-XX data bateko datu-basean, } { hau da, C:\Herriak\XXXX-XX-XX_DB.dat fitxategian } { herri jakin hori dagoen ala ez dagoen } { HerriaErregistratuDBn prozedurak kalkuluak egin ondoren, elementu } { berri bat gehitzen dio datu-baseari } { ================================================================= } REPEAT Write('Zein eguneko datu-basea sortuko da? Eman 2020ko hilea: ') ; ReadLn(iDataHila) ; UNTIL (iDataHila >= 1) AND (iDataHila <= 12) ; REPEAT Write('2020ko ', fnsHilabetea(iDataHila),'ren eguna eman: ') ; ReadLn(iDataEgun) ; UNTIL fnboEgunEgokia(iDataEgun, iDataHila) ; sData := fnsDataEraiki(iDataHila, iDataEgun) ; sFitxIzenDB := 'C:\Herriak\' + sData + '_DB.dat' ; WriteLn(sData, ' datarako herrien datuak datu-basean erregistratzen') ; REPEAT Write('Eman herriaren izena, ''Arizkun'' adibidez: ') ; ReadLn(sHerria) ; sDataHerriFitxIzen := 'C:\Herriak\' + sData + '_' + sHerria + '.dat' ; IF FileExists(sDataHerriFitxIzen) THEN ErregistratuDataHerriaDBan(sDataHerriFitxIzen, sFitxIzenDB) ELSE WriteLn(sDataHerriFitxIzen, ' izeneko data-herri bikoterik ez dago!') ; Write('Herri gehiago datu-basera gehitu nahi duzu? (B/E): ') ; ReadLn(cErantz) ; cErantz := Upcase(cErantz) ; UNTIL (cErantz = 'E') ; WriteLn ; WriteLn('=======================') ; WriteLn('RETURN sakatu amaitzeko') ; WriteLn('=======================') ; ReadLn ; END.
B zatia
Biziaren Jokoaren bigarren faseko B zatia, aurrekoaren jarraipena da. B zatiaren helburua C:\Herriak\2020-03-29_DB.dat tankerako izenak dituzten fitxategien gainean eragiketak egitea. Horretarako, beherago ematen den kodea ikusi, non 2020 URTEKO HERRIEN DATU-BASEA KUDEATU atalean hiru eragiketa dituen menua erakusten den (menu hori lehen faseko D zatian programatu zen bera da).
Urratsak:
- iDataHila eta iDataEgun aldagaien balioak teklatuaren bidez hartu ondoren, fnboEgunEgokia funtzio boolearra aplikatu (lehen faseko D zatian egiten zen bezalaxe).
- fnsDataEraiki funtzioa erabili sFitxIzenDB aldagaiaren balioa lortzeko.
- sFitxIzenDB izeneko datu-basea C:\Herriak karpetan dagoela konprobatu:
- Ezezkoan, mezu bat pantailaratu eta programa bukatu.
- Baiezkoan, datu-basea kudeatzeko menura sartu.
- Datu-basea kudeatzeko menuak aukera bat hautatu:
- Herri baten izena eskatu eta bere datuak pantailaratzea.
- Herri baten izena eskatu eta datu guztiak datu-basetik ezabatzea.
- Herri baten lehen laginaren balio bat aldatzea, laginaren koordenatuak teklatuz emango dira.
- Menutik irten eta programa bukatu.
B zatiaren kodea
Hona hemen balizko soluzioren eskema bat:
(* -------------------------------------------------------- *) (* DATU-BASEA: C:\Herriak\XXXX-XX-XX_DB.dat fitxategia eta *) (* bere barnean *) (* fitxategi hauen *) (* edukia: *) (* *) (* C:\Herriak\2020-03-29_Arizkun.dat *) (* C:\Herriak\2020-03-30_Arizkun.dat *) (* C:\Herriak\2020-03-31_Arizkun.dat *) (* C:\Herriak\2020-04-01_Arizkun.dat *) (* C:\Herriak\2020-04-02_Arizkun.dat *) (* -------------------------------------------------------- *) { ================================================================= } { 2020KO DATA BATEKO HERRIEN DATUAK ESKURATUTA } { -------------------------------------------- } { } { Adibidez: 'C:\Herriak\2020-03-29_Arizkun.dat' } { 'C:\Herriak\2020-03-30_Arizkun.dat' } { 'C:\Herriak\2020-03-31_Arizkun.dat' } { 'C:\Herriak\2020-04-01_Arizkun.dat' } { 'C:\Herriak\2020-04-02_Arizkun.dat' } { } { ================================================================= } { 2020 URTEKO HERRIEN DATU-BASEA SORTUTA } { -------------------------------------- } { } { Adibidez: } { 'C:\Herriak\2020-03-29_DB.dat' } { } { ================================================================= } PROGRAM BiziarenJokoa_II_B_Azp3 ; USES SysUtils ; { FileExists erabiltzeko } CONST X_MAX = 20 ; Y_MAX = 20 ; LAGIN3x3 = 3 ; MUGA = 45 ; TYPE tsKate99 = STRING[99] ; tsKate30 = STRING[30] ; tsKate11 = STRING[11] ; tsKate10 = STRING[10] ; tasDatak = ARRAY[1..5] OF tsKate10 ; taiLagin = ARRAY[1..LAGIN3x3, 1..LAGIN3x3] OF Integer ; taaiLaginak = ARRAY[1..5] OF taiLagin ; trdDatuak = RECORD aaiLaginak: taiLagin ; asDatak: tasDatak ; END ; trdInformazio = RECORD rdDatuak: trdDatuak ; sHerria: tsKate30 ; sKalifikazioa: tsKate11 ; END ; tDBfitxategi = FILE OF trdInformazio ; { ------------------------- Programa Nagusia ------------------------- } VAR iDataHila, iDataEgun : Integer ; sData : tsKate10 ; sFitxIzenDB : tsKate99 ; cAukera : Char ; { ================================================================= } { 2020 URTEKO HERRIEN DATU-BASEA KUDEATU } { -------------------------------------- } { Datu-basea erabili: erabiltzaileak data bat finkatu ondoren, menu } { baten bitartez eragiketa desberdinak egingi dira, adibidez: } { + Herri baten datuak pantailaratzea } { + Herri baten datuak ezabatzea } { + Herri baten lehen laginaren balio bat aldatzea } { ================================================================= } BEGIN WriteLn ; WriteLn ; REPEAT Write('Zein datu-basearekin lan egingo dugu? Eman 2020ko hilea: ') ; ReadLn(iDataHila) ; UNTIL (iDataHila >= 1) AND (iDataHila <= 12) ; REPEAT Write('2020ko ', fnsHilabetea(iDataHila),'ren eguna eman: ') ; ReadLn(iDataEgun) ; UNTIL fnboEgunEgokia(iDataEgun, iDataHila) ; sData := fnsDataEraiki(iDataHila, iDataEgun) ; sFitxIzenDB := 'C:\Herriak\' + sData + '_DB.dat' ; IF NOT FileExists(sFitxIzenDB) THEN WriteLn(sData, ' datarako datu-baserik ez da aurkitu!') ELSE BEGIN { ----------------------------------------------------------------- } { Proiektuaren I zatian kodetu zen menua probestu daiteke II zatian } { ----------------------------------------------------------------- } WriteLn ; REPEAT WriteLn(' +----------------------------------+') ; WriteLn(' | Kalifikazioen araberako egunak |') ; WriteLn(' +----------------------------------+') ; WriteLn(' | K Kontrolpeko egunak |') ; WriteLn(' | A Arriskuko egunak |') ; WriteLn(' | L Larrialdiko egunak |') ; WriteLn(' | S Salbuespeneko ehunak |') ; WriteLn(' | |') ; WriteLn(' | I Irten |') ; WriteLn(' +----------------------------------+') ; REPEAT Write(' Letra bat aukeratu: ') ; ReadLn(cAukera) ; cAukera := UpCase(cAukera) ; UNTIL (cAukera = 'K') OR (cAukera = 'A') OR (cAukera = 'L') OR (cAukera = 'S') OR (cAukera = 'I'); WriteLn ; CASE cAukera OF 'K' : ; 'A' : ; 'L' : ; 'S' : ; END ; WriteLn ; IF cAukera <> 'I' THEN BEGIN Write('Aurrera egiteko RETURN sakatu -> ') ; ReadLn ; END ; UNTIL cAukera = 'I' ; END ; WriteLn ; WriteLn('=======================') ; WriteLn('RETURN sakatu amaitzeko') ; WriteLn('=======================') ; ReadLn ; END.