2020-12-14
2020-12-11
Ostertzaren (edo zeruertzaren) urruntasuna kilometroetan
Demagun itsasoaren ondoan gaudela eta urrunera, zeruertzera, begiratzen dugula. Zenbat kilometrotara batzen dira zerua eta itsasoa? Beste modu batez galdetuta: Zenbat kilometrotara dago ostertza edo zeruertza?
Irudia ikusi, non h aldagaia eta R konstantea datuak diren eta d distantzia lortu nahi den:
{ Datuak:
rAltuera aldagaia, metrotan emandako altuera
R konstantea, lurraren erradioa 6370 Km
Ezezaguna:
rDistantzia aldagaia, lortu nahi den distantzia kilometroetan } PROGRAM OstertzaKilometroetan ; CONST R = 6370 ; VAR rAltuera, rDistantzia : Real ; BEGIN WriteLn('//////////////////////////////////////') ; WriteLn ; Write('Eman beatokirean altuera metroetan: ':30) ; ReadLn(rAltuera) ; rDistantzia := sqrt(sqr(rAltuera) + 2*rAltuera*R*1000) ; WriteLn ; WriteLn('Ostertzaren distantzia = ':22, rDistantzia:0:2, ' m') ; WriteLn('Ostertzaren distantzia = ':22, rDistantzia/1000:0:5, ' Km') ; WriteLn ; WriteLn('//////////////////////////////////////') ; ReadLn ; END.
Josteko makinaren funtzionamendua
Josteko makina nola dabilen erakusten duen bideoa:
A slow motion look at an industrial sewing machine is probably the best way to understand how this kind of machine works [explanation + animation: https://t.co/tvONyxZXpZ] [source and full video: https://t.co/cm2LZNTFda] pic.twitter.com/ig18Z7vcGw
— Massimo (@Rainmaker1973) October 30, 2019
Josteko makina nola dabilen erakusten duen animazioa:
As a kid I always wondered how a sewing machine actually worked.
— Christian Knudsen (@chrbknudsen) January 6, 2019
I'm just going to stare at this the rest of the day... pic.twitter.com/VyECEafAln
Josteko makina nola dabilen erakusten duen animazioa:
LOVE this little animation of how a sewing machine works! click to enter for a chance to #win #OrganicSeptember https://t.co/3VMcJb2uyp pic.twitter.com/Xldk75n4Nl
— AGreenerLifeForUs.com (@OurGreenerLife) September 24, 2016
Josteko makina nola dabilen erakusten duen animazioa:
If u have ever wondered how a sewing machine works - here is a grt animation to show u.. pic.twitter.com/LCpC6MrxkN
— Ramta Jogi (@hitri04) March 3, 2015
Zubi bat eraikitzen XIV. mendeko Europan
Animazio honek erakusten du nola eraikitzen ziren zubiak Europan XIV. mendean:
14 century bridge construction in Europe pic.twitter.com/qejaXlgQFO
— GÄR-19 🌲🇦🇺 (@arurkuo) October 14, 2020
Atari bat eraikitzen
Etxe bateko ataria, zein tunel bat, zein katedral bat eraikitzeko teknika erakusten da:
This video shows the versatility of the Zipper truck system which helps create tunnels with openings very quickly with no permanent support work [full video: https://t.co/4gE5ElO9IO] pic.twitter.com/2YevNXgQrt
— Massimo (@Rainmaker1973) December 10, 2020
1961 urtea, Espazioko Lasterketa
Argazki hau "Life" aldizkarian argitaratu zen 1961ean, NASAren Espazioko Lasterketa (Race for Space) garai hartan nolakoa zen jakiteko. Arbela izugarria zen espazio-ontzien ibilbideen inguruko kalkulu luze guztietan sartzeko. Horregatik, eskailerak!
Ordenagailuek arbel izugarriak ordezkatu dituzte orain. Argazki honek ez du "voila" unerik agerian uzten, zientzialariek inoiz ez luketelako nahi beren kalkulu arrakastatsuak jendaurrean jartzea batez ere lehiaketa dagoenean.
La carrera por el espacio, en el año 1961
Estos científicos de la NASA están calculando complejas trayectorias de naves espaciales utilizando un cálculo largo y tedioso. Como no había computadoras, todo su trabajo tendría que hacerse en una pizarra. El tablero está lleno de tantos cálculos que se necesitan escaleras largas para llenar todo el espacio.
De manera realista, las ecuaciones en este tablero probablemente sean solo ecuaciones genéricas que se publicarían en una revista. Durante la carrera por el espacio, ¡los científicos no hubieran querido que sus cálculos reales fueran publicados en la revista Life!
IBMren 5 MB-ko disko gogorra
Kaxa erraldoi hau ez da makina bat, altzari bat edo leku batetik bestera garraiatzen ari den ordenagailua.
5 megabyteko memoria duen disko gogorra da. Biltegiratze kopuru hori eta disko gogorraren tamaina izugarri hori elektronika zaharrari dagokio (ikusi http://museodeelectronica.blogspot.com/p/blog-page_2380.html). Biltegiratze hau hilean 3.000 dolarrean errentan eman zuen enpresak (gaur egun, inflazioarekin 30.000 dolarren baliokidea den kopurua).
Horren aldean, egunero 32 gigabyte baino gehiago eraman ditzakegu gure telefonoetan. IBMren 5 MB-ko biltegiratzeak 6 argazki inguru bakarrik eduki ditzakeen arren, hori ez litzateke oso lagungarria izango egungo selfie mugagabeen belaunaldian (batez ere memoria hori aldean eraman beharko bagenu).
Esta enorme caja contiene un disco duro IBM de 5MB, en el año 1956.
Hoy en día, las computadoras portátiles y los teléfonos son tan delgados y livianos que podemos recogerlos con una sola mano. Los primeros discos duros, sin embargo, eran mucho más pesados y ocupaban mucho más espacio. En esta fotografía, al menos cuatro hombres luchan por maniobrar el disco duro en un camión. El modelo de IBM podría almacenar 5 MB, lo que equivale a aproximadamente 6 imágenes. ¡Una empresa podría arrendar el almacenamiento por $ 3.200 al mes, lo que probablemente rondaría los $ 30.000 en la actualidad si se tiene en cuenta la inflación!
Aukeratzailea balio diskretua beti
CASE-OF batean aukeratzailea balio diskretua izango da beti:
Yo: he programado estas tres opciones para que puedas elegir y todo sea más sencillo.
— Fulano Magnético 🇪🇸 (@fulanomagnetico) August 6, 2020
El usuario: pic.twitter.com/xDn85AGwvR
Kontaketa bitarra kontagailu mekanikoz
Kontagailu mekaniko batek zenbaketa bitarra nola burutzen duen:
How a mechanical binary counter works. pic.twitter.com/KI875l9VzD
— Universal Curiosity (@UniverCurious) December 10, 2020
2020-10-08
Muriolagane
Jabier Axpek hartutako bideoa 2020-10-18an
2020-04-10
AZP-3 | Proiektua, BI: Biziaren Jokoa
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 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:
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 |
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).
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.
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:
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.