Demagun zenbaki errealak gordetzen dituen array bat bete behar dugula, baina arrayaren datuak ezin direla errepikaturik egon. Hori dela eta, teklatuz irakurritako datu bat arrayean gorde baino lehen datuaren bilaketa egin beharko da dagoeneko arrayean ez dagoela frogatze aldera.
Ariketaren bi bertsio erakutsiko ditugu. Batean bilaketa repeat-until egituraren bitartez gauzatzen da. Bigarrenean berriz, bilaketa egiteko while-do egitura erabiltzen da.
rZbk elementu berria arrayean iIndizea posizioan gorde aurretik, froga hau egiten zaio: arraya arakatu BEHEMUGA eta iIndizea-1 artean rZbk elementua bilatuz. Hona hemen programaren zatirik garrantzitsuenaren kodea:
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 | function fniBilaketaLineala ( const arNotak: tarZerrenda; iZenbat: integer ; rZbk: real ): integer ; var k: integer ; begin k := 0 ; { 0 gezurrezko posizioa litzateke, ikusi BEHEMUGA = 1 dela } repeat k := k + 1 ; until (arNotak[k] = rZbk) or (k = iZenbat) ; if arNotak[k] = rZbk then fniBilaketaLineala := k else fniBilaketaLineala := 0 ; { 0 gezurrezko posizioa litzateke } end ; procedure ArrayaDesberdinekinBete( var arNotak:tarZerrenda; iLuzera: integer ) ; var iIndizea, iPosizioa: integer ; rZbk: real ; begin write ( 'Eman arrayaren ' , BEHEMUGA, '. datua: ' ) ; readln(arNotak[BEHEMUGA]) ; (* Lehen datua beti izango da berria *) for iIndizea:=BEHEMUGA+ 1 to iLuzera do begin repeat write ( 'Eman arrayaren ' , iIndizea, '. datua: ' ) ; readln(rZbk) ; iPosizioa := fniBilaketaLineala(arNotak, iIndizea- 1 , rZbk) ; { bilaketa burutu } if iPosizioa <> 0 then writeln (rZbk: 0 : 2 , ' balioa ' , iPosizioa, '. posizioan dago, beste balio bat aukeratu.' ) else arNotak[iIndizea] := rZbk ; until iPosizioa = 0 ; end ; end ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | { ---------------------- PROGRAMA NAGUSIA ---------------------- } var arNotak: tarZerrenda ; iLuzera: integer ; begin repeat write ( 'Zenbat elementu izango dira (' , BEHEMUGA, ' eta ' , GOIMUGA, ' arteko balioa): ' ) ; readln(iLuzera) ; until (iLuzera >= BEHEMUGA) and (iLuzera <= GOIMUGA) ; ArrayaDesberdinekinBete(arNotak, iLuzera) ; ArrayaIkusi(arNotak, iLuzera) ; readln ; end . |
Lehen bezala orain ere, rZbk elementu berria arrayean iIndizea posizioan gorde aurretik, froga hau egiten zaio: arraya arakatu BEHEMUGA eta iIndizea-1 artean rZbk elementua bilatuz. Hona hemen programaren zatirik garrantzitsuenaren kodea, non ArrayaDesberdinekinBete prozedura berdina den bertsio bietan:
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 | function fniBilaketaLineala ( const arNotak: tarZerrenda; iZenbat: integer ; rZbk: real ): integer ; var iIndizea : integer ; boAurkitua : boolean ; begin iIndizea := BEHEMUGA ; boAurkitua := FALSE ; while (iIndizea <= iZenbat) and not boAurkitua do begin if arNotak[iIndizea] = rZbk then boAurkitua := TRUE else iIndizea := iIndizea + 1 ; end ; if boAurkitua = TRUE then fniBilaketaLineala := iIndizea else fniBilaketaLineala := 0 ; { 0 gezurrezko posizioa litzateke } end ; procedure ArrayaDesberdinekinBete( var arNotak:tarZerrenda; iLuzera: integer ) ; var iIndizea, iPosizioa: integer ; rZbk: real ; begin write ( 'Eman arrayaren ' , BEHEMUGA, '. datua: ' ) ; readln(arNotak[BEHEMUGA]) ; (* Lehen datua beti izango da berria *) for iIndizea:=BEHEMUGA+ 1 to iLuzera do begin repeat write ( 'Eman arrayaren ' , iIndizea, '. datua: ' ) ; readln(rZbk) ; iPosizioa := fniBilaketaLineala(arNotak, iIndizea- 1 , rZbk) ; { bilaketa burutu } if iPosizioa <> 0 then writeln (rZbk: 0 : 2 , ' balioa ' , iPosizioa, '. posizioan dago, beste balio bat aukeratu.' ) else arNotak[iIndizea] := rZbk ; until iPosizioa = 0 ; end ; end ; |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | { ---------------------- PROGRAMA NAGUSIA ---------------------- } var arNotak: tarZerrenda ; iLuzera: integer ; begin repeat write ( 'Zenbat elementu izango dira (' , BEHEMUGA, ' eta ' , GOIMUGA, ' arteko balioa): ' ) ; readln(iLuzera) ; until (iLuzera >= BEHEMUGA) and (iLuzera <= GOIMUGA) ; ArrayaDesberdinekinBete(arNotak, iLuzera) ; ArrayaIkusi(arNotak, iLuzera) ; readln ; end . |
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.