2024(e)ko otsailaren 8(a), osteguna

4. astea | Errusiar Biderketaren Metodoa programatzen

4. astea | Errusiar Biderketaren Metodoa zertan den izenburuko artikulua gogoratuz, ariketa honetan bi zenbiren arteko biderkadura kalkulatzen duen programari bukaera emango diogu.

Datuak iBiderkagai1 eta iBiderkagai2 kopuru osoak eta positiboak izango dira (biak 0 eta MAXINT artekoak). Adibidez emandako datuak 40 eta 30 badira, eskatzen den pantailaraketaren zatirik mamitsuena hau da:
                   Erdiak   Dobleak
                   ------   -------
         0. maila      40        30  <<< errenkada hau ez da konputatuko
         1. maila      20        60  <<< errenkada hau ez da konputatuko
         2. maila      10       120  <<< errenkada hau ez da konputatuko
         3. maila       5       240
         4. maila       2       480  <<< errenkada hau ez da konputatuko
         5. maila       1       960
Goiko taulan adierazten den bezala iBiderkagai1 aldagaiaren balioa bikoitia bada edo bere erdiak bikoitiak badira, mezu bat agertzeaz gain  iBiderkagai2 aldagaiaren balioa eta bere dobleak ez dira batuketan kontuan izango.

Hona hemen programaren balizko irteera bat emandako datuak 40 eta 30 izatean:



Eta hemen programa beraren irteera emandako datuak 41 eta 30 izatean:


{ "Errusiar Biderketaren Metodoa" aplikatzen duen programa bat idatzi nahi da,   }
{ baina horretarako kalkulu errepikarrak egin behar dira.                        }

{ DATUAK:                                                                        }
{       Sarrerako datuak, positiboak diren bi zenbaki oso.                       }
{ EMAITZA:                                                                       }
{       Irteera biderkadura izango da, bere datu-mota LONGINT izango da.         }

{ Prozesu errepikakorraren iterazio kopurua zehazteko, iMailak kalkulatuko dugu: } 
{                                2^rMailak = iBiderkagai1                        }
{                                ln(2^rMailak) = ln(iBiderkagai1)                }
{                                rMailak·ln(2) = ln(iBiderkagai1)                }
{                                rMailak = ln(iBiderkagai1) / ln(2)              }
{                                iMailak = trunc(ln(iBiderkagai1) / ln(2))       }

program ErrusiarBiderketarenMetodoaProgramatzen ;    
const
   iMAXIMOA = 23456 ;
var
   iBiderkagai1, iBiderkagai2: integer ;
   rMailak: real ;
   iMailak, iErrenkada: integer ;
   iErdia: integer ;
   liDoblea, liBiderkadura: longint ;    
begin
   repeat
      write('   Lehen biderkagaia eman (1 eta ', iMAXIMOA, ' artekoa), 4059 adibidez: ') ;
      readln(iBiderkagai1) ;
   until (iBiderkagai1 >= 1) and (iBiderkagai1 <= iMAXIMOA) ;
   
   rMailak := ln(iBiderkagai1) / ln(2) ; 
   iMailak := trunc(rMailak) ;
   
   repeat
      write('Bigarren biderkagaia eman (0 eta ', iMAXIMOA, ' artekoa), 1378 adibidez: ') ;
      readln(iBiderkagai2) ;
   until (iBiderkagai2 >= 0) and (iBiderkagai2 <= iMAXIMOA) ;
   
   (* prozesu errepikakorra hemen *)
   
   writeln ;
   writeln ; 
   writeln('====================================================') ;
   writeln('             RETURN sakatu amaitzeko                ') ;
   write  ('====================================================') ;
   readln ;
end.
 Emaitza osoa laster hemen 
 

iruzkinik ez:

Argitaratu iruzkina

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