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
{
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
tKate30 = string[30];
procedure DatuakBakandu(sIkaslea: tKate30; var sIzena, sAbizena, sNota: tKate30);
begin
end;
{-------------------------Programa Nagusia-------------------------}
var
sZenbat, sIkaslea, sNota, sIzena, sAbizena: tKate30;
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) |
{
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.
{
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.