2024(e)ko urtarrilaren 29(a), astelehena

2. astea | zenbaki errealetik kopuru osora


Zenbaki errealetan bi atal desberdintzen dira: alde osoa eta alde dezimala. Eta zenbaki erreal bati dagokion zenbaki osoa lor dezakegu, esate baterako:
        readln(rDatua);
        iOsoaTrunkatua := trunc(rDatua);
        iOsoaBiribildua := round(rDatua);
Zenbaki erreal bat teklatuaren bitartez irakurri eta bere dagozkion bi zenbaki oso erakutsi. Horretarako Trunc eta Round funtzio estandarrak aplikatuko dira, emaitzak zenbaki osoak izango dira. Sarrerako datua den zenbaki errealaren balioa moztuz ala biribilduz emaitza lortuko dugu:
{------------------------------------------------------------------------------
      Sarrera zenbaki erreala izanik irteera zenbaki osoa izango da
       
      round() funtzioa mugan, parametroa X.5 denean:
                 X bakoitia izatean    round(X.5)  --->  X+1
                 X bikoitia izatean    round(X.5)  --->  X
-------------------------------------------------------------------------------}
program TruncRound_funtzioak;
var
   rZbk1, rZbk2: real;
   iOsoaTrunkatua: integer;      { integer datu-mota derrigorrez }
   iOsoaBiribildua: integer;     { integer datu-mota derrigorrez }
begin
   writeln;
   writeln;
   write('Zenbaki erreala eta positiboa eman: ');
   readln(rZbk1);
   writeln;
 
   iOsoaTrunkatua := trunc(rZbk1);
   iOsoaBiribildua := round(rZbk1);
   
   writeln('Hona hemen emandako zenbakia: ', rZbk1:0:3);
   writeln('trunc(', rZbk1:0:3, ') = ', iOsoaTrunkatua);
   writeln('round(', rZbk1:0:3, ') = ', iOsoaBiribildua);
   writeln;
   
   iOsoaTrunkatua := trunc(-rZbk1);
   iOsoaBiribildua := round(-rZbk1);
   
   writeln('Hemen emandakoaren negatiboa: ', -rZbk1:0:3);
   writeln('trunc(', -rZbk1:0:3, ') = ', iOsoaTrunkatua);
   writeln('round(', -rZbk1:0:3, ') = ', iOsoaBiribildua);
   writeln;
   writeln;
 
   rZbk2 := rZbk1 + 0.4;
   iOsoaTrunkatua := trunc(rZbk2);
   iOsoaBiribildua := round(rZbk2);
   
   writeln('Aurreko sarrerari 0.4 gehitu: ', rZbk2:0:3);
   writeln('trunc(', rZbk2:0:3, ') = ', iOsoaTrunkatua);
   writeln('round(', rZbk2:0:3, ') = ', iOsoaBiribildua);
   writeln;
   
   iOsoaTrunkatua := trunc(-rZbk2);
   iOsoaBiribildua := round(-rZbk2);
   
   writeln('Hementxe berriaren negatiboa: ', -rZbk2:0:3);
   writeln('trunc(', -rZbk2:0:3, ') = ', iOsoaTrunkatua);
   writeln('round(', -rZbk2:0:3, ') = ', iOsoaBiribildua);
   writeln;
   writeln;
 
   writeln('=======================');
   writeln('RETURN sakatu amaitzeko');
   write  ('_______________________');
   readln;
end. { PROGRAMAREN BUKAERA }

Ikusi ere zenbaki erreal baten bi atalak nola eskuratzen diren (2. astea | zenbaki erreal baten atalak).

Round() funtzioaren muga X.5 kopurua da eta bere emaitza X araberakoa da, jakin dezagun Round() funtzioaren biribiltze emaitza zenbaki bikoitia dela ondoko irudian erakusten den bezala:


Noiz Trunc() funtzioa eta noiz Round() funtzioa? Adibide batekin erantzungo dugu, baina lehenik gogoratuz zenbaki erreal guztiak ezin direla errepresentatu memorian gordetzeko, ikusi izan dugu "zuloak" geratzen direla bi zenbaki erreal artean.

Noiz Trunc() funtzioa eta noiz Round() funtzioa? galderaren harira adibide hau azter ezazu:
2. astea | 3 zifra eta 2 dezimaleko zenbaki erreal bat atzekoz aurrera  (XYZ.AB → ZYX.BA   autoebaluazioa) .

iruzkinik ez:

Argitaratu iruzkina

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