Erregistroen bi bektore nahastu bakarra lortuz
Laborategiko gelan, gehienez, 25 ikasle izango dira. Ikasleen datuak bi bektoretan biltzen dira, bektore bat lehen azterketari dagokio eta beste bektorea bigarren azterketari dagokio.
Bektoreen elementuak kateak dira, eta bertan izena eta zenbaki bat daude / batez banaturik aurkitzen direlarik, zenbakien kopuru maximoa 9.9 izango eta minimoa 0.0 izango da.
Datuak teklatuaren bitartez ematen dira eta ikasleen posizioak bektoretan zaindu behar dira berdinak izan daitezan, hurrengo adibidean erakusten den bezala: Josu ikaslea lehena da abiapuntuko array bietan.
asAzterketa1 eta asAzterketa2 abiapuntuko bektoreak dira eta ardAzterketak bektorea da lortu behar dena. Hona hemen datuen adibide bat:
asAzterketa1
asAzterketa2
iLuzera
ardAzterketak
iZenbat
ardAzterketak bektorea lortu ondoren zenbait operazio egingo dira. Hona hemen erabilgarri dauzkazun programa nagusia eta azpiprogramen goiburukoak:
program ErregistroenBiArrayNahasten_1 ;
const
BEHEMUGA = 1 ;
GOIMUGA1 = 25 ;
type
tsKatea = string[30] ;
tasAzterketa = array[BEHEMUGA..GOIMUGA1] of tsKatea ;
procedure DatuakSartu(var asAzterketa: tasAzterketa;
VAR iLuzera: integer) ;
begin end ; procedure DatuakIkusi(const asAzterketa: tasAzterketa;
iLuzera: integer) ;
begin end ;
{ =================================================================== }
var
asAzterketa1, asAzterketa2: tasAzterketa ;
iLuzera: integer ;
begin
writeln('1. azterketa:') ;
DatuakSartu(asAzterketa1, iLuzera) ;
writeln ;
writeln('1. azterketaren ') ;
DatuakIkusi(asAzterketa1, iLuzera) ;
writeln ;
writeln('2. azterketa:') ;
DatuakSartu(asAzterketa2, iLuzera) ; (* datuak egoki sartzera *)
writeln ; (* guztiz behartuta gaude *)
writeln('2. azterketaren ') ;
DatuakIkusi(asAzterketa2, iLuzera) ;
writeln ;
{ hemen idatzi ariketan eskatzen dena }
writeln('Programa amaitzera doa.') ;
readln ;
end.
Ariketa honen enuntziatu inprimagarria hemendik hartu, ariketaren planteamendua eta lehen urratsak programa-iturburu honetan daude ErregistroenBiArrayNahastenEMATEKOA.PAS. Honako hauek egin:
Ariketa honek begi bistako hobekuntza du datuak ematerako prozeduretan: bigarren azterketako asAzterketa2 bektorea betetzean lehen azterketako asAzterketa1 bektorearen informazioa aintzat hartu, adibidez prozedura DatuakSartuAurrekoakAintzatHarturik(asAzterketa1, iLuzera, asAzterketa2) idatziz non hiru parametroen jokamoldea sarrera-sarrera-irteera den. program ErregistroenBiArrayNahasten_1 ; const BEHEMUGA = 1 ; GOIMUGA1 = 25 ; type tsKatea = string[30] ; tasAzterketa = array[BEHEMUGA..GOIMUGA1] of tsKatea ;
procedure LehenArrayarenDatuakSartu(var asAzterketa: tasAzterketa;
var iLuzera: integer) ;
begin end ; procedure DatuakIkusi(const asAzterketa: tasAzterketa;
iLuzera: integer) ;
begin
end ; procedure DatuakSartuAurrekoakAintzatHarturik(
iLuzera: integer;
var asAzterketa2: tasAzterketa) ;
begin end ; { --------------------------------------------------------------------------------------------------------------------------------- }
var
asAzterketa1, asAzterketa2: tasAzterketa ;
iLuzera: integer ;
begin
writeln('1. azterketa:') ;
LehenArrayarenDatuakSartu(asAzterketa1, iLuzera) ;
writeln ;
writeln('1. azterketaren ') ;
DatuakIkusi(asAzterketa1, iLuzera) ;
writeln ;
DatuakSartuAurrekoakAintzatHarturik(asAzterketa1, iLuzera, asAzterketa2) ;
writeln('2. azterketaren ') ;
DatuakIkusi(asAzterketa2, iLuzera) ;
writeln ;
{ hemen idatzi ariketan eskatzen dena }
writeln('Programa amaitzera doa.') ;
readln ;
end.
|
Erregistroen bi bektore nahastu (emaitza) Ariketa gehienetan bezala, ariketa honek emaitza bakarra ez du, jarraian bi soluzio ematen dira. Soluzio biren arteko aldea hasierako arrayak betetzean datza.
Lehen soluzioan, azterketa biren arrayak betetzeko DatuakSartu prozedura beraren bitartez egiten da.
Bigarren soluzioan, lehen azterketaren arraya betetzeko LehenArrayarenDatuakSartu prozedura erabiltzen da zein DatuakSartu prozedura bezalakoa den; baina bigarren azterketaren arraya betetzeko, ez da DatuakSartu prozedura aplikatzen DatuakSartuAurrekoakAintzatHarturik prozedura baizik, zein LehenArrayarenDatuakSartu prozeduran emaniko datuetan oinarritzen den.
Hona hemen bi soluzioak:
|
Hauxe da laborategian programatu dugun emaitza:
{---------------------------------------------------------------------------} program ErregistroenBiArrayNahastuzDatuakBateratu ; const BEHEMUGA = 1 ; GOIMUGA = 25 ; type tKate39 = string[39] ; tasAzterketaBat = array[BEHEMUGA..GOIMUGA] of tKate39 ; trdIkaslea = record sIzena: tKate39 ; rNota: real ; end ; tardAzterketak = array[BEHEMUGA..2*GOIMUGA] of trdIkaslea ; {--------------------------------------------------------------------} procedure BiKontrolenDatuakJaso(var asAzterketa1: tasAzterketaBat; var asAzterketa2: tasAzterketaBat; var iLuzera: integer) ; var n: integer ; iUnitatea: integer ; iHamarrekoa: integer ; sUnitatea: tKate39 ; sHamarrekoa: tKate39 ; sIzena: tKate39 ; sNor: tKate39 ; begin repeat write('Ikasleen kopurua eman: ':35) ; readln(iLuzera) ; until (iLuzera >= BEHEMUGA) and (iLuzera <= GOIMUGA) ; randomize ; for n:=BEHEMUGA to iLuzera do begin write(n:10, '. ikaslearen izena eman: ') ; readln(sIzena) ; iUnitatea := random(10) ; (* 0 eta 9 arteko balioa *) iHamarrekoa := random(10) ; (* 0 eta 9 arteko balioa *) str(iUnitatea, sUnitatea) ; str(iHamarrekoa, sHamarrekoa) ; sNor := sIzena + '/' + sUnitatea + '.' + sHamarrekoa ; asAzterketa1[n] := sNor ; iUnitatea := random(10) ; (* 0 eta 9 arteko balioa *) iHamarrekoa := random(10) ; (* 0 eta 9 arteko balioa *) str(iUnitatea, sUnitatea) ; str(iHamarrekoa, sHamarrekoa) ; sNor := sIzena + '/' + sUnitatea + '.' + sHamarrekoa ; asAzterketa2[n] := sNor ; end ; end ; procedure KontrolBatenDatuakIkusi(const asAzterketa: tasAzterketaBat; iLuzera: integer) ; var n: integer ; begin for n:=BEHEMUGA to iLuzera do begin writeln(n:18, '. ikaslea: ', asAzterketa[n]) ; end ; end ; procedure Nahastu(const asAzterketa1: tasAzterketaBat; const asAzterketa2: tasAzterketaBat; iLuzera: integer; var ardAzterketak: tardAzterketak; var iZenbat: integer) ; var n: integer ; sNorZer: tKate39 ; iBanatzaileaNon: integer ; sIzena: tKate39 ; sNota: tKate39 ; rNota: real ; begin iZenbat := 0 ; for n:=BEHEMUGA to iLuzera do begin sNorZer := asAzterketa1[n] ; iBanatzaileaNon := pos('/', sNorZer) ; sIzena := copy(sNorZer, 1, iBanatzaileaNon-1) ; sNota := copy(sNorZer, iBanatzaileaNon+1, 3) ; val(sNota, rNota) ; iZenbat := iZenbat + 1 ; ardAzterketak[iZenbat].sIzena := sIzena ; ardAzterketak[iZenbat].rNota := rNota ; sNorZer := asAzterketa2[n] ; sNota := copy(sNorZer, iBanatzaileaNon+1, 3) ; val(sNota, rNota) ; iZenbat := iZenbat + 1 ; ardAzterketak[iZenbat].sIzena := sIzena ; ardAzterketak[iZenbat].rNota := rNota ; end ; end ; procedure IkasleBatErakutsi(const rdIkasleBat: trdIkaslea) ; begin writeln(rdIkasleBat.sIzena:15, rdIkasleBat.rNota:5:1) ; end ; procedure KontrolBirenDatuakIkusi(const ardAzterketak: tardAzterketak; iZenbat: integer) ; var n: integer ; begin for n:=BEHEMUGA to iZenbat do begin write(n:18, '. ikaslea:') ; IkasleBatErakutsi(ardAzterketak[n]) ; end ; end ; {--------------------------------------------------------------------} var asAzterketa1: tasAzterketaBat ; asAzterketa2: tasAzterketaBat ; iLuzera: integer ; ardAzterketak: tardAzterketak ; iZenbat: integer ; begin writeln ; writeln ; BiKontrolenDatuakJaso(asAzterketa1, asAzterketa2, iLuzera) ; writeln ; writeln('---1. kontolaren informazioa------------------------------') ; KontrolBatenDatuakIkusi(asAzterketa1, iLuzera) ; writeln ; writeln('---2. kontolaren informazioa------------------------------') ; KontrolBatenDatuakIkusi(asAzterketa2, iLuzera) ; Nahastu(asAzterketa1, asAzterketa2, iLuzera, ardAzterketak, iZenbat) ; writeln ; writeln('---Bi kontrolen informazioa-------------------------------') ; KontrolBirenDatuakIkusi(ardAzterketak, iZenbat) ; writeln ; writeln('=====================================================') ; writeln(' RETURN sakatu amaitzeko ') ; writeln('=====================================================') ; readln ; end. |
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.