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