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 960Goiko 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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | { "Errusiar Biderketaren Metodoa" aplikatzen duen programa bat idatzi nahi da, } { baina horretarako kalkulu errepikakorrak 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 ; const iMAXIMOA = 23456 ; var iBiderkagai1, iBiderkagai2: integer ; rMailak: real ; iMailak, iErrenkada: integer ; iErdia: integer ; liDoblea, liBiderkadura: longint ; begin writeln ; writeln ; writeln ( ' -------------------------------' ) ; writeln ( '| Errusiar Biderketaren Metodoa |' ) ; writeln ( ' -------------------------------' ) ; writeln ; repeat write ( ' Lehen biderkagaia eman (1 eta ' , iMAXIMOA, ' artekoa), 4059 adibidez: ' ) ; readln(iBiderkagai1) ; until (iBiderkagai1 > 0 ) and (iBiderkagai1 <= iMAXIMOA) ; //writeln('Adibidea --> 2^x=63 ekuazioaren ebazpena 5,98 da eta mailak 5 dira.') ; //writeln('Adibidea --> 2^x=64 ekuazioaren ebazpena 6,00 da eta mailak 6 dira.') ; //writeln('Adibidea --> 2^x=65 ekuazioaren ebazpena 6,02 da eta mailak 6 dira.') ; (* 2^x = 65 *) rMailak := ln(iBiderkagai1) / ln( 2 ) ; (* x·ln(2) = ln(65) *) iMailak := trunc(rMailak) ; //writeln ; //writeln(iBiderkagai1, ' zenbakiari dagokion maila kopurua ', iMailak, ' da:') ; //writeln ; repeat write ( ' Bigarren biderkagaia eman (0 eta ' , iMAXIMOA, ' artekoa), 1378 adibidez: ' ) ; readln(iBiderkagai2) ; until (iBiderkagai2 >= 0 ) and (iBiderkagai2 <= iMAXIMOA) ; writeln ; writeln ( 'Erdiak' : 23 , 'Dobleak' : 14 ) ; writeln ( '------' : 23 , '-------' : 14 ) ; liBiderkadura := 0 ; { hasieraketa 0 da, biderkadura lortzeko batuketak egingo direlako } if iBiderkagai1 mod 2 = 0 then { erdiak eta dobleak kalkulatzen hasi aurretik biderkagaien txanda } begin writeln ( '0. maila' : 13 , iBiderkagai1: 10 , iBiderkagai2: 14 , ' <<< errenkada hau ez da konputatuko' ) ; end else begin writeln ( '0. maila' : 13 , iBiderkagai1: 10 , iBiderkagai2: 14 ) ; liBiderkadura := liBiderkadura + iBiderkagai2 ; end ; iErdia := iBiderkagai1 ; liDoblea := iBiderkagai2 ; for iErrenkada:= 1 to iMailak do begin iErdia := iErdia div 2 ; liDoblea := liDoblea * 2 ; if iErdia mod 2 = 0 then begin writeln (iErrenkada: 6 , '. maila' , iErdia: 10 , liDoblea: 14 , ' <<< errenkada hau ez da konputatuko' ) ; end else begin writeln (iErrenkada: 6 , '. maila' , iErdia: 10 , liDoblea: 14 ) ; liBiderkadura := liBiderkadura + liDoblea ; end ; end ; writeln ; writeln (iBiderkagai1: 6 , ' x ' , iBiderkagai2, ' = ' , liBiderkadura, ' Errusiar Metodoaren arabera' ) ; writeln (iBiderkagai1: 6 , ' * ' , iBiderkagai2, ' = ' , iBiderkagai1*iBiderkagai2, ' ohiko * eragilea erabiliz' ) ; writeln ; writeln ; writeln ( '====================================================' ) ; writeln ( ' RETURN sakatu amaitzeko ' ) ; write ( '====================================================' ) ; readln ; end . |
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.