Zenbait ikasleren noten batezbesteko aritmetikoa kalkulatu behar da. Ikasle bakoitzaren nota, bere izena eta bere deiturarekin batera dator.
Ikasleen kopurua programaren hasieran irakurriko da, eta kopuru hori teklatuz ematean karaktere-kate bat erabiliko da. Horrela, kopurua onargarria dela ziurtatu ahalko da eta ondorioz exekuzio-denborako errorerik ez da gertatuko.
Ikaslearen datua ere, karaktere-kate bat izango da. Ikasle jakin baten datua den karaktere-katearen ezaugarriak:
- Datuaren luzera maximoa 30 karaktere
- Datuan izena, deitura eta nota daude
- Notak hainbat zifra ditu eta edozein tokitan izan daitezke:
- Gutxienez zifra bat dago
- Lehen zifra unitatea da eta gainerakoak hamartarrak
- Zifrak ez dira zertan jarraian egon behar
- Suposatu notarik txikiena 0 dela eta handiena 9.999 dela
- Letrak direla eta, izena deitura baino lehenago dago
- Izena letra larriz hasten da eta gainerakoak minuskulak dira
- Deitura letra larriz hasten da eta gainerakoak minuskulak dira
Zenbat ikasle diren teklatuaren bitartez harturik, datuak eman, notak eskuratu eta nota guztien batezbestekoa kalkulatu. Adibidez:
Eleo72norIz1a ------> 7.21
Peru6Sala8zar ------> 6.8
AmagoiaLaka5rra ----> 5
4RuyRuiz91 ---------> 4.91
(+7.21 +6.8 +5 +4.91) / 4 = 5.98
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 | { Datuaren luzera maximoa 30 karaktere. Datuak banan banan aztertuz izena, deitura eta nota lortu. Nota guztien batezbestekoa kalkulatu. Programaren hasiera. Non ikasleen kopurua irakurtzen den eta for prozesu errepikakorrean DatuakBakandu() prozedurari deitzen zaion, azkenean noten batezbesteko aritmetikoa erakusten den. } program ZenbaitNotenBatezbestekoAritmetikoa_HASIERA; type tsKate30 = string [ 30 ]; procedure DatuakBakandu(sIkaslea: tsKate30; var sIzena, sAbizena, sNota: tsKate30); begin end ; {-------------------------Programa Nagusia-------------------------} var sZenbat, sIkaslea, sNota, sIzena, sAbizena: tsKate30; rNota, rBatukaria: real ; iZenbatIkasle, iKont, iErroreaNon: integer ; begin writeln ( '//////////////////////////////////////' ); writeln ; repeat write ( 'Zenbat ikasle izango dira (adibidez 4): ' ); readln(sZenbat); val (sZenbat, iZenbatIkasle, iErroreaNon); if iErroreaNon <> 0 then writeln ( 'Datu okerra ' , iErroreaNon, '. posizioko karakterea onargarria ez delako.' ) else if iZenbatIkasle <= 0 then writeln ( 'Ikasleen kopurua gutxienez 1 izan behar da.' ); until (iZenbatIkasle > 0 ) and (iErroreaNon = 0 ); rBatukaria := 0.0 ; for iKont:= 1 to iZenbatIkasle do begin // DatuakBakandu(sIkaslea, sIzena, sAbizena, sNota); end ; writeln ; writeln ( 'Batezbestekoa = ' , rBatukaria/iZenbatIkasle: 0 : 3 ); writeln ; writeln ( '//////////////////////////////////////' ) ; readln ; end . |
![]() |
Koloreen bitartez adierazten da pantailan idatzitakoa zein modulutik datorren (handiago ikusteko irudiaren gainean klik egin) |
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 | { Zenbait ikasleren noten batezbesteko aritmetikoa kalkulatu behar da. Ikasle bakoitzaren nota, bere izena eta deiturarekin batera dator. Ikasleen kopurua programaren hasieran irakurriko da, eta kopuru hori teklatuz ematean karaktere-kate bat erabiliko da. Horrela, kopurua onargarria dela ziurtatu ahalko da eta ondorioz exekuzio-denborako errorerik ez da gertatuko. Ikasle jakin baten datua den karaktere-katearen ezaugarriak: - Datuaren luzera maximoa 30 karaktere - Datuan izena, deitura eta nota daude - Notak hainbat zifra ditu eta edozein tokitan izan daitezke: * Gutxienez zifra bat dago * Lehen zifra unitatea da eta gainerakoak hamartarrak * Zifrak ez dira zertan jarraian egon behar * Suposatu notarik txikiena 0 dela eta handiena 9.999 dela - Letrak direla eta, izena deitura baino lehenago dago - Izena letra larriz hasten da eta gainerakoak minuskulak dira - Deitura letra larriz hasten da eta gainerakoak minuskulak dira Zenbat ikasle diren teklatuaren bitartez harturik, datuak eman, notak eskuratu eta nota guztien batezbestekoa kalkulatu. Adibidez: Eleo72norIz1a ------> 7.21 Peru6Sala8zarc AmagoiaLaka5rra ------> 5 4RuyRuiz91 ------> 4.91 (+7.21 +6.8 +5 +4.91)/4 = 5.98 } program ZenbaitNotenBatezbestekoAritmetikoa; uses crt; type tsKate30 = string [ 30 ]; procedure IzenAbizen_Nota(sIkaslea: tsKate30; var sIzenAbizen, sNota: tsKate30); var iKont: integer ; begin writeln ( 'IzenAbizen_Nota() prozeduran ------------------------------' ); sNota := '' ; sIzenAbizen := '' ; for iKont:= 1 to length(sIkaslea) do begin if (sIkaslea[iKont] >= '0' ) and (sIkaslea[iKont] <= '9' ) then sNota := sNota + sIkaslea[iKont] else sIzenAbizen := sIzenAbizen + sIkaslea[iKont]; end ; writeln ( ' sNota (' , length(sNota): 2 , ' karaktere) |' , sNota, '|' ); writeln ( 'sIzenAbizen (' , length(sIzenAbizen): 2 , ' karaktere) |' , sIzenAbizen, '|' ); writeln ( 'IzenAbizen_Nota() prozeduraren amaiaera -------------------' ); end ; procedure Izen_Abizen(sIzenAbizen: tsKate30; var sIzena, sAbizena: tsKate30); var iKont, iHasieraNon: integer ; begin writeln ( 'Izen_Abizen() prozeduran ----------------------------------' ); iHasieraNon := 2 ; iKont := 2 ; while sIzenAbizen[iKont] > 'Z' do begin writeln (iKont: 2 , '. ---> ' , sIzenAbizen[iKont]); iKont := iKont + 1 ; end ; iHasieraNon := iKont; writeln ( 'Deituraren hasierako posizioa ' , iHasieraNon, ' da' ); sIzena := copy(sIzenAbizen, 1 , iHasieraNon- 1 ); sAbizena := copy(sIzenAbizen, iHasieraNon, length(sIzenAbizen)-iHasieraNon+ 1 ); writeln ( ' sIzena (' , length(sIzena): 2 , ' karaktere) |' , sIzena, '|' ); writeln ( 'sAbizena (' , length(sAbizena): 2 , ' karaktere) |' , sAbizena, '|' ); writeln ( 'Izen_Abizen() prozeduraren amaiaera -----------------------' ); end ; procedure DatuakBakandu(sIkaslea: tsKate30; var sIzena, sAbizena, sNota: tsKate30); var iZenbatZifra: integer ; sIzenAbizen: tsKate30; begin textcolor(Cyan); writeln ( 'DatuakBakandu() prozeduran --------------------------------' ); textcolor(Yellow); IzenAbizen_Nota(sIkaslea, sIzenAbizen, sNota); iZenbatZifra := length(sNota); if iZenbatZifra > 1 then insert( '.' , sNota, 2 ); textcolor(Magenta); Izen_Abizen(sIzenAbizen, sIzena, sAbizena); textcolor(Cyan); writeln ( 'sIzena (' , length(sIzenA): 2 , ' karaktere) |' , sIzena, '|' ); writeln ( 'sAbizena (' , length(sAbizena): 2 , ' karaktere) |' , sAbizena, '|' ); writeln ( 'sNota (' , length(sNota): 2 , ' karaktere) |' , sNota, '|' ); writeln ( 'DatuakBakandu() prozeduraren amaiaera ---------------------' ); textcolor(LightGray); end ; {-------------------------Programa Nagusia-------------------------} var sZenbat, sIkaslea, sNota, sIzena, sAbizena: tsKate30; rNota, rBatukaria: real ; iZenbatIkasle, iKont, iErroreaNon: integer ; begin writeln ( '//////////////////////////////////////' ); writeln ; repeat write ( 'Zenbat ikasle izango dira (adibidez 4): ' ); readln(sZenbat); val (sZenbat, iZenbatIkasle, iErroreaNon); if iErroreaNon <> 0 then writeln ( 'Datu okerra ' , iErroreaNon, '. posizioko karakterea onargarria ez delako.' ) else if iZenbatIkasle <= 0 then writeln ( 'Ikasleen kopurua gutxienez 1 izan behar da.' ); until (iZenbatIkasle > 0 ) and (iErroreaNon = 0 ); rBatukaria := 0.0 ; for iKont:= 1 to iZenbatIkasle do begin writeln ; write (iKont, '. ikaslearen datuak (adibidez: Eleo72norIz1a): ' ); readln(sIkaslea); writeln ; writeln ( 'datua ==>' , sIkaslea, '<==' ); DatuakBakandu(sIkaslea, sIzena, sAbizena, sNota); writeln (iKont: 2 , '. ikaslea (kateak) >>> |' , sIzena, '| |' , sAbizena, '| |' , sNota, '|' ); val (sNota, rNota, iErroreaNon); writeln (iKont: 2 , '. ikaslea (zenbakiak) >>> rNota = ' , rNota: 0 : 3 , ' iErroreaNon = ' , iErroreaNon); rBatukaria := rBatukaria + rNota; end ; writeln ; writeln ( 'Batezbestekoa = ' , rBatukaria/iZenbatIkasle: 0 : 3 ); writeln ; writeln ( '//////////////////////////////////////' ); repeat until keypressed; end . |
Datuen eredua itxiagoa denean programa errazagoa izango da. Esate baterako, zifren kopurua ezaguna denean eta haien posizioak finkoak direnean, edo/eta izena eta abizena banatzeko karaktere jakin bat erabiltzen denean.
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 | { Zenbait ikasleren noten batezbesteko aritmetikoa kalkulatu behar da. Ikasle bakoitzaren nota, bere izena eta deiturarekin batera dator. Ikasleen kopurua programaren hasieran irakurriko da, eta kopuru hori teklatuz ematean karaktere-kate bat erabiliko da. Horrela, kopurua onargarria dela ziurtatu ahalko da eta ondorioz exekuzio-denborako errorerik ez da gertatuko. Ikasle jakin baten datua den karaktere-katearen ezaugarriak: - Datuaren luzera maximoa 30 karaktere - Datuan izena, deitura eta nota daude - Izena eta abizena '_' karakterez banaturik daude - Notak 3 zifra ditu: * Lehen posizioko karakterea zifra bat da eta unitatea adierazten du * Azkenaurreko karakterea zifra bat da eta hamarrekoa adierazten du * Azkeneko karakterea zifra bat da eta ehunekoa adierazten du - Izenak hainbat karaktere ditu: * Bigarren posizioko karakterea izenaren hasiera da * '_' karakterearen aurrekoa izenaren azken karakterea da - Abizenak hainbat karaktere ditu: * '_' karakterearen hurrengoa abizenaren hasiera da * Notaren hamarreko karakterearen aurrekoa abizenaren azkena da Zenbat ikasle diren teklatuaren bitartez harturik, datuak eman, notak eskuratu eta nota guztien batezbestekoa kalkulatu. Adibidez: 7ana_iza21 ------> 7.21 8Peru_SalaZar69 ------> 8.69 3AMAIA_ORBE57 ------> 3.57 4Ruy_Ruiz93 ------> 4.93 (+7.21 +8.62 +3.57 +4.91)/4 = 6.10 } program ZifraIzena_AbizenaZifrak; uses crt; type tsKate30 = string [ 30 ]; procedure DatuakBakandu(sIkaslea: tsKate30; var sIzena, sAbizena, sNota: tsKate30); var iAzpimarraNon: integer ; begin writeln ( 'DatuakBakandu() prozeduran ---------------------------------' ); sNota := sIkaslea[ 1 ] + '.' + sIkaslea[length(sIkaslea)- 1 ] + sIkaslea[length(sIkaslea)]; iAzpimarraNon := pos( '_' , sIkaslea); sIzena := copy(sIkaslea, 2 , iAzpimarraNon- 2 ); sAbizena := copy(sIkaslea, iAzpimarraNon+ 1 , length(sIkaslea)-iAzpimarraNon- 2 ); writeln ( 'sIzena (' , length(sIzenA): 2 , ' karaktere) |' , sIzena, '|' ); writeln ( 'sAbizena (' , length(sAbizena): 2 , ' karaktere) |' , sAbizena, '|' ); writeln ( 'sNota (' , length(sNota): 2 , ' karaktere) |' , sNota, '|' ); writeln ( 'DatuakBakandu() prozeduraren amaiaera ----------------------' ); end ; {-------------------------Programa Nagusia-------------------------} var sZenbat, sIkaslea, sNota, sIzena, sAbizena: tsKate30; rNota, rBatukaria: real ; iZenbatIkasle, iKont, iErroreaNon: integer ; begin writeln ( '//////////////////////////////////////' ); writeln ; repeat write ( 'Zenbat ikasle izango dira (adibidez 4): ' ); readln(sZenbat); val (sZenbat, iZenbatIkasle, iErroreaNon); if iErroreaNon <> 0 then writeln ( 'Datu okerra ' , iErroreaNon, '. posizioko karakterea onargarria ez delako.' ) else if iZenbatIkasle <= 0 then writeln ( 'Ikasleen kopurua gutxienez 1 izan behar da.' ); until (iZenbatIkasle > 0 ) and (iErroreaNon = 0 ); rBatukaria := 0.0 ; for iKont:= 1 to iZenbatIkasle do begin writeln ; write (iKont, '. ikaslearen datuak (adibidez: 7ana_iza21): ' ); readln(sIkaslea); writeln ; writeln ( 'datua ==>' , sIkaslea, '<==' ); DatuakBakandu(sIkaslea, sIzena, sAbizena, sNota); writeln (iKont: 2 , '. ikaslea (kateak) >>> |' , sIzena, '| |' , sAbizena, '| |' , sNota, '|' ); val (sNota, rNota, iErroreaNon); writeln (iKont: 2 , '. ikaslea (zenbakiak) >>> rNota = ' , rNota: 0 : 3 , ' iErroreaNon = ' , iErroreaNon); rBatukaria := rBatukaria + rNota; end ; writeln ; writeln ( 'Batezbestekoa = ' , rBatukaria/iZenbatIkasle: 0 : 3 ); writeln ; writeln ( '//////////////////////////////////////' ); repeat until keypressed; end . |
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.