Gehienez 25 elementu gordetzeko gai den array batekin lan egingo dugu. Arrayaren elementuak zenbaki errealak izango dira.
Datua den zenbaki erreal bat arrayean gorde aurretik, frogatu beharra dago errepikaturik ez dela egongo. Horretarako, teoriako blogearen 9. astea | bilaketa sekuentzialaren aplikazio bat programara jo eta bertako BilaketaLineala izeneko funtzioa erabili gure behar izanetara egokituz, hots, erabili beharko dituen moldapenak eginez.
{ Zenbaki erreal desberdinez array bat elikatu ondoren, minimoaren eta } { maximoaren posizioak lortu bi haien arteko lekuak elkar trukatzeko. } program ElkarTrukatu; uses crt; const iBEHEMUGA = 1; iGOIMUGA = 20; type tarZerrenda = array[iBEHEMUGA..iGOIMUGA] of real; function fniBilatu(const arZerrenda: tarZerrenda; iZenbat: integer; rGakoa: real): integer; var iKontagailu: integer; boAurkitua: boolean; begin iKontagailu := iBEHEMUGA; boAurkitua := FALSE; while (iKontagailu <= iZenbat) and not boAurkitua do begin if arZerrenda[iKontagailu] = rGakoa then begin writeln(rGakoa:0:1, ' balioa ', iKontagailu:2, ' posizoan dago!'); boAurkitua := TRUE; end else begin writeln(rGakoa:0:1, ' bilatzen, ', iKontagailu:2, '. elementuarekin ez du bat egiten, hurrengoa aztertu!'); iKontagailu := iKontagailu + 1; end; end; if boAurkitua then begin fniBilatu := iKontagailu; writeln(rGakoa:0:1, ' balioa badago arrayan. Beste balio batekin saiatu!'); end else begin fniBilatu := 0; writeln(rGakoa:0:1, ' balioa berria da eta ', iZenbat+1, '. posizioan kokatuko da'); end; writeln; end; procedure ArrayaDatuDesberdinezBete(var arZerrenda: tarZerrenda; var iLuzera: integer); var iKont: integer; rZbk: real; begin randomize; iLuzera := random(iGOIMUGA) + 1; { iBEHEMUGA eta iGOIMUGA arteko balioak } //writeln('iLuzera=', iLuzera); arZerrenda[iBEHEMUGA] := random(10) + 0.1*random(2); { 0.0, 0.1, 1.0, 1.1, ... 8.0, 8.1, 9.0, 9.1 arteko balioak } writeln('1. datua = ', arZerrenda[iBEHEMUGA]:0:1); writeln; for iKont:=iBEHEMUGA+1 to iLuzera do begin repeat rZbk := random(10) + 0.1*random(2); { 0.0, 0.1, 1.0, 1.1, ... 8.0, 8.1, 9.0, 9.1 arteko balioak } until fniBilatu(arZerrenda, iKont-1, rZbk) = 0; arZerrenda[iKont] := rZbk; end; end; procedure ArrayarenEdukiaIkusi(const arZerrenda: tarZerrenda; iLuzera: integer); var iKont: integer; begin for iKont:=iBEHEMUGA to iLuzera do begin writeln(iKont:10, '. elementua = ', arZerrenda[iKont]:0:1); end; writeln; end; function fniArrayarenMaximoaNon(const arZerrenda: tarZerrenda; iLuzera: integer): integer; var iKont, iMaxNon: integer; rMaximoa: real; begin iMaxNon := iBEHEMUGA; rMaximoa := arZerrenda[iBEHEMUGA]; for iKont:=iBEHEMUGA+1 to iLuzera do begin if arZerrenda[iKont] > rMaximoa then begin iMaxNon := iKont; rMaximoa := arZerrenda[iKont]; end; end; fniArrayarenMaximoaNon := iMaxNon; end; function fniArrayarenMinimoaNon(const arZerrenda: tarZerrenda; iLuzera: integer): integer; var iKont, iMinNon: integer; rMinimoa: real; begin iMinNon := iBEHEMUGA; rMinimoa := arZerrenda[iBEHEMUGA]; for iKont:=iBEHEMUGA+1 to iLuzera do begin if arZerrenda[iKont] < rMinimoa then begin iMinNon := iKont; rMinimoa := arZerrenda[iKont]; end; end; fniArrayarenMinimoaNon := iMinNon; end; procedure ElementuakTrukatu(var arZerrenda: tarZerrenda; iPosMax: integer; iPosMin: integer); var rLaguntzailea: real; begin rLaguntzailea := arZerrenda[iPosMax]; arZerrenda[iPosMax] := arZerrenda[iPosMin]; arZerrenda[iPosMin] := rLaguntzailea; end; { ------------------------- Programa Nagusia ------------------------- } var arZerrenda: tarZerrenda; iLuzera, iPosMax, iPosMin: integer; cErantzuna: char; begin repeat clrscr; writeln('----------------------------------------'); ArrayaDatuDesberdinezBete(arZerrenda, iLuzera); writeln('Hasierako datuak:'); ArrayarenEdukiaIkusi(arZerrenda, iLuzera); iPosMax := fniArrayarenMaximoaNon(arZerrenda, iLuzera); iPosMin := fniArrayarenMinimoaNon(arZerrenda, iLuzera); writeln('Maximoa ', iPosMax, ' posizioan'); writeln('Minimoa ', iPosMin, ' posizioan'); writeln('Elkar trukatu ondoren: '); writeln; ElementuakTrukatu(arZerrenda, iPosMax, iPosMin); writeln('Datuen trukaketa egin ondoren:'); ArrayarenEdukiaIkusi(arZerrenda, iLuzera); writeln; repeat write('Amaitu nahi duzu? (b/e): '); cErantzuna := readkey; writeln(cErantzuna); cErantzuna := upcase(cErantzuna); until (cErantzuna = 'B') or (cErantzuna = 'E'); until cErantzuna = 'B'; end. { programaren amaiera }
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.