Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Solución Al Ejercicio 4º (Tema 6) Módulo Ponerbarcover:: T, F, C, Tam T',Error
Solución Al Ejercicio 4º (Tema 6) Módulo Ponerbarcover:: T, F, C, Tam T',Error
MÓDULO ponerBarcoVer:
M. llamador
t',error t,f,c,tam
ponerBarcoVer
1º) ANÁLISIS:
a) Datos de entrada:
NUMFIL=9. Número de filas del tablero. Dato fijo.
NUMCOL=9. Número de columnas del tablero. Dato fijo.
t[1..NUMFIL][1..NUMCOL].ocu: Indicador de si la casilla está o no ocupada por una
porción de barco. Módulo llamador. (t[i][j].ocu є {0,1})
t[1..NUMFIL][1..NUMCOL].tam: Tamaño del barco del que forma parte la casilla.
Módulo llamador. (si t[i][j].ocu=1, entonces 1 ≤ t[i][j].tam ≤ 4)
t[1..NUMFIL][1..NUMCOL].pos: Posición que ocupa la porción respecto al barco
completo. Módulo llamador. (si t[i][j].ocu=1, entonces 1 ≤ t[i][j].pos ≤ t[i][j].tam)
t[1..NUMFIL][1..NUMCOL].dir: Dirección en la que está situado el barco. Módulo
llamador. (si t[i][j].ocu=1, entonces t[i][j].dir є {'H','V'})
t[1..NUMFIL][1..NUMCOL].des: Indicador de si la porción está o no destruida. Módulo
llamador. (si t[i][j].ocu=1, entonces t[i][j].des є {0,1})
tam: tamaño del barco. Módulo llamador. (1 ≤ tam ≤ 4)
f: fila donde se situará el extremo superior del barco. Módulo llamador.
(0 ≤ f ≤ NUMFIL-tam)
c: columna donde se situará el extremo superior del barco. Módulo llamador.
(0 ≤ c ≤ NUMCOL-1)
b) Datos de salida:
error: indicador de si alguna de las casillas donde debe situarse el barco está ya ocupada
(1) o no (0). Módulo llamador.
t'[1..NUMFIL][1..NUMCOL]: tablero actualizado con el nuevo barco situado en
posición vertical. Módulo llamador.
c) Comentarios:
Suponemos que en algún módulo ascendiente se ha definido lo siguiente:
CONSTANTES
NUMCOL=9
TIPOS
tCasilla = ocu,tam,pos,des:entero
dir:carácter
Utilizaremos una variable índice para comprobar si las casillas donde debe situarse el
barco están o no ocupadas y, en caso de negativo, colocar el barco.
2º) DISEÑO:
a) Parte declarativa:
ponerBarcoVer(t[][NUMCOL]:tCasilla, tam:entero, f:entero, c:entero, *error:entero)
VARIABLES
i:entero
b) Representación algorítmica:
ponerBarcoVer(t,tam,f,c,error)
BLOCK
i ← 0,tam-1,1 BLOCK
3º) CODIFICACIÓN:
/****************************************************************/
/*** E J E R C I C I O 4 - T E M A 6 ***/
/*** ***/
/*** Módulo para colocar un barco en posición vertical en el ***/
/*** juego de los barcos. ***/
/****************************************************************/
(...)
typedef struct
{
int ocu,tam,pos,des;
char dir;
} tCasilla;
(...)
i=0;
while (!t[f+i][c].ocu && i < tam-1)
i=i+1;
*error=t[f+i][c].ocu;
if (!*error) /* ¿Las casillas del nuevo barco están libres? */
for (i=0; i<=tam-1; i=i+1)
{
t[f+i][c].dir='V';
t[f+i][c].ocu=1;
t[f+i][c].pos=i+1;
t[f+i][c].tam=tam;
t[f+i][c].des=0;
}
}