Planteamendua
Jokalarien kopurua ezezaguna da programaren hasieran, eta bere balioa teklatuaren bitartez eman beharko zaio programari.
![]() |
Bi jokalarien artean berdinketa gertatzean, irabazlea txanpon baten bitartez erabakiko da |
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
Dadoa hiru aldiz jaurti ondoren puntuen baturak, uneko maximoarekin bat egiten badu, berdinketa hausteko txanpon bat erabiliko dugu.
Dadoaren eta txanponaren jaurtiketa simulatzeko random funtzio estandarra erabiliko da. Dadoaren aukerak 6 direlako random(6) aplikatu beharko da. Txanponaren aukerak 2 direlako random(2) 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 erabakitzeko txanpon bat erabiliko da. Programa honek bi bertsio izango ditu:
- Programa honen lehen bertsioan, berdinketa hausteko txanpona behin bakarrik jaurtitzen da, eta
- programa honen bigarren bertsioan, berdinketa hausteko txanpona birritan jaurtitzen da jokalari banarentzat.
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. Berdinketa gertatzen bada, programaren puntu horretan prozesatu behar da:
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 | {------------------------------------------------------------- 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 . |
Orain arteko irabazleak txanpona behin jaurtitzean iAurrekoarenPuntuak aldagaian gordeko da bere emaitza. Eta berdinketa lortu duen une honetako jokalariak txanpona jaurtitzean iUnekoarenPuntuak aldagaian gordeko da bere emaitza:
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 | {------------------------------------------------------------- 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 bigarren txanda bat jokatu txanpon bakar baten jaurtiketa burutuz Azken emaitzak erakusten dira: irabazlea eta maximoa -------------------------------------------------------------} program DadoenJaurtiketak_BerdinketaTxanponBat; var iJokalariKopurua, iMaximoa, iIrabazlea, iPuntuak, iPuntuenBatura: integer ; iJokalaria, iJaurtiketa: integer ; iAurrekoarenPuntuak, iUnekoarenPuntuak: 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 repeat iAurrekoarenPuntuak := random( 2 ) + 1 ; (* random(2)-ek 0 eta 1 arteko balioak emango ditu *) iUnekoarenPuntuak := random( 2 ) + 1 ; (* random(2)-ek 0 eta 1 arteko balioak emango ditu *) writeln ( 'Berdinketa haustean, aurreko jokalariak ' , iAurrekoarenPuntuak, ' puntu eta uneko jokalariak ' , iUnekoarenPuntuak, ' puntu.' ); until iAurrekoarenPuntuak <> iUnekoarenPuntuak; if iAurrekoarenPuntuak > iUnekoarenPuntuak then begin (* iMaximoa := iPuntuenBatura; maximoa ez dago zertan aldatu beharrik *) (* iIrabazlea := iJokalaria; irabazlea ez dago zertan aldatu beharrik *) writeln ( 'Dagoeneko irabazlea, aurreko ' , iIrabazlea, '. jokalaria ' , iMaximoa, ' puntuekin berdinketa haustean.' ); end else begin (* iMaximoa := iPuntuenBatura; maximoa ez dago zertan aldatu beharrik *) iIrabazlea := iJokalaria; writeln ( 'Dagoeneko irabazlea, uneko ' , iIrabazlea, '. jokalaria ' , iMaximoa, ' puntuekin berdinketa haustean.' ); end ; end ; end ; (* else *) end ; (* kanpoko for *) writeln ; writeln ( 'Irabazlea ' , iIrabazlea, '. jokalaria ' , iMaximoa, ' puntuekin.' ); writeln ; writeln ( 'ENTER sakatu exekuzioa amaitzeko...' ); readln; end . |
Orain arteko irabazleak txanpona birritan jaurtitzean iAurrekoarenPuntuak aldagaian metatuko da bere emaitza. Eta berdinketa lortu duen une honetako jokalariak txanpona birritan jaurtitzean iUnekoarenPuntuak aldagaian metatuko da bere emaitza:
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 | {------------------------------------------------------------- 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 bigarren txanda bat jokatu txanpon bat birritan jaurtiz Azken emaitzak erakusten dira: irabazlea eta maximoa -------------------------------------------------------------} program DadoenJaurtiketak_BerdinketaTxanponBi; var iJokalariKopurua, iMaximoa, iIrabazlea, iPuntuak, iPuntuenBatura: integer ; iJokalaria, iJaurtiketa: integer ; iAurrekoarenPuntuak, iUnekoarenPuntuak: 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 repeat iAurrekoarenPuntuak := 0 ; for iJaurtiketa:= 1 to 2 do begin iAurrekoarenPuntuak := iAurrekoarenPuntuak + random( 2 ) + 1 ; (* random(2)-ek 0 eta 1 arteko balioak emango ditu *) end ; iUnekoarenPuntuak := 0 ; for iJaurtiketa:= 1 to 2 do begin iUnekoarenPuntuak := iUnekoarenPuntuak + random( 2 ) + 1 ; (* random(2)-ek 0 eta 1 arteko balioak emango ditu *) end ; writeln ( 'Berdinketa haustean, aurreko jokalariak ' , iAurrekoarenPuntuak, ' puntu eta uneko jokalariak ' , iUnekoarenPuntuak, ' puntu.' ); until iAurrekoarenPuntuak <> iUnekoarenPuntuak; if iAurrekoarenPuntuak > iUnekoarenPuntuak then begin (* iMaximoa := iPuntuenBatura; maximoa ez dago zertan aldatu beharrik *) (* iIrabazlea := iJokalaria; irabazlea ez dago zertan aldatu beharrik *) writeln ( 'Dagoeneko irabazlea, aurreko ' , iIrabazlea, '. jokalaria ' , iMaximoa, ' puntuekin berdinketa hautsita.' ); end else begin (* iMaximoa := iPuntuenBatura; maximoa ez dago zertan aldatu beharrik *) iIrabazlea := iJokalaria; writeln ( 'Dagoeneko irabazlea, uneko ' , iIrabazlea, '. jokalaria ' , iMaximoa, ' puntuekin berdinketa hautsita.' ); end ; 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.