![]() |
Mòdul
4
![]() |
Fonaments de
Programació. Llenguatge C/C++![]() |
Pràctica ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
![]() |
![]() |
Pràctica
d'ampliació ![]() |
![]() |
Treure n amb m daus En aquesta pràctica resoldrem un interessant problema, també amb una funció recursiva. Es tracta de comptar el nombre de formes possibles en què es pot obtenir una puntuació n amb m daus.
|
![]() |
Desenvolupament de la pràctica
Si es juga amb dos daus, sumant les puntuacions obtingudes amb tots dos, tothom pot observar que la puntuació més probable és la puntuació 7. Un jugador va expressar a Galileo la seva sorpresa quan va observar que al jugar amb tres daus, la suma 10 apareix amb més freqüència que la suma 9. Segons aquest jugador, la suma 9 i la suma 10 tenen els mateixos casos favorables:
Evidentment, el jugador va cometre un error al considerar casos igualment favorables la puntuació 126 i la puntuació 333, ja que la primera pot sortir de 6 formes possibles (126, 162, 216, 261, 612, 621) i la segona només d'una forma possible. Comptant bé, tenint en compte l'ordre, hi ha 27 casos favorables a la suma 10 i només 25 casos favorables a la suma 9. Aquest exercici ens dóna la idea de fer un programa amb una funció f(n,m) que calculi el nombre de formes possibles de treure una puntuació n amb m daus, considerant l'ordre. Per resoldre el problema plantejat, implementarem una funció recursiva f(n,m) que farà tot el càlcul. Creeu un nou arxiu font C anomenat m4p04.c. i escriviu el següent codi:
Explicació del programa La funció f() considera tres casos: Si m<1, llavors, retorna 0 ja que no es pot tenir 0 daus. Aquest cas només es pot donar en el cas que deliberadament l'usuari introdueixi una xifra més petita que 1. Si m=1 és el cas trivial en què se surt de la recursivitat. Amb un dau només es pot treure una puntuació possible una sola vegada. En el cas que m>1 fa servir que en el primer dau es pot obtenir una puntuació compresa entre 1 i mínim(6 , n-m+1) i, per cadascuna d'aquestes puntuacions possibles es compta el nombre de formes com la resta de daus poden formar la puntuació que resta. Exemple:
|