210 likes | 323 Views
3 Laborategiak: Programazio Modularra Problemak zatitu Azpi-algoritmoak berrerabili. Posizioa : Karaktere kate batean karaktere baten lehen posizioa bueltatzen duen azpiprograma. Zehaztapena: Aurrebaldintza: Zer da: erak: karaktere kateari erakuslea kar: aurkitu beharreko karakterea
E N D
3 Laborategiak: • Programazio Modularra • Problemak zatitu • Azpi-algoritmoak berrerabili
Posizioa : Karaktere kate batean karaktere baten lehen posizioa bueltatzen duen azpiprograma • Zehaztapena: • Aurrebaldintza: • Zer da: • erak: karaktere kateari erakuslea • kar: aurkitu beharreko karakterea • topea: gehienez zenbat posizio bilatu • Mota: • karakterea *erak; • karakterea kar; • osoa topea; topea ЄZ • Baldintza indibidualak: topea>=0 • Erlazioak:
Posizioa : Karaktere kate batean karaktere baten lehen posizioa bueltatzen duen azpiprograma • Zehaztapena: • Ondorengo baldintza: • Zer da: Em: zein posiziotan dagoen kar *erak apuntatzen duen karaktere katean • Mota: Em ЄZ • Baldintza indibidualak: Em>=-1 • Erlazioak: • Existitzen bada i balioa, betetzen duena *(erak+i) = = kar eta i >= 0 eta i <= Topea eta beste edozein j balioak betetzen badu 0 <= j < i eta *(erak+i) ! = kar) Em = = i • Bestela Em = = -1
osoa Posizioa (karakterea *erak, karakterea kar, osoa topea) HASIERA osoa i=0, Em= -1; topea >= i && *(erak+i) != kar ez bai topea >= i ez bai i = i + 1; Em = i; Em = -1; ITZULI Em; BUKAERA
ZENBATU KARAKTERE BAT POSIZIOA azpialgoritmoari dei eginez, zenbatu zenbat aldiz agertzen den erabiltzaileak adierazitako esaldi batean berak esandako karakterea. Sasikodean
ZENBATU KARAKTERE BAT • Zehaztapena: • Aurrebaldintza: • Zer da: • Es: esaldia • Letra: bilatu beharreko karakterea • Mota: • karakterea Es[100]; • karakterea Letra; • Baldintza indibidualak: Es hutsa ez izatea (luzera(Es)>0) • Erlazioak:
ZENBATU KARAKTERE BAT • Zehaztapena: • Ondorengo baldintza: • Zer da: Kont: Es esaldian Letra karakterea zenbat aldiz agertzen den • Mota: Kont ЄZ • Baldintza indibidualak: Kont>=0 • Erlazioak:
HASIERA karakterea Es [100], Letra; osoa Kont = 0, i, pos; EGIN IDATZI “Idatzi esaldia”; IRAKURRI Es; Luzera = DENBITARTEAN (Luzera <=0); IDATZI “Zein letra zenbatu nahi duzu?”; IRAKURRI Letra; … Posizioa (&Es[0], ‘/0’, 100);
… i= 0; EGIN pos = Posizioa (&ES[i],Letra, Luzera); BADA (pos > -1) Kont = Kont + 1; BUK_BADA i= Luzera = DENBITARTEAN (pos > -1); IDATZI Kont; IDATZI “ aldiz agertzen da”; BUKAERA pos +1; Posizioa (&Es[i], ‘/0’, 100);
NORAINO n KARAKTERE POSIZIOA azpialgoritmoari dei eginez, esaldiaren zein posizioan agertzen da Kar karakterearen n-garren agerpena. Adibidez: Esaldia: Kaixo, ni iker naiz. Kar: i n: 3 Emaitza: 10 Sasikodean
2007-08 Azterketa Ariketa • Azpialgoritmo hau sortu: osoa Agerpenak (karaktere *erak, karaktere A); esaldi batean letra bat zenbat aldiz agertzen den adierazten du. • Agerpenak azpi-algoritmoa erabiltzen duen algoritmoa idatzi, “KAIXO LAGUNAK” esaldian ‘K’ eta ‘A’ letrak zenbatzen dituena.
osoa Agerpenak (karaktere *erak, karaktere A) HASIERA osoa i=0, Kont = 0; *(erak+i) != ‘/0’ ez bai ITZULI Kont; *(erak+i) == A ez BUKAERA bai Kont = Kont + 1; i = i + 1;
HASIERA Osoa KontK = 0, KontA = 0; Karaktere Es [50] = “KAIXO LAGUNAK”; KontK = Agerpenak (&Es[0], ‘K’); KontA = Agerpenak (&Es[0], ‘A’); IDATZI KontK; IDATZI “’K’ karaktere ta“; IDATZI KontA; IDATZI “’A’ karaktere “; BUKAERA
ZENBATU KARAKTEREAK Posizioa eta Agerpenak azpialgoritmoak erabiliz, zenbatu zenbat aldiz agertzen den karaktere bakoitza erabiltzaileak adierazitako esaldi batean. Fluxu diagraman
Taulak landu funtzioekin • Ondorengoa egin: • Jaso 8 zenbaki positibo 2X4 – ko taulan • Bikoiztu taula osoa eta pantailaratu. • Laukoiztu 0 lerroa eta pantailaratu. • Hirukoiztu 1 lerroa eta pantailaratu. • Bi lerroetako 2 eta 3 zutabeetan dauden zenbakiak biderkatu 10-rrengatik. Pantailaratu. • Zero gorde taula osoan eta pantailaratu.
hutsa Pantailaratu (osoa *erak, int zenbat) HASIERA osoa *erak2; erak2 = erak; DENBITARTEAN (erak2 < (erak+zenbat)) IDATZI *erak2; erak2 = erak2 + 1; BUK_DENBITARTEAN BUKAERA
hutsa Biderkatu (osoa *erak, osoa zenbat, osoa Biderkatzailea) HASIERA osoa *erak2 = erak; DENBITARTEAN (erak2 < (erak+zenbat)) *erak2 = *erak2 * Biderkatzailea; erak2 = erak2 + 1; BUK_DENBITARTEAN BUKAERA
HASIERA osoa T [2][4], L, Z; //taula bete IZANDADIN (L=0) DENBITARTEAN (L<2) EGUNERATU (L = L +1) IZANDADIN (Z=0) DENBITARTEAN (Z<4) EGUNERATU (Z = Z +1) EGIN IDATZI L, Z, “zenbakia emaidazu:”; IRAKURRI T[L][Z]; DENBITARTEAN (T[L][Z] <0); BUK_IZANDADIN; BUK_IZANDADIN; …
… //taula bikoiztu Biderkatu (&T[0][0], 8, 2); Pantailaratu (&T[0][0], 8); //0 lerroa laukoiztu Biderkatu (&T[0][0], 4, 4); Pantailaratu (&T[0][0], 4); //1 lerroa hirukoiztu Biderkatu (&T[1][0], 4, 3); Pantailaratu (&T[1][0], 4); …
… //2 eta 3 lerroak *10 Biderkatu (&T[0][2], 2, 10); Pantailaratu (&T[0][2], 2); Biderkatu (&T[1][2], 2, 10); Pantailaratu (&T[1][2], 2); //0-z bete taula Biderkatu (&T[0][0], 8, 0); Pantailaratu (&T[0][0], 8); BUKAERA
10 zenbakien Kalkulagailua • Menua hau duen 10 zenbakien kalkulagailua: {10,9,8,7,6,5,4,3,2,1} • Adierazi zenbaki errenkada • Batu errenkada (55) • Lehen zenbakiari kendu beste guztiak (-35) • Lehen bost zenbakiei kendu beste bost zenbakiak (40-15 = 25) • Irten