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, 31. taldeko teoriako blogearen Bilaketa sekuentzialaren aplikazio bat programara jo eta bertako BilaketaLineala izeneko funtzioa erabili gure behar izanetara egokituz, hots, erabili beharko dituen moldapenak eginez.
{ 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.