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