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

8. astea | izena eta zenbakia

Gehienez 15 karaktereko katean izena eta zenbakia era jarraituan ditugu, adibidez: Adela245 edo Jon33. Ikusten denez zenbakia adierazten duten karaktereak datu-katearen bukaeran daude, 245 adibide batean eta 33 bestean.

Honen moduko hainbat kate irakurri ondoren programak zenbakien batezbestekoa kalkulatuko du; adibidez, hurrengo irudian 3 kate irakurri dira. Horretarako, irakurritako kate bakoitzean banaketa bat egingo du, izena alde batetik eta digituak beste alde batetik; banaketa egin ondoren val prozeduraren (hemen laburrago) bitartez bihurketa burutu beharra dago, adibidez: 245 katea 245 zenbaki bihurtu.

Ikusi irudi honetan programa nola dabilen:

Eta hona hemen iturburu-programa:
{-----------------------------------------------------------------------------
 Programa Izenak eta zenbakiak:
                    Gaia: string datu-mota
                    Deskribapena: KOPURUA karaktere-kateetan dauden zenbakien
                                  batezbestekoa kalkulatzen da
                                  
 Zenbakiak kopurua osoak izango dira eta karaktere-kateen bukaeran daude, adibidez:
         Olatz81
         Estibaliz3
         Martin16
 Adibide horretan, emaitza (81+3+16)/3=33.33 izango da
 -----------------------------------------------------------------------------}
program KateenBatezbestekoa;
uses
   crt;
const
   KOPURUA = 3;
type
   tsKatea = string[15];


{  FUNTZIOA: fniZenbakiaAtera
   SARRERA PARAMETROAK: string bat
   IRTEERA PARAMETROAK:
   ATAZA: Izenaren ondoren dagoen zenbakia identifikatu   }
function fniZenbakiaAtera(sTestua: tsKatea): integer;
var
   sDigituak: tsKatea;
   k: integer;
   iErrorea: integer;
   iZenbakia: integer;
begin
   { Izenaren azken karakterea identifikatu eta k aldagaian gorde egiten dugu }
   k := length(sTestua);
   while (sTestua[k] >= '0') and (sTestua[k] <= '9') do
       k := k - 1;

   { Zenbakiaren digutuak kate isolatu batean gorde }
   sDigituak := copy(sTestua, k+1, length(sTestua) - k);

   { Lortutako digituen katea pantailaratu }
   writeln('Digituak (karaktere-kate bat) --->':40, sDigituak, '<--- aldagaian="" balioa="" bat="" begin="" bihurtu="" digituak="" dugu="" egiten="" enbakia="" esleitu="" eta="" funtzioari="" gorde="" ierrorea="0" if="" integer="" izenbakia="" lortutako="" pantailaratu="" sdigituak="" then="" val="" writeln="" zenbaki="" zenbakia="" zenbakiaren="">':40, iZenbakia, '<===');

      fniZenbakiaAtera := iZenbakia;
   end
   else
   begin
      writeln('Zenbakia (integer bat) ===>':40, iZenbakia, '<===');
      { Datuak sartzean erroren bat egon da eta zenbakirik ez da eman, 0 itzuli }
      writeln('Datuak sartzean ez da zenbakirik eman':46);

      fniZenbakiaAtera := 0;
   end;
end;


{  FUNTZIOA: fnrBatezbestekoaKalkulatu
   SARRERA PARAMETROAK: iBatura,
                        KOPURUA ez da pasatu behar konstante orokor bat delako
   IRTEERA PARAMETROAK:
   ATAZA: Izenaren ondoren dagoen zenbakia identifikatu   }
function fnrBatezbestekoaKalkulatu(iBatura: integer): real;
begin
   fnrBatezbestekoaKalkulatu := int(iBatura) / KOPURUA;
   (* konpiladoreak ematen duen DIV abisua kentzeko: *)
   (* iBatura integer da, baina int(iBatura) real da *)
end;


{-----------------------------Programa Nagusia-------------------------}
var
   sKatea: tsKatea;
   iKontagailua: integer;
   cAukera: char;
   iBatura: integer;
   rBatezbestekoa: real;
begin
   clrscr;
   writeln('Programak ', KOPURUA, ' karaktere-katetan dauden zenbakien batezbestekoa kalkulatzen du.');
   writeln('Zenbakiak kopurua osoak izango dira eta karaktere-kateen bukaeran daude, honela adibidez:');
   writeln('         Olatz81');
   writeln('         Estibaliz3');
   writeln('         Martin16');
   writeln;
   writeln('Adibide horretan, emaitza (81+3+16)/3=33.33 izango da');
   writeln;
   writeln('--------------------------------------------------------------');
   writeln;
  
   { Programak behin eta berriro exekutatuko da erabiltzaileak amaitzeko erabakia hartu arte }
   repeat
      iBatura := 0; { Batezbestekoaren kalkulurako }
      { KOPURUA karaktere-kate eskatu eta bakoitzaren zenbakia rBaturari gehitu egiten dugu }
      for iKontagailua := 1 to KOPURUA do
      begin
         { Kate hutsak saihesten ditugu }
         repeat
            write('Sar ezazu ', iKontagailua, '. testua (izena eta zenbakia jarraian): ');
            readln(sKatea);
         until length(sKatea) <> 0;
        iBatura := iBatura + fniZenbakiaAtera(sKatea);
      end;
      { Batezbestekoa pantailaratu eta hurrengo exekuzioa prestatu egiten dugu, erabiltzailea amaitzeko
        aukera hartu arte }
      writeln;
      rBatezbestekoa := fnrBatezbestekoaKalkulatu(iBatura);
      writeln('Batezbestekoa: ': 25, rBatezbestekoa:0:4);
      writeln;
      writeln('==============================================================');
      writeln;
      write('Beste zerrenda bat? (B ala E): ':30);
      repeat
         cAukera := upcase(readkey);
      until (cAukera = 'E') or (cAukera = 'B');
      clrscr;
   until cAukera = 'E';
  
   write('Edozein tekla sakatu programatik irteteko ');
   repeat until keypressed;
end.                                                       { Programaren amaiera }

Aurreko programa horri zer kode gehitu beharko zaio zenbakiak positiboak eta negatiboak onartzeko? Adibidez, aurreko Adela245 eta Jon33 sarreren gain honako bikote hauek eman ahal izateko:
  • Adela+245 eta Jon+33
  • Adela+245 eta Jon-33
  • Adela-245 eta Jon+33
  • Adela-245 eta Jon-33
  • Adela245 eta Jon33
Eta dezimalak ere onartzeko? Esate baterako, aurreko Adela245 eta Jon33 sarrerekin batera honako bikote hauek eman ahal izateko:
  • Adela+2.45 eta Jon+33.4
  • Adela+.245 eta Jon-.33
  • Adela+24.5 eta Jon-33
  • Adela-245 eta Jon+3.3
  • Adela-245.1 eta Jon-33
  • Adela245 eta Jon33
  • Adela2.45 eta Jon33.7
  • Adela.245 eta Jon.337
 

iruzkinik ez:

Argitaratu iruzkina

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