2023(e)ko otsailaren 8(a), asteazkena

4. astea | Errusiar Biderketaren Metodoa programatzen

Errusiar Biderketaren Metodoa 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 }
{ rMailak·ln(2) = ln(iBiderkagai1) }
{ iMailak = trunc(ln(iBiderkagai1) / ln(2) }

program ErrusiarBiderketarenMetodoaProgramatzen ;
var
iBiderkagai1, iBiderkagai2: integer ;
rMailak: real ;
iMailak, iErrenkada: integer ;
iErdia: integer ;
liDoblea, liBiderkadura: longint ;
begin
repeat
write(' Lehen biderkagaia eman (1 eta ', MAXINT, ' artekoa), 4059 adibidez: ') ;
readln(iBiderkagai1) ;
until (iBiderkagai1 >= 0) and (iBiderkagai1 <= MAXINT) ;

rMailak := ln(iBiderkagai1) / ln(2) ;
iMailak := trunc(rMailak) ;

repeat
write('Bigarren biderkagaia eman (0 eta ', MAXINT, ' artekoa), 1378 adibidez: ') ;
readln(iBiderkagai2) ;
until (iBiderkagai2 >= 0) and (iBiderkagai2 <= MAXINT) ;

(* prozesu errepikakorra hemen *)

writeln ;
writeln ;
writeln('====================================================') ;
writeln(' RETURN sakatu amaitzeko ') ;
write ('====================================================') ;
readln ;
end.



 

iruzkinik ez:

Argitaratu iruzkina