Hainbat zenbaki teklatuaren bitartez irakurri eta guztien artean maximoa zehaztu. Hona hemen algoritmoa:
|
Demagun iZenbakienKopurua kopuru osoa eta positiboa teklatuaren bitartez irakurriko dela, adibidez 5. Prozesu errepikakor batean 5-1=4 itzuli eman eta itzuliak kontrolatzeko k kontagailua erabili, 5-1=4 itzuliak amaitzean maximoaren balioa pantailaratu. Hau da algoritmotik eratorren taula:
k | iZbk | iMaximoa |
– | 8 | 8 |
2 | 11 | 11 |
3 | 4 | 11 |
4 | 23 | 23 |
5 | 17 | 23 |
23 |
Algoritmotik programara jauzi egitean programazio-lengoaiaren elementuak aintzat hartuko dira eta jarraian baliokidean diren bi programa eskaintzen ditugu. Baliokideak izan arren bigarrena hobea da, lehen programak ez baitu algoritmoa zehatz-mehatz jarraitzen.
ZenbakiSortaBatenMaximoa_1.pas
Programa honek ez du goiko algoritmoa jarraitzen, zenbakiaren irakurketa guztiak prozesu errepikakorraren barruan egiten direlako. Horregatik iMaximoa aldagaiak hasieraketa berezi bat behar du derrigorrez:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 | { Maximoaren hasieraketa berezia prozesu errepikakorra baino lehen } program ZenbakiSortaBatenMaximoa_1 ; uses crt ; var iZenbakiKopurua, iZbk, iZenbatgarrena, iMaximoa, k : integer ; begin clrscr ; writeln ( 'Zenbaki positibo osoen sorta batean sartutako maximoa zehaztu' ) ; writeln ( '-------------------------------------------------------------' ) ; writeln ; repeat write ( 'Zenbaki osoen kopuru eman: ' ) ; readln(iZenbakiKopurua) ; until iZenbakiKopurua > 0 ; iMaximoa := 0 ; { maximoa bilatzen digulako, hasieraketa baliorik txikiena izan dadila; } { hori dela eta, iMaximoa 0 delako, lehen itzulian iMaximoa aldatuko da } for k:= 1 to iZenbakiKopurua do begin repeat write (k, '. zenbaki positiboa eman: ' ) ; readln(iZbk) ; until iZbk > 0 ; if iZbk > iMaximoa then { oraintxe sartutakoa handiagoa denean } begin iMaximoa := iZbk ; iZenbatgarrena := k ; writeln ( 'Une honetan, iMaximoa=' , iMaximoa, ' eta iZenbatgarrena=' , iZenbatgarrena) ; end ; end ; writeln ; writeln ( 'Maximoa ' , iMaximoa, ' izan da eta sortako ' , iZenbatgarrena, '. izan da' ) ; repeat until keypressed ; end . |
ZenbakiSortaBatenMaximoa_2.pas
Goiko algoritmoa jarraituz, zenbakiaren lehen irakurketa prozesu errepikakorra baino lehen egiten delako iMaximoa aldagaiak hasieraketa berezerik ez du behar, iMaximoa hasiera iZbk izango delako:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | { Prozesu errepikakorra baino lehen maximoaren hasieraketa: iMaximoa:=iZbk; } program ZenbakiSortaBatenMaximoa_2 ; uses crt ; var iZenbakiKopurua, iZbk, iZenbatgarrena, iMaximoa, k : integer ; begin clrscr ; writeln ( 'Zenbaki positibo osoen sorta batean sartutako maximoa zehaztu' ) ; writeln ( '-------------------------------------------------------------' ) ; writeln ; repeat write ( 'Zenbaki osoen kopuru eman: ' ) ; readln(iZenbakiKopurua) ; until iZenbakiKopurua > 0 ; repeat write ( 'Lehen zenbaki positiboa eman: ' ) ; readln(iZbk) ; until iZbk > 0 ; iMaximoa := iZbk ; { lehen zenbakia iMaximoa da } iZenbatgarrena := 1 ; { maximoaren posizioa 1 da } for k:= 2 to iZenbakiKopurua do begin repeat write (k, '. zenbaki positiboa eman: ' ) ; readln(iZbk) ; until iZbk > 0 ; if iZbk > iMaximoa then { oraintxe sartutakoa handiagoa denean } begin iMaximoa := iZbk ; iZenbatgarrena := k ; writeln ( 'Une honetan, iMaximoa=' , iMaximoa, ' eta iZenbatgarrena=' , iZenbatgarrena) ; end ; end ; writeln ; writeln ( 'Maximoa ' , iMaximoa, ' izan da eta sortako ' , iZenbatgarrena, '. izan da' ) ; repeat until keypressed ; end . |
LetraSortaBatenMinimoa.pas
Zenbakiekin lan egin ordez karakterekin lan egingo bagenu, goiko algoritmoak berdin-berdin balio du. Jarraian ematen den programan ikusi larrien alfabetoko minimoa nola lortzen den:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 | { Prozesu errepikakorra baino lehen minimoaren hasieraketa: cMinimoa:=cLetra; } program LetraSortaBatenMinimoa ; uses crt ; var iLetraKopurua, iZenbatgarrena, k : integer ; cLetra, cMinimoa : char ; begin clrscr ; writeln ( 'Larrien alfabetoko letra sorta batean sartutako minimoa zehaztu' ) ; writeln ( '---------------------------------------------------------------' ) ; writeln ; repeat write ( 'Zenbat letra sartuko duzu? kopuru osoa eta positiboa eman: ' ) ; readln(iLetraKopurua) ; until iLetraKopurua > 0 ; repeat write ( 'Lehen letra eman: ' ) ; readln(cLetra) ; cLetra := upcase(cLetra) ; until (cLetra >= 'A' ) and (cLetra <= 'Z' ) ; cMinimoa := cLetra ; { lehen letra cMinimoa da } iZenbatgarrena := 1 ; { minimoaren posizioa 1 da } for k:= 2 to iLetraKopurua do begin repeat write (k, '. letra eman: ' ) ; readln(cLetra) ; cLetra := upcase(cLetra) ; until (cLetra >= 'A' ) and (cLetra <= 'Z' ) ; if cLetra < cMinimoa then { oraintxe sartutakoa txikiagoa denean } begin cMinimoa := cLetra ; iZenbatgarrena := k ; writeln ( 'Une honetan, cMinimoa=' , cMinimoa, ' eta iZenbatgarrena=' , iZenbatgarrena) ; end ; end ; writeln ; writeln ( 'Minimoa ' , cMinimoa, ' izan da eta sortako ' , iZenbatgarrena, '. izan da' ) ; repeat until keypressed ; end . |
Hauxe da programa horren balizko irteera bat:
Programaren aurreko irteeraren taula hauxe da:
k | cLetra | cMinimoa |
– | W | W |
2 | K | K |
3 | P | K |
4 | G | G |
5 | H | G |
6 | M | G |
G |
iruzkinik ez:
Argitaratu iruzkina