Jarraian REPEAT-UNTIL agindu errepikakorraren eskema erakusten da:
Ikusi 4. astea | WHILE-DO eta REPEAT-UNTIL: Segida baten batukaria ariketa non REPEAT-UNTIL eta WHILE-DO sententziak alderatzen diren
REPEAT-UNTIL agindu errepikakorrari, WHILE-DO aginduari bezala, errepikatu behar den sententzia multzo bat dagokio eta horren aurretik galdera bat integraturik dauka. Galderaren erantzuna gezurra izatean (FALSE Pascal lengoaian) multzoaren sententziak berriro egikarituko dira begizta bat sortuz. Adierazpen boolearraren erantzuna egia izango denean (TRUE Pascal lengoaian) multzoaren barneko sententziak ez dira gehiagotan exekutatzen eta besterik gabe REPEAT-UNTIL agindua amaitutzat jo daiteke, bere jarraian datorren sententziak hartuko luke txanda.
Sintaxiari dagokiola REPEAT-UNTIL aginduak ez dauka BEGIN eta END markarik. Eta bere baldintzaren logika alderantzizkoa da WHILE-DO aginduaren adierazpen boolearrarekiko, horregatik honako egoera bi hauek baliokideak dira:
while (rZbk > 7.4) AND (iKont <> 3) do
...
...
until (rZbk <= 7.4) OR (iKont = 3) ;
Izan ere, aurrekoa De Morgan Legeen ondorioa besterik ez da. Hemen duzu De Morgan Legeen azalpen grafikoak Venn diagramak erabiliz:
Egia-taulen bitartez froga daitezke De Morgan Legeak:
RepeatFaktoriala.pas
CC BY-SA 4.0, https://commons.wikimedia.org/w/index.php?curid=36768081
De Morgan Legea laborategian aplikatu dugu kasik konturatu gabe. Gogora ezazu lehenengo koadrantean kokatzen den A puntuaren rAx eta rAy koordenatuak irakurtzean egin genuena:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | program Triangelu_1_4 ; var rAx, rAy : real ; begin { A puntua lehen koandrantekoa izan behar da } repeat writeln ( 'OXY lehen koandratean lan eginez' ) ; write ( 'Eman A puntuaren x koordenatua: ' ) ; readln (rAx) ; write ( 'Eman A puntuaren y koordenatua: ' ) ; readln(rAy) ; if (rAx < 0.0 ) or (rAy < 0.0 ) then writeln ( 'A puntuaren koordenatuak ezin dira negatiboak izan' ) ; until (rAx >= 0.0 ) and (rAy >= 0.0 ) ; writeln ; ... end . |
Egia-taulen bitartez froga daitezke De Morgan Legeak:
A | B | (A AND B) | (A AND B)' | A' | B' | A' OR B' |
T T F F |
T F T F |
T F F F |
F T T T |
F F T T |
F T F T |
F T T T |
A | B | (A OR B) | (A OR B)' | A' | B' | A' AND B' |
T T F F |
T F T F |
T T T F |
F F F T |
F F T T |
F T F T |
F F F T |
RepeatFaktoriala.pas
Berresten dugu zenbaki baten faktoriala kalkulatzeko egiturarik egokiena FOR-DO dela, baina 4. astea | WHILE-DO aginduaren egitura eta adibide bat artikuluan egingo dugun bezala, ekin diezaiogun faktorialaren ariketari REPEAT-UNTIL agindua erabiliz.
iZbk zenbaki osoa eta positiboa teklatuaren bitartez irakurri ondoren, bere faktoriala honelaxe definitzen da:
iZbk! = 1 * 2 * 3 * ... * (iZbk-1) * iZbk
REPEAT-UNTIL aginduari buruz goraxeago emandako azalpenak aintzat harturik, RepeatFaktoriala.pas programa idatz dezakegu:
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 | {-------------------------------------------------------------------------- iZbk kopuru osoa eta positiboa teklatuaren bitartez irakurri ondoren batukari hau kalkulatu: liFaktoriala <=== iZbk! = 1 * 2 * 3 * ... * (iZbk-1) * iZbk ---------------------------------------------------------------------------} program FaktorialaKalkulatuRepeatBitartez; const MAXIMOA = 12 ; (* longint datu-motarekin 12! ondo kalkulatzen da, baina 13! txarto *) var iZbk: integer ; iKontagailua: integer ; liFaktoriala: longint ; begin writeln ; writeln ; repeat write ( 'Zenbaki osoa eta positiboa eman: ' ); readln(iZbk); if (iZbk < 0 ) or (iZbk > MAXIMOA) then begin writeln ( 'Datua 0 eta 12 artean (biak barne)' ); writeln ; end ; until (iZbk >= 0 ) and (iZbk <= MAXIMOA); writeln ; liFaktoriala := 1 ; iKontagailua := 1 ; repeat liFaktoriala := liFaktoriala * iKontagailua; writeln ( 'iKontagailua = ' : 20 , iKontagailua: 2 , 'liFaktoriala = ' : 25 , liFaktoriala); iKontagailua := iKontagailua + 1 ; until iKontagailua > iZbk; writeln ; writeln (iZbk: 16 , '! = ' , liFaktoriala); writeln ; writeln ; writeln ( '=======================' ); writeln ( 'RETURN sakatu amaitzeko' ); writeln ( '=======================' ); readln; end . |
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.