![]() |
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:
1 2 3 4 5 6 7 8 9 | 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 array ordenatuaren 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 | { 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:
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 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 | 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.