2024(e)ko apirilaren 4(a), osteguna

11. astea | erregistroen bi bektore nahastu bektore bakar batean


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
‘Josu/6.1’
‘Ane/7.6’
‘Mikel/2.7’
1
2
3

asAzterketa2
‘Josu/6.9’
‘Ane/5.4’
‘Mikel/6.3’
1
2
3

iLuzera
3



ardAzterketak
‘Josu’
‘Josu’
‘Ane’
‘Ane’
‘Mikel’
‘Mikel’
6.1
6.9
7.6
5.4
2.7
6.3
1
2
3
4
5
6

iZenbat
6



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:
  1. ardAzterketak arrayarekin lan eginez, ikasgelako ikasle baten izena eman (Ane adibidez) eta kalifikazioa orokorra erakutsi (bere noten batezbesteko aritmetikoa)
  2. ardAzterketak arrayarekin lan eginez, lehen azterketako kalifikazioetatik lortzen den batezbesteko aritmetikoa kalkulatu
  3. ardAzterketak arrayarekin lan eginez, bigarren azterketako kalifikazioetatik lortzen den batezbesteko aritmetikoa kalkulatu
  4. ardAzterketak arrayarekin lan eginez, nork lortu du notarik onena eta zein azterketan gertatu da
  5. ardAzterketak arrayarekin lan eginez, ikasgelako ikasle baten izena eman (Ane adibidez) eta aurkitzen bada bere kalifikazioak aldatu
  6. ardAzterketak arrayarekin lan eginez, ikasgelako ikasle baten izena eman (Ane adibidez) eta aurkitzen bada arraytik ezabatu
  7. ardAzterketak arrayarekin lan eginez, ikasle aprobatuen zerrenda erakutsi pantailan (ikasle bat aprobatuko du bere nota biren batezbesteko artrmetikoa 5.0 edo handiagoa bada)
  8. ardAzterketak arrayarekin lan eginez, arraya ordenatu/sailkatu ikasleen izenen arabera
  9. ardAzterketak arrayarekin lan eginez, ...



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(const asAzterketa1: tasAzterketa;
                                                         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:
  • ErregistroenBiArrayNahasten1.pas
  • ErregistroenBiArrayNahasten2.pas


Hauxe da laborategian programatu dugun emaitza:

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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
{---------------------------------------------------------------------------}  
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.