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 10. astea | bilaketa sekuentzialaren aplikazio bat programara jo eta bertako BilaketaLineala izeneko funtzioa erabili gure behar izanetara egokituz, hots, erabili beharko dituen moldapenak eginez.
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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 | { 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.