Solució del l’Examen Parcial d’Ampliació d’Informàtica

Organització:

Secció ETSEIB, Departament de Ciències de la Computació, UPC

Data:

8 d’abril de 2026

Copyright:

Reconeixement-CompartirIgual 3.0 No adaptada de Creative Commons

Jocs de proves. Utilitzen el fitxer vaixells_ok.py.

Els exemples que compten per la nota són només els que van seguits de # doctesttag: +TAG=

Tests exercici 1: TaulerVaixells

>>> from vaixells import TaulerVaixells
>>> def dibuixa_tauler(t):
...     for y in range(t.dimensio()-1, -1, -1):    # doctesttag: +TAG=1_TaulerVaixells
...         for x in range(t.dimensio()):
...            print(t[x, y], end='')
...         print()
>>> t = TaulerVaixells()
>>> t.num_tirades  # doctesttag: +TAG=1_TaulerVaixells
0
>>> t.dimensio()  # doctesttag: +TAG=1_TaulerVaixells
5
>>> dibuixa_tauler(t)  # doctesttag: +TAG=1_TaulerVaixells
-----
-----
-----
-----
-----
>>> t.afegeix_vaixell_H((1,0), 4)
>>> dibuixa_tauler(t)  # doctesttag: +TAG=1_TaulerVaixells
-----
-----
-----
-----
-VVVV
>>> t.afegeix_vaixell_V((2,2), 3)
>>> dibuixa_tauler(t)  # doctesttag: +TAG=1_TaulerVaixells
--V--
--V--
--V--
-----
-VVVV
>>> t.afegeix_vaixell_H((4,4), 1)
>>> t.afegeix_vaixell_V((0,2), 2)
>>> dibuixa_tauler(t)  # doctesttag: +TAG=1_TaulerVaixells
--V-V
V-V--
V-V--
-----
-VVVV
>>> t.dispara((0,3))
>>> t.num_tirades    # doctesttag: +TAG=1_TaulerVaixells
1
>>> t.dispara((2,1))
>>> t.num_tirades    # doctesttag: +TAG=1_TaulerVaixells
2
>>> dibuixa_tauler(t)  # doctesttag: +TAG=1_TaulerVaixells
--V-V
X-V--
V-V--
-----
-VVVV
>>> for i in range(5): t.dispara((i,i))
>>> t.num_tirades    # doctesttag: +TAG=1_TaulerVaixells
7
>>> dibuixa_tauler(t)  # doctesttag: +TAG=1_TaulerVaixells
--V-X
X-V--
V-X--
-----
-VVVV
>>> t = TaulerVaixells(8)
>>> t.num_tirades  # doctesttag: +TAG=1_TaulerVaixells
0
>>> t.dimensio()  # doctesttag: +TAG=1_TaulerVaixells
8
>>> dibuixa_tauler(t)  # doctesttag: +TAG=1_TaulerVaixells
--------
--------
--------
--------
--------
--------
--------
--------
>>> t.afegeix_vaixell_V((2,2), 1)
>>> t.afegeix_vaixell_H((1,6), 5)
>>> dibuixa_tauler(t)  # doctesttag: +TAG=1_TaulerVaixells
--------
-VVVVV--
--------
--------
--------
--V-----
--------
--------
>>> t.afegeix_vaixell_V((7,0), 2)
>>> t.afegeix_vaixell_H((0,0), 4)
>>> dibuixa_tauler(t)  # doctesttag: +TAG=1_TaulerVaixells
--------
-VVVVV--
--------
--------
--------
--V-----
-------V
VVVV---V
>>> t.afegeix_vaixell_V((5,1), 3)
>>> t.afegeix_vaixell_H((4,5), 4)
>>> dibuixa_tauler(t)  # doctesttag: +TAG=1_TaulerVaixells
--------
-VVVVV--
----VVVV
--------
-----V--
--V--V--
-----V-V
VVVV---V
>>> for i in range(6): t.dispara((i,7-i))
>>> dibuixa_tauler(t)  # doctesttag: +TAG=1_TaulerVaixells
--------
-XVVVV--
----VVVV
--------
-----V--
--V--X--
-----V-V
VVVV---V
>>> for i in range(8): t.dispara((5,i))
>>> dibuixa_tauler(t)  # doctesttag: +TAG=1_TaulerVaixells
--------
-XVVVX--
----VXVV
--------
-----X--
--V--X--
-----X-V
VVVV---V

Tests Exercici2: TaulerMaxTirades

>>> from vaixells_max import TaulerMaxTirades

# Substituïm la classe base per la de vaixells_ok, que compleix l’especificació i és correcta

>>> import vaixells_ok
>>> TaulerMaxTirades.__bases__ = (vaixells_ok.TaulerVaixells, )
>>> t = TaulerMaxTirades()
>>> t.num_tirades     # doctesttag: +TAG=2_TaulerMaxTirades
0
>>> t.max_tirades     # doctesttag: +TAG=2_TaulerMaxTirades
10
>>> t.dimensio()     # doctesttag: +TAG=2_TaulerMaxTirades
5
>>> t.afegeix_vaixell_H((0,1), 5)
>>> t.afegeix_vaixell_V((2,3), 2)
>>> t.afegeix_vaixell_H((4,4), 1)
>>> t.afegeix_vaixell_V((0,2), 2)
>>> dibuixa_tauler(t)  # doctesttag: +TAG=2_TaulerMaxTirades
--V-V
V-V--
V----
VVVVV
-----
>>> t.caselles()  # doctesttag: +TAG=2_TaulerMaxTirades
(10, 0, 15)
>>> t.dispara((2,2))
>>> t.dispara((4,4))
>>> t.num_tirades, t.max_tirades   # doctesttag: +TAG=2_TaulerMaxTirades
(2, 10)
>>> dibuixa_tauler(t)  # doctesttag: +TAG=2_TaulerMaxTirades
--V-X
V-V--
V----
VVVVV
-----
>>> t.caselles()  # doctesttag: +TAG=2_TaulerMaxTirades
(9, 1, 15)
>>> t.dispara((1,3))
>>> t.dispara((2,1))
>>> t.dispara((1,0))
>>> t.num_tirades, t.max_tirades   # doctesttag: +TAG=2_TaulerMaxTirades
(5, 10)
>>> t.caselles()  # doctesttag: +TAG=2_TaulerMaxTirades
(8, 2, 15)
>>> dibuixa_tauler(t)  # doctesttag: +TAG=2_TaulerMaxTirades
--V-X
V-V--
V----
VVXVV
-----
>>> for i in range(10): t.dispara((1,1))
>>> t.num_tirades, t.max_tirades   # doctesttag: +TAG=2_TaulerMaxTirades
(10, 10)
>>> t.caselles()  # doctesttag: +TAG=2_TaulerMaxTirades
(7, 3, 15)
>>> dibuixa_tauler(t)  # doctesttag: +TAG=2_TaulerMaxTirades
--V-X
V-V--
V----
VXXVV
-----
>>> t = TaulerMaxTirades(7, 5)
>>> t.dimensio(), t.num_tirades, t.max_tirades   # doctesttag: +TAG=2_TaulerMaxTirades
(7, 0, 5)
>>> t.afegeix_vaixell_H((1,1), 5)
>>> t.afegeix_vaixell_V((2,4), 3)
>>> t.afegeix_vaixell_H((6,5), 1)
>>> t.afegeix_vaixell_V((0,3), 2)
>>> dibuixa_tauler(t)  # doctesttag: +TAG=2_TaulerMaxTirades
--V----
--V---V
V-V----
V------
-------
-VVVVV-
-------
>>> t.caselles()  # doctesttag: +TAG=2_TaulerMaxTirades
(11, 0, 38)
>>> t.dispara((3,2))
>>> t.dimensio(), t.num_tirades, t.max_tirades   # doctesttag: +TAG=2_TaulerMaxTirades
(7, 1, 5)
>>> t.caselles()  # doctesttag: +TAG=2_TaulerMaxTirades
(11, 0, 38)
>>> for i in range(6): t.dispara((6-i,i))
>>> t.caselles()  # doctesttag: +TAG=2_TaulerMaxTirades
(10, 1, 38)
>>> t.dimensio(), t.num_tirades, t.max_tirades   # doctesttag: +TAG=2_TaulerMaxTirades
(7, 5, 5)
>>> t = TaulerMaxTirades(3, 20)
>>> t.dimensio(), t.num_tirades, t.max_tirades   # doctesttag: +TAG=2_TaulerMaxTirades
(3, 0, 20)
>>> t.caselles()    # doctesttag: +TAG=2_TaulerMaxTirades
(0, 0, 9)