![]() |
kaosa sortzen |
Erregistroen array bat daukagu. Erregistroak bi eremuz osaturik daude kate bat eta zenbaki bat. Erregistroen arrayaren datuak konstante diren bi arrayetatik hartzen dira. Erregistroen arrayaren datu-mota:
const iZENBATIKASLE = 10; type tsKate49 = string[49]; trdIkasle = record sNor: tsKate49; rNota: real; end; tardIkasleak = array[1..iZENBATIKASLE] of trdIkasle;
asIZENAK array konstantea eta ordenatua da, arNOTAK array konstantea da. Bi array horietaz oinarriturik balioak hartuko ditu ardIkasleak arrayak zein alfabetikoki ordenaturik egongo den ere. ardIkasleak arrayaren elementuak posizioz nahastuz lortuko da emaitza den ardKaotikoak arraya.
Nahasketa burutzen duen ZerrendaNahastu prozeduran datu-mota berezi pare bat sortuko dugu, trdLaguntzaile erregistroa eta tardLaguntzaile arraya. Programaren gainerako tokietan erabilpenik ez dutenez, datu-mota espezifiko horiek ZerrendaNahastu prozedura barruan sortzen dira:
{ bi datu-mota berri sortzen dira, soilik prozedura honetan erabiliko direnak } procedure ZerrendaNahastu(const ardIkasleak: tardIkasleak; iLuzera: integer; var ardKaotikoak: tardIkasleak); type trdLaguntzaile = record rdIkaslea: trdIkasle; boGordeta: boolean; end; tardLaguntzaile = array[1..iZENBATIKASLE] of trdLaguntzaile; var ardLaguntzailea: tardLaguntzaile; ...
Array ordenatu bat desordenatzen duen programa hau izan daiteke:
program KaosaSortzenArrayBatean; uses crt; const iZENBATIKASLE = 12; type tsKate49 = string[49]; tasIzenenZerrenda = array[1..iZENBATIKASLE] of tsKate49; tarNotenZerrenda = array[1..iZENBATIKASLE] of real; const asIZENAK: tasIzenenZerrenda = ('AGIRRE ROMERO, UNAI', // 01 'ANGULEMA CARAZO, JON ANDER', // 02 'BIKARREGI IGLESIAS, JULEN', // 03 'CANO RUIZ DE HEREDIA, JULIAN', // 04 'CORRAL EGIA, JOSEBA ANDONI', // 05 'DIAZ DE ULZURRUN, ROY, LEONOR', // 06 'EGIGUREN MARKINEZ, IRUNE', // 07 'ERKIAGA ANDONEGI, IKER', // 08 'FERNANDEZ FEITO, FELIX', // 09 'GARTZIA DE ALZA GIL, KATALIN', // 10 'HERRANZ MARTINEZ, REBECA', // 11 'IRAGORRI COTANO, MARTIN'); // 12 const arNOTAK: tarNotenZerrenda = (4.6, // 01 3.2, // 02 5.7, // 03 4.8, // 04 5.1, // 05 6.1, // 06 7.3, // 07 7.6, // 08 2.8, // 09 9.2, // 10 2.9, // 11 8.5); // 12 type trdIkasle = record sNor: tsKate49; rNota: real; end; tardIkasleak = array[1..iZENBATIKASLE] of trdIkasle; { ikasleen izenak eta notak array konstanteetan daude } procedure DatuakBildu(var ardIkasleak: tardIkasleak; iLuzera: integer); var k: integer; begin for k:=1 to iLuzera do begin ardIkasleak[k].sNor := asIZENAK[k]; ardIkasleak[k].rNota := arNOTAK[k]; end; end; { ikasleen izenak eta notak array konstanteetan daude } procedure DatuakIkusi(const ardIkasleak: tardIkasleak; iLuzera: integer); var k: integer; begin for k:=1 to iLuzera do begin writeln(k:10, ' . ikaslea: ', ardIkasleak[k].sNor:40, ardIkasleak[k].rNota:10:1); end; end; { bi datu-mota berri sortzen dira, soilik prozedura honetan erabiliko direnak } procedure ZerrendaNahastu(const ardIkasleak: tardIkasleak; iLuzera: integer; var ardKaotikoak: tardIkasleak); type trdLaguntzaile = record rdIkaslea: trdIkasle; boGordeta: boolean; end; tardLaguntzaile = array[1..iZENBATIKASLE] of trdLaguntzaile; var ardLaguntzailea: tardLaguntzaile; k, iZbk: integer; begin for k:=1 to iLUZERA do begin ardLaguntzailea[k].boGordeta := FALSE; end; randomize; for k:=1 to iLuzera do begin repeat iZbk := random(iLUZERA) + 1; until ardLaguntzailea[iZbk].boGordeta = FALSE; ardLaguntzailea[iZbk].boGordeta := TRUE; ardLaguntzailea[iZbk].rdIkaslea := ardIkasleak[k]; end; for k:=1 to iLUZERA do begin ardKaotikoak[k] := ardLaguntzailea[k].rdIkaslea; end; end; { ---------------------------------- Programa Nagusia ---------------------------------- } var ardIkasleak: tardIkasleak; iLuzera: integer; ardKaotikoak: tardIkasleak; begin clrscr; repeat write('Zenbat ikasle dira? (1 eta ', iZENBATIKASLE, ' artean): '); readln(iLuzera); until (iLuzera >= 1) and (iLuzera <= iZENBATIKASLE); DatuakBildu(ardIkasleak, iLuzera); { izenak eta notak ez dira parametro, konstante direlako } writeln; writeln('--Nahastu aurretik----------------------------------------------------------'); DatuakIkusi(ardIkasleak, iLuzera); writeln; ZerrendaNahastu(ardIkasleak, iLuzera, ardKaotikoak); writeln('--Nahastu ondoren-----------------------------------------------------------'); DatuakIkusi(ardKaotikoak, iLuzera); writeln; repeat until keypressed; end.
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.