Diferència entre revisions de la pàgina «M3 - Programació estructurada / Pràctiques UF2: Pt3»

De wikiserver
Dreceres ràpides: navegació, cerca
(Es crea la pàgina amb «1. Torres de Hanoi (amb N introduïda per l’usuari com a paràmetre). S’ha d’anar visualitzant la solució per pantalla. 2. Escriure una funció recursiva que d...».)
 
 
(Hi ha 11 revisions intermèdies del mateix usuari que no es mostren)
Línia 1: Línia 1:
1. Torres de Hanoi (amb N introduïda per l’usuari com a paràmetre). S’ha d’anar visualitzant la solució per pantalla.
+
==Buscamines==
  
2. Escriure una funció recursiva que donat un número N (N ≥ 0) passat com a paràmetre calculi la suma de tots els números enters fins a N inclòs.
+
Cal dissenyar i implementar el joc del “Buscamines”, tenint en compte les següents consideracions:
  
3. Escriure una funció recursiva que calculi el resultat de X elevat a N amb N >0, sabent que X0 = 1.
+
'''Introducció'''
  
4. Escriu una funció recursiva per calcular la suma digital d’un número natural. Per exemple, la suma digital de 18624 és: 4 + 2 + 6 + 8 + 1 = 21
+
L'objectiu del Buscamines és trobar totes les mines el més aviat possible, sense descobrir cap. Si es descobreix una mina, es perdrà la partida. Depenent del tauler que triï el jugador, es repartiran pel tauler un nombre de mines:
  
5. Dissenyeu un algoritme recursiu que calculi el màxim comú divisor de dos enters positius, sabent que :
+
{|border="2" cellpadding="4" cellspacing="0" style="margin: 1em 1em 1em 0; background: #f9f9f9; border: 1px #aaa solid; border-collapse: collapse; font-size: 95%;"
<pre>
+
|-
    MCD( X, Y) = MCD (X-Y, Y) SI X > Y
+
| 10x10|| 10 mines
    MCD (X, Y-X) SI Y > X
+
|-
    X SI X = Y
+
| 15x15|| 15 mines
</pre>
+
|-
6. Fes la funció recursiva '''float SumaHarmonica''' ( int n ) que retorna la suma :
+
| 20x20|| 20 mines
<pre>
+
|}
    1 + 1/2 +1/3 + ... + 1/n
 
</pre>
 
7. Fes una funció recursiva que vaig imprimint la descomposició factorial d’un número enter.
 
  
8. Fes una funció recursiva booleana que donats un número i un dígit retorni si aquest dígit pertany al número. Per exemple existeix (1234,3) → true, existeix (1234,7) → false
+
El joc comença demanant a l’usuari quin tipus de tauler vol. A partir d’aquí és col·loquen les mines i es mostra el tauler:
  
9. Fes una funció que calculi el producte segons el mètode rus que diu que:
+
[[Fitxer:uf2_pract_recursivitat_2.png|400px|center Recursivitat]]
<pre>
 
    x*y = ((2*x) *(y/2)) SI y es parell
 
    x*y =((2*x) *(y/2))+ x SI y és senar.
 
  
    Quan y val 1, el resultat és x.
+
El símbol # indica que la casella no s’ha descobert.
</pre>
+
 +
El símbol X indicarà que s’ha marcat una mina.
  
10. Fes una funció recursiva que ompli un tauler n-goro. Un tauler n-goro és una matriu de n files i n+1 columnes que s'omple consecutivament en diagonal i quan ens sortim per una banda entrem per l'altra. L'últim element que s'omple serà l'extrem inferior dret.
+
A partir d’aquí comença a jugar indicant si vol marcar (‘M’) o descobrir (‘D’) i a quina posició (fila, columna).
<pre>
 
    Per exemple amb n=3
 
  
      1 10 7 4
+
En el cas que es descobreixi una casella que no tingui una mina s’haurà de:
      5 2 11 8
 
      9 6 3 12
 
  
    Amb n = 4
+
* Si la casella no està contigua a cap mina, descobrir-se totes les caselles que estan buides i contigües a la casella descoberta (aquesta haurà de ser una funció recursiva, donat que al descobrir una casella s’haurà de tornar a executar per a totes les adjacents).
  
      1 17 13 9 5
+
* Si la casella està contigua a alguna mina, indicar el nombre de mines que té aquesta casella a la seva al voltant.
      6 2 18 14 10
+
 
      11 7 3 19 15
+
[[Fitxer:uf2_pract_recursivitat_1.png|400px|center Recursivitat]]
      16 12 8 4 20
+
 
 +
Si es descobreix una casella que conté una mina, el joc ha de finalitzar.
 +
 
 +
Al final de la partida se li mostrarà el temps que ha fet.
 +
 
 +
Per a fer-ho cal utilitzar el següent codi:
 +
<source lang="java">
 +
Quan comenci a jugar, guardar l'hora actual:
 +
 
 +
  long inici = System.currentTimeMillis();
 +
 
 +
Quan acabi de jugar, guardar l'hora actual:
 +
 
 +
  long fi = System.currentTimeMillis();
 +
</source>
 +
 
 +
I fer la resta. Cal tenir present que el temps està donat en mil·lisegons i per tant per mostrar els segons de joc cal dividir per 1000.
 +
 
 +
Ha de donar també la possibilitat de tornar a començar la partida.
 +
 
 +
'''Possibles millores'''
 +
 
 +
* Oferir la possibilitat de desmarcar una mina.
 +
 
 +
* Poder interrompre el joc durant la partida i no haver d’esperar al final per sortir.
 +
del programa
 +
 
 +
* Mostrar una pantalla inicial d’Ajut /Introducció al joc, en la qual s’expliqui l’objectiu i el funcionament del joc.

Revisió de 16:57, 15 abr 2021

Buscamines

Cal dissenyar i implementar el joc del “Buscamines”, tenint en compte les següents consideracions:

Introducció

L'objectiu del Buscamines és trobar totes les mines el més aviat possible, sense descobrir cap. Si es descobreix una mina, es perdrà la partida. Depenent del tauler que triï el jugador, es repartiran pel tauler un nombre de mines:

10x10 10 mines
15x15 15 mines
20x20 20 mines

El joc comença demanant a l’usuari quin tipus de tauler vol. A partir d’aquí és col·loquen les mines i es mostra el tauler:

center Recursivitat

El símbol # indica que la casella no s’ha descobert.

El símbol X indicarà que s’ha marcat una mina.

A partir d’aquí comença a jugar indicant si vol marcar (‘M’) o descobrir (‘D’) i a quina posició (fila, columna).

En el cas que es descobreixi una casella que no tingui una mina s’haurà de:

  • Si la casella no està contigua a cap mina, descobrir-se totes les caselles que estan buides i contigües a la casella descoberta (aquesta haurà de ser una funció recursiva, donat que al descobrir una casella s’haurà de tornar a executar per a totes les adjacents).
  • Si la casella està contigua a alguna mina, indicar el nombre de mines que té aquesta casella a la seva al voltant.

center Recursivitat

Si es descobreix una casella que conté una mina, el joc ha de finalitzar.

Al final de la partida se li mostrarà el temps que ha fet.

Per a fer-ho cal utilitzar el següent codi:

Quan comenci a jugar, guardar l'hora actual:

   long inici = System.currentTimeMillis();

Quan acabi de jugar, guardar l'hora actual:

   long fi = System.currentTimeMillis();

I fer la resta. Cal tenir present que el temps està donat en mil·lisegons i per tant per mostrar els segons de joc cal dividir per 1000.

Ha de donar també la possibilitat de tornar a començar la partida.

Possibles millores

  • Oferir la possibilitat de desmarcar una mina.
  • Poder interrompre el joc durant la partida i no haver d’esperar al final per sortir.

del programa

  • Mostrar una pantalla inicial d’Ajut /Introducció al joc, en la qual s’expliqui l’objectiu i el funcionament del joc.