2024(e)ko martxoaren 14(a), osteguna

8. astea | katearen egokitasuna kontrolatu

{
    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.

 

iruzkinik ez:

Argitaratu iruzkina

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