Planteamendua
Jokalarien kopurua ezezaguna da programaren hasieran, eta bere balioa teklatuaren bitartez eman beharko zaio programari.
![]() |
Irudiak erakusten duen programaren exekuzio horretan jokalariak 5 dira |
Jokalariek dado batekin jokatuko dute. Jokalari bakoitzak dadoaren hiru jaurtiketa egin ondoren, bere emaitza lortzeko dadoaren hiru jaurtiketen puntuak batu behar dira (baliorik txikiena 3 izango da eta baliorik handiena 18 izan daiteke). Programaren azken emaitza bikoitza izango da:
- Jokalari guztien artean zenbatgarrenak irabazi duen
- Zenbat puntuekin irabazi du jokalari horrek
Jaurtiketa simulatzeko random funtzio estandarra erabiliko da. Dadoaren aukerak 6 direlako random(6) aplikatu beharko da.
Irabazlea
Hiru jaurtiketak egin ondoren haien batura handiena lortuko duen jokalariak irabaziko du. Bi jokalarik (edo gehiagok) puntu-kopuru maximoa lortuz gero, irabazlea lehen jokalaria izango da.
Zenbat jokalari izango diren galdetuko du programak, eta zenbaki oso bat den erabiltzailearen erantzuna iJokalariKopurua aldagaian gordeko da:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 | {------------------------------------------------------------- Zenbat jokalari izango diren zehaztu beharra dago. -------------------------------------------------------------} program DadoenJaurtiketak_1_5; var iJokalariKopurua: integer ; begin repeat write ( 'Zenbat jokalari dira? ' ); readln(iJokalariKopurua); until iJokalariKopurua > 1 ; (* gutxienez 2 jokalari *) writeln ; writeln ( 'ENTER sakatu exekuzioa amaitzeko...' ); readln; end . |
Kanpoko begizta planteatzen da, prozesu errepikakor bat delako eta zenbat itzuli eman behar diren ezaguna delako for-to-do agindu bat erabiliko da. Emaitzak izango diren iMaximoa eta iIrabazlea aldagaien hasieraketak begiztatik kanpo egingo dira:
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 | {------------------------------------------------------------- Zenbat jokalari izango diren zehaztu beharra dago. Kanpoko begiztan jokalarien txandak erakusten dira. -------------------------------------------------------------} program DadoenJaurtiketak_2_5; var iJokalariKopurua, iMaximoa, iIrabazlea: integer ; k1: integer ; begin repeat write ( 'Zenbat jokalari dira? ' ); readln(iJokalariKopurua); until iJokalariKopurua > 1 ; (* gutxienez 2 jokalari *) iIrabazlea := 0 ; iMaximoa := 0 ; for k1:= 1 to iJokalariKopurua do begin writeln (k1, '. jokalariaren jarduera, 3 jaurtiketen batura kalkulatu beharko da.' ); end ; writeln ; writeln ( 'ENTER sakatu exekuzioa amaitzeko...' ); readln; end . |
Barruko begizta planteatzen da, prozesu errepikakor bat delako eta zenbat itzuli eman behar diren ezaguna delako, berriro ere, for-to-do agindu bat erabiliko da. Jokalari bakoitzaren puntuaketa diren iPuntuenBatura aldagaiaren hasieraketa begiztatik kanpo egingo da. Bestalde, random(6) funtzioak eman ditzaken balioak 0 eta 5 artean daudelako unitate bat gehitu behar zaie:
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 | {------------------------------------------------------------- Zenbat jokalari izango diren zehaztu beharra dago. Kanpoko begiztan jokalarien txandak erakusten dira. Barruko begiztan jokalarien puntuak lortzen dira eta... -------------------------------------------------------------} program DadoenJaurtiketak_3_5; var iJokalariKopurua, iMaximoa, iIrabazlea, iPuntuak, iPuntuenBatura: integer ; k1, k2: integer ; begin repeat write ( 'Zenbat jokalari dira? ' ); readln(iJokalariKopurua); until iJokalariKopurua > 1 ; (* gutxienez 2 jokalari *) randomize; iIrabazlea := 0 ; iMaximoa := 0 ; for k1:= 1 to iJokalariKopurua do begin writeln ; iPuntuenBatura := 0 ; for k2:= 1 to 3 do begin iPuntuak := random( 6 ) + 1 ; (* random(6)-ek 0 eta 5 arteko balioak emango ditu *) writeln (k1, '. jokalariak ' , iPuntuak, ' puntu lortu ditu ' , k2, '. jaurtiketan.' ); iPuntuenBatura := iPuntuenBatura + iPuntuak; end ; (* irabazlea zein da dagoeneko? *) end ; writeln ; writeln ( 'ENTER sakatu exekuzioa amaitzeko...' ); readln; end . |
Barruko begizta bukatzean, baina oraindik kanpoko begiztan gaudelarik, une horretan irabazlea zein den erabakitzen da. Ondorioz, emaitzak izango diren iMaximoa eta iIrabazlea aldagaien eguneraketak burutuko dira horrela badagokie:
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 | {------------------------------------------------------------- Zenbat jokalari izango diren zehaztu beharra dago. Kanpoko begiztan jokalarien txandak erakusten dira. Barruko begiztan jokalarien puntuak lortzen dira eta irabazlea erabakitzen da -------------------------------------------------------------} program DadoenJaurtiketak_4_5; var iJokalariKopurua, iMaximoa, iIrabazlea, iPuntuak, iPuntuenBatura: integer ; k1, k2: integer ; begin repeat write ( 'Zenbat jokalari dira? ' ); readln(iJokalariKopurua); until iJokalariKopurua > 1 ; (* gutxienez 2 jokalari *) randomize; iIrabazlea := 0 ; iMaximoa := 0 ; for k1:= 1 to iJokalariKopurua do begin writeln ; iPuntuenBatura := 0 ; for k2:= 1 to 3 do begin iPuntuak := random( 6 ) + 1 ; (* random(6)-ek 0 eta 5 arteko balioak emango ditu *) writeln (k1, '. jokalariak ' , iPuntuak, ' puntu lortu ditu ' , k2, '. jaurtiketan.' ); iPuntuenBatura := iPuntuenBatura + iPuntuak; end ; if iPuntuenBatura > iMaximoa then begin iMaximoa := iPuntuenBatura; iIrabazlea := k1; writeln ( 'Dagoeneko irabazlea ' , iIrabazlea, '. jokalaria ' , iMaximoa, ' puntuekin.' ); end ; end ; (* azken emaitzak erakutsi *) writeln ; writeln ( 'ENTER sakatu exekuzioa amaitzeko...' ); readln; end . |
Programatik irten aurretik, azken emaitzak iMaximoa eta iIrabazlea aldagaien edukiak erakusten dira:
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 | {------------------------------------------------------------- Zenbat jokalari izango diren zehaztu beharra dago. Kanpoko begiztan jokalarien txandak erakusten dira. Barruko begiztan jokalarien puntuak lortzen dira eta irabazlea erabakitzen da Azken emaitzak erakusten dira: irabazlea eta maximoa -------------------------------------------------------------} program DadoenJaurtiketak_5_5; var iJokalariKopurua, iMaximoa, iIrabazlea, iPuntuak, iPuntuenBatura: integer ; k1, k2: integer ; begin repeat write ( 'Zenbat jokalari dira? ' ); readln(iJokalariKopurua); until iJokalariKopurua > 1 ; (* gutxienez 2 jokalari *) randomize; iIrabazlea := 0 ; iMaximoa := 0 ; for k1:= 1 to iJokalariKopurua do begin writeln ; iPuntuenBatura := 0 ; for k2:= 1 to 3 do begin iPuntuak := random( 6 ) + 1 ; (* random(6)-ek 0 eta 5 arteko balioak emango ditu *) writeln (k1, '. jokalariak ' , iPuntuak, ' puntu lortu ditu ' , k2, '. jaurtiketan.' ); iPuntuenBatura := iPuntuenBatura + iPuntuak; end ; if iPuntuenBatura > iMaximoa then begin iMaximoa := iPuntuenBatura; iIrabazlea := k1; writeln ( 'Dagoeneko irabazlea ' , iIrabazlea, '. jokalaria ' , iMaximoa, ' puntuekin.' ); end ; end ; writeln ; writeln ( 'Irabazlea ' , iIrabazlea, '. jokalaria ' , iMaximoa, ' puntuekin.' ); writeln ; writeln ( 'ENTER sakatu exekuzioa amaitzeko...' ); readln; end . |
Dadoa hiru aldiz jaurti ondoren puntuen baturak iMaximoa edukiarekin bat egiten badu, berdinketa hausteko txanpon bat erabiliko dugu 4. astea | FOR-DO bat bere barnean beste FOR-DO bat duena (2) artikuluan erakusten den bezala:
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 | {------------------------------------------------------------- [1/3] Zenbat jokalari izango diren zehaztu beharra dago. Kanpoko begiztan jokalarien txandak erakusten dira. Barruko begiztan jokalarien puntuak lortzen dira eta irabazlea erabakitzen da, berdinketarik gertatzean txanpon baten laguntzaz erabaki Azken emaitzak erakusten dira: irabazlea eta maximoa -------------------------------------------------------------} program DadoenJaurtiketak_Berdinketa; var iJokalariKopurua, iMaximoa, iIrabazlea, iPuntuak, iPuntuenBatura: integer ; iJokalaria, iJaurtiketa: integer ; begin repeat write ( 'Zenbat jokalari dira? ' ); readln(iJokalariKopurua); until iJokalariKopurua > 1 ; (* gutxienez 2 jokalari *) randomize; iIrabazlea := 0 ; iMaximoa := 0 ; for iJokalaria:= 1 to iJokalariKopurua do begin writeln ; iPuntuenBatura := 0 ; for iJaurtiketa:= 1 to 3 do begin iPuntuak := random( 6 ) + 1 ; (* random(6)-ek 0 eta 5 arteko balioak emango ditu *) writeln (iJokalaria, '. jokalariak ' , iPuntuak, ' puntu lortu ditu ' , iJaurtiketa, '. jaurtiketan.' ); iPuntuenBatura := iPuntuenBatura + iPuntuak; end ; if iPuntuenBatura > iMaximoa then begin iMaximoa := iPuntuenBatura; iIrabazlea := iJokalaria; writeln ( 'Dagoeneko irabazlea ' , iIrabazlea, '. jokalaria ' , iMaximoa, ' puntuekin.' ); end else begin if iPuntuenBatura = iMaximoa then begin (* random(2) bitartez txanpoi bat jaurtitzen dela simula daiteke *) writeln ( 'Berdinketa!!!' ); end ; end ; (* else *) end ; (* kanpoko for *) writeln ; writeln ( 'Irabazlea ' , iIrabazlea, '. jokalaria ' , iMaximoa, ' puntuekin.' ); writeln ; writeln ( 'ENTER sakatu exekuzioa amaitzeko...' ); readln; end . |
iruzkinik ez:
Argitaratu iruzkina
Iruzkinen bat idazteko Google-ko kontu bat behar duzu. Iruzkin guztien moderazio-ardura blogeko administratzaileari dagokio.