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:
{ 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:
{ 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:
{ 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