ZER DAKIDAN: Zenbakiak, karaktereak eta kateak lantzeko gai naiz. ZER IKASIKO DUDAN: Oinarrizko datu-mota bateko balioak zerrendetan antolatzen eta gordetzen ikasiko dut. Horretarako Array datu-mota funtsezkoa da. Array datu-motako aldagai batek bere elementuak elkar ondoan kokatzen ditu memorian eta elementu bakoitzari erreferentzia egiteko indize bat erabiltzen da. |
ESKATZEN DEN PROGRAMA (I)
Karaktereekin lan eginez, 1 eta 10 arteko karaktereen zerrenda bat lortu nahi da. Baina, zerrendan ez da onartuko karaktere errepikaturik.
Hauxe da ariketaren programa:
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 | { 18. ariketa: hainbat karakteren zerrenda osatu ondoko baldintzekin: } { - Karakteren kopurua 1 eta 10 artekoa izango da } { - Karakatereak ez dira errepikatuko zerrendan } program Ariketa_18_I ; const BEHEMUGA = 1 ; GOIMUGA = 10 ; type tacZerrenda = array [BEHEMUGA .. GOIMUGA] of char ; { Bilaketa gauzatzeko funtzioan while-DO egitura erabiltzen da } function fniDatuaZerrendanBilatu( const acLetrak: tacZerrenda; iZenbat: integer ; cKarak: char ): integer ; var iIndizea : integer ; boAurkitua : boolean ; begin iIndizea := BEHEMUGA ; boAurkitua := FALSE ; while (iIndizea <= iZenbat) and not boAurkitua do begin if acLetrak[iIndizea] = cKarak then boAurkitua := TRUE else iIndizea := iIndizea + 1 ; end ; if boAurkitua = TRUE then fniDatuaZerrendanBilatu := iIndizea else fniDatuaZerrendanBilatu := 0 ; { 0 gezurrezko posizioa litzateke } end ; procedure ZerrendaDatuDesberdinekinBete( var acLetrak: tacZerrenda; iLuzera: integer ) ; var iIndizea, iPosizioa: integer ; cKarak: char ; begin write ( ' Eman zerrendaren ' , BEHEMUGA, '. datua: ' ) ; readln(acLetrak[BEHEMUGA]) ; (* Lehen datua beti izango da berria *) for iIndizea:=BEHEMUGA+ 1 to iLuzera do begin repeat write ( ' Eman zerrendaren ' , iIndizea, '. datua: ' ) ; readln(cKarak) ; cKarak := upcase(cKarak) ; iPosizioa := fniDatuaZerrendanBilatu(acLetrak, iIndizea- 1 , cKarak) ; if iPosizioa <> 0 then writeln (cKarak: 9 , ' balioa ' , iPosizioa, '. posizioan dago, beste balio bat aukeratu.' ) else acLetrak[iIndizea] := cKarak ; until iPosizioa = 0 ; end ; end ; procedure ZerrendarenEdukiaIkusi( const acLetrak: tacZerrenda; iLuzera: integer ) ; var iIndizea: integer ; begin writeln ( ' Zerrendaren edukia: ' ) ; for iIndizea:=BEHEMUGA to iLuzera do begin writeln (iIndizea: 4 , '. karakterea = ' , acLetrak[iIndizea]) ; end ; writeln ; end ; { ---------------------- PROGRAMA NAGUSIA ---------------------- } var acLetrak: tacZerrenda ; iLuzera: integer ; begin writeln ; writeln ; writeln ; repeat write ( ' Zenbat elementu izango dira (' , BEHEMUGA, ' eta ' , GOIMUGA, ' arteko balioa): ' ) ; readln(iLuzera) ; until (iLuzera >= BEHEMUGA) and (iLuzera <= GOIMUGA) ; writeln ; ZerrendaDatuDesberdinekinBete(acLetrak, iLuzera) ; writeln ; ZerrendarenEdukiaIkusi(acLetrak, iLuzera) ; readln ; end . |
Programaren balizko exekuzio bat hurrrengo irudian erakusten da:
ESKATZEN DEN PROGRAMA (II)
Aurreko programaren aldaera bat: Karaktereekin lan egin ordez kateekin lan egin daiteke, hots, autoen matrikulak jaso daitezke zerrenda batean matrikula errepikatuak onartu gabe.
Hauxe da programaren aldaerak zerrendarako definituko duen datu-mota:
1 2 3 4 5 6 7 8 9 10 11 12 13 | { 18. ariketa: hainbat matrikulen zerrenda osatu ondoko baldintzekin: } { - Matrikulen kopurua 1 eta 10 artekoa izango da } { - Matrikulak ez dira errepikatuko zerrendan } program Ariketa_18_II ; const BEHEMUGA = 1 ; GOIMUGA = 10 ; type tsMatrikula = string [ 8 ] ; tasZerrenda = array [BEHEMUGA .. GOIMUGA] of tsMatrikula ; ... |
|
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.