{
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
Espresuki kontrakorik esaten ez bada, gure ariketetan datuak beti egokiak direla
suposatu ahalko dugu. Adibide hau salbuespen bat litzateke datuen zuzuentasuna
begiratzen delako, hots, datu guztiak ea bat datozen aurreikusitako formatuarekin.
}
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.
2023(e)ko martxoaren 15(a), asteazkena
8. astea | katearen egokitasuna kontrolatu
Harpidetu honetara:
Argitaratu iruzkinak (Atom)
iruzkinik ez:
Argitaratu iruzkina