![]() |
Array laguntzaile bat erabiliko dugu |
Txertaketa array batean algoritmoari esker, posizio jakin batean elementu berri bat tartekatzen da arrayean (beti ere tokirik balego arrayean), baina algoritmo hori zaila bihurtzen da elementu bat baino gehiago txertatu behar direnean. Array bateko zenbait elementu txertatzeko algoritmo hau erabiliko dugu: 07a_HainbatTxertaketa.pas non zenbat elementu berri eta non sartuko diren teklatuz emaniko datuak diren:
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 | (* Bektore laguntzaile bat erabiltzen da emaitza eskuratzeko. Benetan *) (* algoritmo hau ez da ezabaketa bat arraya zatika prozesatzea baizik. *) program HainbatTxertaketaArrayetan_A; (* HainbatTxertaketaArrayLaguntzailez *) const BEHEMUGA = 1 ; GOIMUGA = 20 ; type tarZerrenda = array [BEHEMUGA .. GOIMUGA] of real ; procedure ArrayaBete( var arNotak: tarZerrenda; var iLuzera: integer ); var iIndizea: integer ; begin randomize; iLuzera := random(GOIMUGA) + 1 ; writeln ( 'arrayan ' , iLuzera, ' datu gordetzen' ); for iIndizea:=BEHEMUGA to iLuzera do begin arNotak[iIndizea] := 10 *random; { 0.00 eta 9.99 arteko balioak } end ; end ; procedure ArrayaIkusi( const arNotak: tarZerrenda; iLuzera: integer ); var iIndizea: integer ; begin writeln ( 'arrayaren edukia: ' ); for iIndizea:=BEHEMUGA to iLuzera do begin writeln (iIndizea: 9 , '. nota = ' , arNotak[iIndizea]: 0 : 3 ); end ; writeln ; end ; procedure HainbatTartekaketa( var arNotak: tarZerrenda; var iLuzera: integer ; iNondik: integer ; iZenbat: integer ); var iIndizea: integer ; arBerriak: tarZerrenda; arLaguntzailea: tarZerrenda; iLuzeraLagun: integer ; begin for iIndizea:= 1 to iZenbat do begin write ( 'Eman sortaren ' , iIndizea, '. zenbaki berriaren balioa: ' ); readln(arBerriak[iIndizea]); end ; iLuzeraLagun := 0 ; for iIndizea:= 1 to iNondik- 1 do begin iLuzeraLagun := iLuzeraLagun + 1 ; arLaguntzailea[iLuzeraLagun] := arNotak[iIndizea]; end ; for iIndizea:= 1 to iZenbat do begin iLuzeraLagun := iLuzeraLagun + 1 ; arLaguntzailea[iLuzeraLagun] := arBerriak[iIndizea]; end ; for iIndizea:=iNondik to iLuzera do begin iLuzeraLagun := iLuzeraLagun + 1 ; arLaguntzailea[iLuzeraLagun] := arNotak[iIndizea]; end ; arNotak := arLaguntzailea; iLuzera := iLuzeraLagun; end ; { ---------------------- PROGRAMA NAGUSIA ---------------------- } var arNotak: tarZerrenda; iLuzera, iZenbat, iNondik: integer ; begin writeln ; ArrayaBete(arNotak, iLuzera); ArrayaIkusi(arNotak, iLuzera); repeat write ( 'Eman zenbat nota berri txertatuko diren: ' ); readln(iZenbat); if iZenbat > GOIMUGA-iLuzera then writeln ( 'arrayan gehienez ' , GOIMUGA-iLuzera, ' elementu berri txerta daitezke.' ); until (iZenbat >= 1 ) and (iZenbat <= GOIMUGA-iLuzera); repeat write ( 'Zenbaki berrien sortaren hasierako posizioa arrayan: ' ); readln(iNondik); if (iNondik < BEHEMUGA) or (iNondik > iLuzera+ 1 ) then writeln ( 'hasierako posizioa ' , BEHEMUGA, ' eta ' , iLuzera+ 1 , ' artekoa izan dadila.' ); until (iNondik >= BEHEMUGA) and (iNondik <= iLuzera+ 1 ); HainbatTartekaketa(arNotak, iLuzera, iNondik, iZenbat); ArrayaIkusi(arNotak, iLuzera); readln; end . |
Algoritmo honek aurrekoak bezala emaitza bera eskaintzen du, baina zailagoa delakoan gaude.
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 | (* Azken emaitza eskuratzeko, bektore laguntzailerik ez da erabiltzen. *) (* Txertatu beharreko elementuak banan banan sartzen dira, akzioa errepikatuz. *) program HainbatTxertaketaArrayetan_B; (* HainbatTxertaketaArrayLaguntzailerikGabe *) const BEHEMUGA = 1 ; GOIMUGA = 20 ; type tarZerrenda = array [BEHEMUGA .. GOIMUGA] of real ; procedure ArrayaBete( var arNotak: tarZerrenda; var iLuzera: integer ); var iIndizea: integer ; begin randomize; iLuzera := random(GOIMUGA) + 1 ; writeln ( 'arrayan ' , iLuzera, ' datu gordetzen' ); for iIndizea:=BEHEMUGA to iLuzera do begin arNotak[iIndizea] := 10 *random; { 0.00 eta 9.99 arteko balioak } end ; end ; procedure ArrayaIkusi( const arNotak: tarZerrenda; iLuzera: integer ); var iIndizea: integer ; begin writeln ( 'arrayaren edukia: ' ); for iIndizea:=BEHEMUGA to iLuzera do begin writeln (iIndizea: 9 , '. nota = ' , arNotak[iIndizea]: 0 : 3 ); end ; writeln ; end ; procedure BatTartekakatu( var arNotak: tarZerrenda; var iLuzera: integer ; rElementua: real ; iNon: integer ); var iIndizea: integer ; begin for iIndizea:=iLuzera downto iNon do begin arNotak[iIndizea+ 1 ] := arNotak[iIndizea]; end ; arNotak[iNon] := rElementua; iLuzera := iLuzera + 1 ; end ; procedure HainbatTartekaketa( var arNotak: tarZerrenda; var iLuzera: integer ; iNondik: integer ; iZenbat: integer ); var iIndizea, iNon: integer ; rElementuBerria: real ; begin iNon := iNondik; for iIndizea:= 1 to iZenbat do begin write ( 'Eman sortaren ' , iIndizea, '. zenbaki berriaren balioa: ' ); readln(rElementuBerria); BatTartekakatu(arNotak, iLuzera, rElementuBerria, iNon); iNon := iNon + 1 ; end ; end ; { ---------------------- PROGRAMA NAGUSIA ---------------------- } var arNotak: tarZerrenda; iLuzera, iZenbat, iNondik: integer ; begin writeln ; ArrayaBete(arNotak, iLuzera); ArrayaIkusi(arNotak, iLuzera); repeat write ( 'Eman zenbat nota berri txertatuko diren: ' ); readln(iZenbat); if iZenbat > GOIMUGA-iLuzera then writeln ( 'arrayan gehienez ' , GOIMUGA-iLuzera, ' elementu berri txerta daitezke.' ); until (iZenbat >= 1 ) and (iZenbat <= GOIMUGA-iLuzera); repeat write ( 'Zenbaki berrien sortaren hasierako posizioa arrayan: ' ); readln(iNondik); if (iNondik < BEHEMUGA) or (iNondik > iLuzera+ 1 ) then writeln ( 'hasierako posizioa ' , BEHEMUGA, ' eta ' , iLuzera+ 1 , ' artekoa izan dadila.' ); until (iNondik >= BEHEMUGA) and (iNondik <= iLuzera+ 1 ); HainbatTartekaketa(arNotak, iLuzera, iNondik, iZenbat); ArrayaIkusi(arNotak, iLuzera); readln; end . |
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.