2024(e)ko martxoaren 10(a), igandea

8. astea | kateen adibideak


Katearen karaktereak banan-banan prozesatu.
MaiuskulakMinuskulak.pas
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
{
   Datuaren luzera maximoa 20 karaktere. Karaktereak banan banan
   aztertuz bokal guztiak maiuskuletan jarri eta gainerako
   karaktere guztiak minuskuletan jarri.
    
   Datua ------> KrokodiLO bErDe@ PoziK daGO
   Emaitza ----> krOkOdIlO bErdE@ pOz
}
 
program MaiuskulakMinuskulak ;
type
   tKate20 = string[20] ;
 
 
function fnboBokalaDa(cLetra: char): boolean ;
begin
   case cLetra of
      'a', 'e', 'i', 'o', 'u': fnboBokalaDa := TRUE
      'A', 'E', 'I', 'O', 'U': fnboBokalaDa := TRUE
      else
         fnboBokalaDa := FALSE;
   end ;
end ;
 
 
{-------------------------Programa Nagusia-------------------------}
var
   sEsaldia: tKate20 ;
   k: integer ;
begin
   writeln('//////////////////////////////////////') ;
   writeln ;
   write('Esaldia eman: ') ;
   readln(sEsaldia) ;
 
   writeln('==>', sEsaldia, '<==') ;
    
   for k:=1 to length(sEsaldia) do
   begin
      if fnboBokalaDa(sEsaldia[k]) then
         sEsaldia[k] := upcase(sEsaldia[k])
      else
         sEsaldia[k] := lowercase(sEsaldia[k]) ;  
   end ;
 
   writeln('==>', sEsaldia, '<==') ;
 
   writeln ;
   writeln('//////////////////////////////////////') ;
   readln ;
end.


Bi kateren zatia eskuratu eta zenbaki bihurtu.
BiNotenBatezbestekoa.pas
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
{
    Datua den karaktere-katearen ezaugarriak:
       - Datuaren luzera maximoa 20 karaktere.
       - Datuaren hasieran izen bat dago, adibidez Eleonor izena.
       - Datuaren erdian banatzaile bat agertuko da, # karakterea.
       - Datuaren amaieran nota bat dago, adibidez 7.2 nota
         (beti zifra bat, puntua eta dezimal bakarra).
  
    Datu bi teklatuaren bitartez harturik, notak eskuratu eta
    nota biren batezbestekoa lortu.
    
    Eleonor#7.2
    Paul#6.8
    (7.2+6.8)/2 => 7.0
}
  
program BiNotenBatezbestekoa ;
type
   tKate20 = string[20] ;
  
  
procedure NotaBakandu(sIkaslea: tKate20; var sNota: tKate20) ;
var
   iBanatzaileaNon: integer ;
begin
   iBanatzaileaNon := pos('#', sIkaslea) ;
   writeln(sIkaslea, ' datuan # ', iBanatzaileaNon, '. posizioan') ;
     
   sNota := copy(sIkaslea, iBanatzaileaNon+1, 3) ;
end ;  
  
  
{-------------------------Programa Nagusia-------------------------}  
var
   sIkasle1, sIkasle2, sNota1, sNota2: tKate20 ;
   rNota1, rNota2: real ;
   iErroreaNon1, iErroreaNon2: integer ;
begin
   writeln('//////////////////////////////////////') ;
   writeln ;
   write('Lehen ikaslearen datuak eman (adibidez: Eleonor#7.2): ') ;
   readln(sIkasle1) ;
   write('Bigarren ikaslearen datuak eman (adibidez: Paul#6.8): ') ;
   readln(sIkasle2) ;
  
   writeln('1==>', sIkasle1, '<==1') ;
   writeln('2==>', sIkasle2, '<==2') ;
   writeln ;
     
   NotaBakandu(sIkasle1, sNota1) ;
   writeln('1 sNota ==>', sNota1, '<==') ;
  
   NotaBakandu(sIkasle2, sNota2) ;
   writeln('2 sNota ==>', sNota2, '<==') ;
    
   writeln ;
     
   val(sNota1, rNota1, iErroreaNon1) ;
   writeln('1 rNota ==>', rNota1, '     iErroreaNon1=', iErroreaNon1) ;
   if iErroreaNon1 <> 0 then
      writeln('1==>', sIkasle1, '<==1 datua ez da egokia') ;
        
   val(sNota2, rNota2, iErroreaNon2) ;
   writeln('2 rNota ==>', rNota2, '     iErroreaNon2=', iErroreaNon2) ;
   if iErroreaNon2 <> 0 then
      writeln('2==>', sIkasle2, '<==2 datua ez da egokia') ;
  
   writeln ;     
   if (iErroreaNon1 = 0) and (iErroreaNon2 = 0) then
      writeln('Batezbestekoa = ', (rNota1+rNota2)/2:0:2)
   else
      writeln('Batezbestekoa ezin izan da kalkulatu') ;
     
   writeln ;
   writeln('//////////////////////////////////////') ;
   readln ;
end.


Bi kateren zatia eskuratu eta zenbaki bihurtu. Kontuz 0 posizioaren edukiarekin.
BiNotenBatezbestekoAritmetikoa.pas
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
{
    Datua den karaktere-katearen ezaugarriak:
       - Datuaren luzera maximoa 20 karaktere.
       - Datuaren hasieran izen bat dago, adibidez Eleonor izena.
       - Datuaren amaieran nota bat dago, adibidez 7.2 nota
         (beti zifra bat, puntua eta dezimal bakarra).
  
    Datu bi teklatuaren bitartez harturik, notak eskuratu eta
    nota biren batezbestekoa lortu.
    
    Liudmila7.2
    Kiril6.8
    (7.2+6.8)/2 => 7.0
}
  
program BiNotenBatezbestekoAritmetikoa;
type
   tKate20 = string[20];
  
  
function fnsNotaBakandu(sIkaslea: tKate20): tKate20;
var
   sNota: tKate20;
begin
   sNota := sIkaslea[length(sIkaslea)-2];
   sNota := sNota + sIkaslea[length(sIkaslea)-1]; 
   sNota := sNota + sIkaslea[length(sIkaslea)];
    
   fnsNotaBakandu := sNota;
end;  
  
  
{-------------------------Programa Nagusia-------------------------}  
var
   sIkasle1, sIkasle2, sNota1, sNota2: tKate20;
   rNota1, rNota2: real;
   iErroreaNon1, iErroreaNon2: integer;
begin
   writeln;
   writeln;
   writeln;
   writeln('//////////////////////////////////////');
   writeln;
   write('Lehen ikaslearen datuak eman (adibidez: Liudmila7.2): ');
   readln(sIkasle1);
   write('Bigarren ikaslearen datuak eman (adibidez: Kiril6.8): ');
   readln(sIkasle2);
  
   writeln('1==>', sIkasle1, '<==1');
   writeln('2--|', sIkasle2, '|--2');
   writeln;
     
   sNota1 := fnsNotaBakandu(sIkasle1);
   writeln('1 sNota ==>', sNota1, '<==');
  
   sNota2 := fnsNotaBakandu(sIkasle2);
   writeln('2 sNota --|', sNota2, '|--');
    
   writeln;
     
   Val(sNota1, rNota1, iErroreaNon1);
   writeln('1 rNota ==>', rNota1, '     iErroreaNon1=', iErroreaNon1);
   if iErroreaNon1 <> 0 then
      writeln('1==>', sIkasle1, '<==1 datua ez da egokia');
        
   Val(sNota2, rNota2, iErroreaNon2);
   writeln('2 rNota --|', rNota2, '     iErroreaNon2=', iErroreaNon2);
   if iErroreaNon2 <> 0 then
      writeln('2--|', sIkasle2, '|--2 datua ez da egokia');
  
   writeln;     
   if (iErroreaNon1 = 0) and (iErroreaNon2 = 0) then
      writeln('Batezbestekoa = ', (rNota1+rNota2)/2:0:2)
   else
      writeln('Batezbestekoa ezin izan da kalkulatu');
     
   writeln;
   writeln('//////////////////////////////////////');
   readln;
end.


Hainbat kateren zatia eskuratu eta zenbaki bihurtu.
HainbatNotenBatezbestekoAritmetikoa.pas
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
{
    Datua den karaktere-katearen ezaugarriak:
       - Datuaren luzera maximoa 30 karaktere.
       - Datuaren hasieran letrak daude, izen bati dagozkion letrak
       - Datuaren amaieran nota bat dago, adibidez 7.24 nota edo 6 nota
         edo 5.725 (lehen zifra, puntua eta dezimal batzuk; edo zifra
         bakar bat punturik gabe eta dezimalik gabe).
           
    Zenbat ikasle diren teklatuaren bitartez harturik, notak eskuratu eta
    nota guztien batezbestekoa lortu.
     
    Izaskun7.24
    Pili4.9
    Amagoia5
    Ruy6.3333
      
    (7.24 +4.9 +5 +6.3333) / 4 = 5.868325
}
   
program HainbatNotenBatezbestekoAritmetikoa;
type
   tKate30 = string[30];
   
   
procedure DatuakBakandu(sIkaslea: tKate30; var sIzena, sNota: tKate30);
var
   iLehenZifraNon: integer;
begin
   iLehenZifraNon:= 1;
   while (sIkaslea[iLehenZifraNon] < '0') or (sIkaslea[iLehenZifraNon] > '9') do
      iLehenZifraNon:= iLehenZifraNon +1
      
   sIzena:= copy(sIkaslea, 1, iLehenZifraNon-1);
   sNota:= copy(sIkaslea, iLehenZifraNon,  length(sIkaslea)-iLehenZifraNon+1);
     
   //writeln('sIzena   = ', sIzena);
   //writeln('sNota    = ', sNota);
end;  
   
   
{-------------------------Programa Nagusia-------------------------} 
var
   sIkaslea, sNota, sIzena: tKate30;
   rNota, rBatukaria: real;
   iZenbatIkasle, iKont: integer;
begin
   writeln;
   writeln;
   writeln;
   writeln('///////////////////////////////////////');
   writeln;
   repeat
      write('Zenbat ikasle izango dira (adibidez 4): ');
      readln(iZenbatIkasle);
   until iZenbatIkasle > 0;
   writeln;
     
   rBatukaria:= 0.0;
   for iKont:=1 to iZenbatIkasle do
   begin
      write(iKont, '. ikaslearen datuak (adibidez Eneko7.25 edo Ana3.6666): ');
      readln(sIkaslea);
     
      DatuakBakandu(sIkaslea, sIzena, sNota);
      writeln(iKont, '. ikaslea:  |', sIzena,'|  |', sNota,'|');
       
      val(sNota, rNota);
      writeln(iKont, '. ikaslearen nota = ', rNota:0:6);
      writeln;
        
      rBatukaria:= rBatukaria + rNota;
   end;
         
   writeln('Batezbestekoa = ', rBatukaria/iZenbatIkasle:0:6);
      
   writeln;
   writeln('///////////////////////////////////////');
   readln;
end.


Hainbat kateren zatia eskuratu eta zenbaki bihurtu.
HainbatNotenBatezbestekoa.pas
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
{
    Datua den karaktere-katearen ezaugarriak:
       - Datuaren luzera maximoa 30 karaktere.
       - Datuaren hasieran izen bat dago, adibidez Eleonor izena.
       - Datuaren erdian nota bat dago, adibidez +7.2 nota edo -6.8 nota
         (zeinua, lehen zifra, puntua eta dezimal bakarra).
       - Datuaren amaieran abizena dago, adibidez Iza abizena.
          
    Zenbat ikasle diren teklatuaren bitartez harturik, notak eskuratu eta
    nota guztien batezbestekoa lortu.
    
    Eleonor+7.2Iza
    Paul-6.8Salazar
    Amagoia+5.5Lakarra
    Ruy-4.9Ruiz
     
    (7.2 -6.8 +5.5 -4.9) / 4 = 0.25
}
  
program HainbatNotenBatezbestekoa ;
type
   tKate30 = string[30] ;
  
  
procedure NotaBakandu(sIkaslea: tKate30; var sIzena, sAbizena, sNota: tKate30) ;
var
   iBanatzaileaNon: integer ;
begin
   iBanatzaileaNon := pos('+', sIkaslea) ;
   if iBanatzaileaNon = 0 then
      iBanatzaileaNon := pos('-', sIkaslea) ;
       
   writeln('Banatzailearen posizioa ', iBanatzaileaNon, ' da') ;  
     
   sIzena := copy(sIkaslea, 1, iBanatzaileaNon-1) ;
   sNota := copy(sIkaslea, iBanatzaileaNon, 4) ;
   sAbizena := copy(sIkaslea, iBanatzaileaNon+4, length(sIkaslea)-iBanatzaileaNon+4) ;
    
   writeln('sIzena   = ', sIzena) ;
   writeln('sNota    = ', sNota) ;
   writeln('sAbizena = ', sAbizena) ;
end ;  
  
  
{-------------------------Programa Nagusia-------------------------}  
var
   sIkaslea, sNota, sIzena, sAbizena: tKate30 ;
   rNota, rBatukaria: real ;
   iZenbatIkasle, k, iErroreaNon: integer ;
begin
   writeln('//////////////////////////////////////') ;
   writeln ;
   repeat
      write('Zenbat ikasle izango dira (adibidez 4): ') ;
      readln(iZenbatIkasle) ;
   until iZenbatIkasle > 0 ;
    
   rBatukaria := 0.0 ;
   for k:=1 to iZenbatIkasle do
   begin
      write(k, '. ikaslearen datuak (adibidez: Ruy+7.2Ruiz): ') ;
      readln(sIkaslea) ;
    
      writeln ;
      writeln('datua ==>', sIkaslea, '<==') ;
    
      NotaBakandu(sIkaslea, sIzena, sAbizena, sNota) ;
      writeln(k, '. ikaslea:  |', sIzena,'|  |', sAbizena,'|  |', sNota,'|') ;
      
      writeln ;
      val(sNota, rNota, iErroreaNon) ;
      //writeln(k, '. ikaslea:   rNota = ', rNota:0:1, '   iErroreaNon = ', iErroreaNon) ;
       
      rBatukaria := rBatukaria + rNota ;
   end ;
      
   writeln
   writeln('Batezbestekoa = ', rBatukaria/iZenbatIkasle:0:3) ;
     
   writeln ;
   writeln('//////////////////////////////////////') ;
   readln ;
end.


Datuen egokitasuna zainduz, hainbat kateren zatia eskuratu eta zenbaki bihurtu.
HainbatNotenBatezbestekoa_DatuakKontrolatuz.pas
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
{
    Datua den karaktere-katearen ezaugarriak:
       - Datuaren luzera maximoa 30 karaktere.
       - Datuaren hasieran izen bat dago, adibidez Eleonor izena.
       - Datuaren erdian nota bat dago, adibidez +7.2 nota edo -6.8 nota
         (zeinua, lehen zifra, puntua eta dezimal bakarra).
       - Datuaren amaieran abizena dago, adibidez Iza abizena.      
  
    Zenbat ikasle diren teklatuaren bitartez harturik, ikaslearen datuak hartu eta
    egokitasuna frogatu ondoren nota eskuratu, nota guztien batezbestekoa lortzeko.
    
    Eleonor+7.2Iza
    Paul-6.8Salazar
    Amagoia+5.5Lakarra
    Ruy-4.9Ruiz
     
    (7.2 -6.8 +5.5 -4.9) / 4 = 0.25
}
  
program KatearenEgokitasunaKontrolatu ;
type
   tKate30 = string[30] ;
  
  
function fnboDatuaEgokiaDa(sIkaslea: tkate30): boolean ;
var
   iZeinuaNon, iErroreaNon: integer ;
   sNota: tkate30 ;
   rNota: real ;
begin
   fnboDatuaEgokiaDa := TRUE ;
    
   if (pos('+', sIkaslea) = 0) and (pos('-', sIkaslea) = 0) then
   begin
      writeln('Zeinua falta da!!!') ;
      fnboDatuaEgokiaDa := FALSE ;
   end ;
    
   if (pos('+', sIkaslea) <> 0) or (pos('-', sIkaslea) <> 0) then
   begin
      if pos('+', sIkaslea) = 0 then
         iZeinuaNon := pos('-', sIkaslea)
      else 
         iZeinuaNon := pos('+', sIkaslea) ;
      
      sNota := copy(sIkaslea, iZeinuaNon, 4) ;
      writeln('sNota = |', sNota,'|') ;
      val(sNota, rNota, iErroreaNon) ;
      if iErroreaNon <> 0 then
      begin
         writeln('Zifrak edo puntua oker, notaren ', iErroreaNon, '. posizioan errorea dago!!!') ;
         fnboDatuaEgokiaDa := FALSE ;
      end
      else  (* zeinua eta nota ondo daudenean *)
      begin
         if iZeinuaNon = 1 then
         begin
            writeln('Izena falta da!!!') ;
            fnboDatuaEgokiaDa := FALSE ;
         end ;
         if iZeinuaNon+3 = length(sIkaslea) then
         begin
            writeln('Abizena falta da!!!') ;
            fnboDatuaEgokiaDa := FALSE ;
         end ;
      end ;
   end
end ;
 
  
procedure DatuakBakandu(sIkaslea: tKate30; var sIzena, sAbizena, sNota: tKate30) ;
var
   iBanatzaileaNon: integer ;
begin
   iBanatzaileaNon := pos('+', sIkaslea) ;
   if iBanatzaileaNon = 0 then
      iBanatzaileaNon := pos('-', sIkaslea) ;
       
   writeln('Zeinuaren posizioa ', iBanatzaileaNon, ' da') ;  
     
   sIzena := copy(sIkaslea, 1, iBanatzaileaNon-1) ;
   sNota := copy(sIkaslea, iBanatzaileaNon, 4) ;
   sAbizena := copy(sIkaslea, iBanatzaileaNon+4, length(sIkaslea)-iBanatzaileaNon+4) ;
    
   writeln('sIzena   = ', sIzena) ;
   writeln('sNota    = ', sNota) ;
   writeln('sAbizena = ', sAbizena) ;
end ;  
  
   
{-------------------------Programa Nagusia-------------------------}  
var
   sIkaslea, sNota, sIzena, sAbizena: tKate30 ;
   rNota, rBatukaria: real ;
   iZenbatIkasle, k: integer ;
   boDatuaEgokiaDa: boolean ;
begin
   writeln('//////////////////////////////////////') ;
   writeln ;
   repeat
      write('Zenbat ikasle izango dira (adibidez 4): ') ;
      readln(iZenbatIkasle) ;
   until iZenbatIkasle > 0 ;
   writeln ;
    
   rBatukaria := 0.0 ;
   for k:=1 to iZenbatIkasle do
   begin
      repeat
         write(k, '. ikaslearen datuak (adibidez: Ruy+7.2Ruiz): ') ;
         readln(sIkaslea) ;
         boDatuaEgokiaDa := fnboDatuaEgokiaDa(sIkaslea) ;
         if not boDatuaEgokiaDa then
         begin
            writeln('Datua berriro errepikatu!!!') ;
            writeln ;
         end ;  
      until boDatuaEgokiaDa ;
    
      writeln ;
      writeln('datua ==>', sIkaslea, '<==') ;
    
      DatuakBakandu(sIkaslea, sIzena, sAbizena, sNota) ;
      writeln(k, '. ikaslea:  |', sIzena,'|  |', sAbizena,'|  |', sNota,'|') ;
      
      writeln ;
      val(sNota, rNota) ;
       
      rBatukaria := rBatukaria + rNota ;
   end ;
      
   writeln
   writeln('Batezbestekoa = ', rBatukaria/iZenbatIkasle:0:3) ;
     
   writeln ;
   writeln('//////////////////////////////////////') ;
   readln ;
end.
 

iruzkinik ez:

Argitaratu iruzkina

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