2024(e)ko apirilaren 8(a), astelehena

22. Ariketa: erregistroak (I)

ZER DAKIDAN:
Zenbakiak, karaktereak, kateak eta zerrendak (arrayak) lantzeko gai naiz.



ZER IKASIKO DUDAN:
Oinarrizko datu-mota desberdinak egitura bakar batean antolatzen eta gordetzen ikasiko dut, horretarako Record datu-mota funtsezkoa da. Erregistro batek hainbat eremu izango ditu, adibidez: demagun rdFitxa aldagaia erregistro bat dela eta bere eremu baten identifikadorea iAdina dela, eremu horren erreferentzia egiteko ondoko hau idatzi beharko da rdFitxa.iAdina non puntua lokailu berezia den.




ESKATZEN DEN PROGRAMA 

Erregistro baten eremuak datuz bete eta erregistroaren edukia pantailaratzea. Ariketaren erregistroak ibilgailu baten datuak bilduko ditu.

Erregistroaren egitura honako hau da:

1. eremua sMatrikula   'ZZZZ-LLL' formatuko 8 karakteredun kate bat
2. eremua cIbilgailuMota   karaktere bat
3. eremua rdDataUnea   2 eremuko erregistroa (eremu bakoitza 3 osoen array bat)
4. eremua rAldiunekoAbiadura   zenbaki erreal bat

Hauxe da ariketaren programa:

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
{ 22. ariketa: auto bat radar atari azpitik igartzean ondoko datuak   }
{              jaso eta gordetzen dira erregistro aldagai batean:     }
 
{     - Matrikula, karkatere-kate bat                                 }
{     - Ibilgailu mota, karaktere bat                                 }
{     - Data, 3 zenbakien array bat (posizioak: Urtea, Hilea, Eguna)  }
{     - Unea, 3 zenbakien array bat (posizioak: Orduak, Minutuak,     }
{                                                        Segundoak)   } 
{     - Aldi uneko abiadura, zenbaki erreal bat                       }
                        
{  Datuak erdi automatikoki lortuko dira auzazko balioak aukeratuz.   }                  
 
program Ariketa_22 ;
    
type
    tsKateMatrikula = string[8] ;    { ZZZZ-LLL formatuko matrikula }
 
    taiData = array[1..3] of integer { Urtea, Hilea, Eguna }
     
    taiUnea = array[1..3] of integer { Orduak, Minutuak, Segundoak }
     
    trdNoiz = record
                  Eguna : taiData ;
                  Ordua : taiUnea ;
              end ;
               
    trdIbilgailua = record
                       sMatrikula         : tsKateMatrikula ;
                       cIbilgailuMota     : char ;
                       rdDataUnea         : trdNoiz ;
                       rAldiunekoAbiadura : real ;
                    end ;
 
 
procedure IbilgailuarenDatuakJaso(var rdIbilgailua: trdIbilgailua) ;
var
   iZenbat, iAusazkoa, iKont, k : integer ;
   sMatrikula, sMatrikulaZifra : tsKateMatrikula ;
begin
   randomize ;
   iZenbat := 15 + random(16) ;   
   for iKont:=1 to iZenbat do
   begin
      sMatrikula := '' ;
      for k:=1 to 4 do
      begin
         iAusazkoa := random(10) ;
         Str(iAusazkoa, sMatrikulaZifra) ;
         sMatrikula := sMatrikula + sMatrikulaZifra ;       
      end ;
 
      iAusazkoa := random(5) ;
      case iAusazkoa of
         0: rdIbilgailua.sMatrikula := sMatrikula + ' KHS' ;
         1: rdIbilgailua.sMatrikula := sMatrikula + ' BPK' ;
         2: rdIbilgailua.sMatrikula := sMatrikula + ' KKK' ;
         3: rdIbilgailua.sMatrikula := sMatrikula + ' XYZ' ;
         4: rdIbilgailua.sMatrikula := sMatrikula + ' KGB' ;
      end ;
 
      iAusazkoa := random(4) ;
      case iAusazkoa of
         0: rdIbilgailua.cIbilgailuMota := 'A' ;
         1: rdIbilgailua.cIbilgailuMota := 'B' ;
         2: rdIbilgailua.cIbilgailuMota := 'C' ;
         3: rdIbilgailua.cIbilgailuMota := 'D' ;
      end ;
 
      rdIbilgailua.rdDataUnea.Eguna[1] := 2021 ;              (* 2021-01-01 eta 2021-12-28 artean *) 
      rdIbilgailua.rdDataUnea.Eguna[2] := 1 + random(12) ;
      rdIbilgailua.rdDataUnea.Eguna[3] := 1 + random(27) ;
 
      rdIbilgailua.rdDataUnea.Ordua[1] := 13 ;                (* 13:05:00 eta 13:15:59 artean *)
      rdIbilgailua.rdDataUnea.Ordua[2] := 5 + random(11) ;
      rdIbilgailua.rdDataUnea.Ordua[3] := random(60) ;
 
      rdIbilgailua.rAldiunekoAbiadura := 50 + random(131) ;   (* 50.0 eta 180.0 artean *)
   end ;
end ;
 
 
procedure IbilgailuarenDatuakErakutsi(const rdIbilgailua: trdIbilgailua) ;
begin
   writeln('Matrikula: ':20, rdIbilgailua.sMatrikula) ;
    
   writeln('Mota: ':20, rdIbilgailua.cIbilgailuMota) ;
    
   write('Data: ':20) ;
   write(rdIbilgailua.rdDataUnea.Eguna[1], '-') ;
   if rdIbilgailua.rdDataUnea.Eguna[2] >= 10 then
      write(rdIbilgailua.rdDataUnea.Eguna[2], '-')
   else
      write('0', rdIbilgailua.rdDataUnea.Eguna[2], '-') ;  
   if rdIbilgailua.rdDataUnea.Eguna[3] >= 10 then
      writeln(rdIbilgailua.rdDataUnea.Eguna[3])
   else
      writeln('0', rdIbilgailua.rdDataUnea.Eguna[3]) ;
    
   write('Ordua: ':20) ; 
   write(rdIbilgailua.rdDataUnea.Ordua[1], ':') ;
   if rdIbilgailua.rdDataUnea.Ordua[2] >= 10 then
      write(rdIbilgailua.rdDataUnea.Ordua[2], ':')
   else
      write('0', rdIbilgailua.rdDataUnea.Ordua[2], ':') ;
   if rdIbilgailua.rdDataUnea.Ordua[3] >= 10 then
      writeln(rdIbilgailua.rdDataUnea.Ordua[3])
   else
      writeln('0', rdIbilgailua.rdDataUnea.Ordua[3]) ;
       
   writeln('Abiadura: ':20, rdIbilgailua.rAldiunekoAbiadura:6:2) ;     
end ;
 
(* ---------------------- PROGRAMA NAGUSIA ---------------------- *)
     
var
   rdIbilgailua: trdIbilgailua ;
begin
   writeln ;
   writeln ;
   writeln ;
    
   writeln('    Ibilgailuaren datuak eskuratzen... ') ;
   IbilgailuarenDatuakJaso(rdIbilgailua) ;  
   writeln ;
   writeln ;
    
   writeln('    Hona hemen ibilgailuaren datuak:') ;
   IbilgailuarenDatuakErakutsi(rdIbilgailua) ;  
   writeln ;
   writeln ;
       
   readln ;
end.

Programaren balizko exekuzio bat hurrrengo irudian erakusten da:

Erregistroa itzultzen duen funtziorik ez dugu programatuko, gauza bera gertatzen da arrayekin (21. Ariketa: zerrendak (IV))

 

iruzkinik ez:

Argitaratu iruzkina

Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.