[ Foro de Pascal ]

Ficheros Pascal

18-Jan-2021 18:27
Invitado (nerea)
0 Respuestas

Hola necesito un programa que lea barcos desde un fichero, son dos jugadores y en el fichero vienen los datos de los barcos de un jugador seguidos de la palabra fin y los datos de otro jugador seguidos de la palabra fin, he conseguido leer un barco, pero intento leer varios barcos y no lo consigo,
Adjunto el enunciado más detallado y al final el codigo que tengo

[Tenemos un juego en el que se sitúan barcos en un tablero para dos jugadores y posteriormente los jugadores efectúan lanzamientos hasta hundir todos los barcos de los jugadores contrarios.
Un tablero tiene coordenadas desde la A a las J para las columnas y desde el 1 hasta el 10 para las filas, siendo A1 la coordenada de arriba a la izquierda.
Un barco está definido por el tipo de barco (Submarino, Fragata, Dragaminas, Portaaviones), por la posición de su proa (una casilla del tablero)  y por su orientación (Horizontal o Vertical).
Un barco horizontal tiene la proa a la izquierda. Uno vertical tiene la proa arriba.
Los submarinos ocupan 1 casilla, las fragatas 2,  los dragaminas 3, y los portaaviones 4.
En la entrada, tenemos datos para un dos jugadores, y, para cada jugador, tenemos datos de un número indeterminado de barcos.
Cada jugador en la entrada tiene barcos (quizá ninguno) seguidos por la palabra FIN.
Para cada barco, tenemos en este orden el tipo de barco, la coordenada de la proa y la orientación.
Puede haber cualquier cantidad de espacio en blanco en la entrada entre distintas palabras.
Además, la entrada puede ser incorrecta y en lugar de tener lo que se espera tener, podríamos tener cualquier otra cosa.
Además, los barcos podrían estar mal situados, de tal forma que alguno salga del tablero o de forma que alguno esté sobre otro parcial o totalmente.Los barcos mal situados deben ignorarse]

Adjunto el código que tengo y me da error:
const
MinFil = 1;
MaxFil = 10;
MinCol = 'A';
MaxCol = 'J';
NumBarcos = 100;

type
TipoModBarco = (Submarino, Fragata, Dragaminas, Portaaviones);
TipoColumna = MinCol..MaxCol;
TipoFila = MinFil..MaxFil;
TipoPos = record
columna: TipoColumna;
fila: TipoFila;
end;
TipoOrientacion = (Vertical, Horizontal);
TipoBarco = record
modelo: TipoModBarco;
posicion: TipoPos;
orientacion: TipoOrientacion;
end;
TipoBarcos = array[1..NumBarcos] of TipoBarco;
TipoJugador = record
barcos: TipoBarcos;
num: 0..NumBarcos;
end;

procedure leerbarco(var fichero: text; var barco: TipoBarco);
var
aux: char;
begin
read(fichero, barco.modelo);
read(fichero, aux);
while (aux = ' ') do begin
read(fichero, aux);
end;
barco.posicion.columna := aux;
read(fichero, barco.posicion.fila);
read(fichero, barco.orientacion);
end;
procedure leerjug(var fichero: text; var jug: TipoJugador);
begin
jug.num := 0;
while not eof(fichero) do begin
jug.num := jug.num + 1;
leerbarco(fichero, jug.barcos[jug.num]);
end;
end;

var
fichero: text;
barco: TipoBarco;
barco2: TipoBarco;
jug1: TipoJugador;
jug2: TipoJugador;

begin
assign(fichero, 'datos.txt');
reset(fichero);
leerjug(fichero, jug1);
close(fichero);
end.




(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)