Pascal/Turbo Pascal - AYUDA URGENTE: ¿EN QUÉ ME FALLA EL PROGRAMA?

 
Vista:

AYUDA URGENTE: ¿EN QUÉ ME FALLA EL PROGRAMA?

Publicado por Manu (6 intervenciones) el 28/05/2005 15:54:14
Tengo un problema muy grave. Tengo q hacer la PRÁCTICA siguiente:

http://eii.unex.es/profesores/pcarmona/archivos/practicas/pr0405_3.pdf

Y esto es lo q llevo, pero NO SÉ Q HACER PARA Q FUNCIONE. Necesito ayuda URGENTE
GRACIAS

program practica3(input,output);
uses crt;
(* Definicion de constantes *)
const NUMFIL=2;
NUMCOL=2;
JUGADOR1=1;
JUGADOR2=2;
(* Definicion de variables *)
var x,y:char;
fila1,fila2,columna1,columna2,pos,puntuacion,i,j,r:integer;
(* Definicion de tipos *)
type tipoTabla = array (.1..NUMFIL,1..NUMCOL.) of char;
type tipoAuxiliar = array (.1..NUMFIL.) of char;

(** inicializarJuego(tabla,marcador) **)
(** Inicializa el tablero y los marcadores que deben mostrarse **)
procedure inicializarJuego(var tablero:tipoTabla;var f,c,marcador:integer);
var quedan:array(.1..NUMFIL+NUMCOL.) of integer;
begin
for i:=1 to NUMFIL*NUMCOL do
quedan(.i.):=i;
for i:=NUMFIL*NUMCOL downto 1 do
begin
randomize;
r:=random(i)+1;
pos:=tablero[r];
quedan[r]:=quedan[i];
f:=pos div NUMFIL*NUMCOL;
c:=pos mod NUMFIL*NUMCOL;
tablero[f,c]:=chr(64+(i+1)div2);
end
begin
tablero[f,c]:=chr(32);
for i:=1 to NUMCOL do
for i:=1 to NUMFIL do
begin
i:=f;
if c<>0 then
i:=c
else
i:=NUMCOL;
if x=y then
tablero[f,c]:=char(249)
else
tablero[f,c]:=chr(32);
end;
end;
(** Marcador **)
for j:=JUGADOR1,JUGADOR2,1 do
begin
j:=1;
puntuacion:=0;
if x=y then
begin
writeln('Acierto');
puntuacion:=(puntuacion+1);
writeln(puntuacion);
if j:=JUGADOR1 then
j:=JUGADOR1
else
j:=JUGADOR2
end;
else
begin
writeln('Fallo');
puntuacion:=puntuacion;
writeln(puntuacion);
if j:=JUGADOR1 then
j:=(JUGADOR1+1)
else
j:=(JUGADOR2-1)
mostrarTablero(tablero);
end;
procedure mostrarTablero(tablero:tipoTabla)
begin
for i:=1 to NUMCOL do
begin
c:=i;
for i:=1 to NUMFIL do
f:=i;
end;

(** leerCasilla(NUMFIL,NUMCOL;var f,c:integer **)
(** Lee las coordenadas introducidas del tablero y las valida **)
procedure leerCasilla(const NUMFIL,NUMCOL;var f,c:integer);
begin
writeln ('Escriba la coordenada de la fila');
readln (f);
while f>NUMFIL or c>NUMCOL do
begin
writeln ('Error.La coordenada elegida es erronea');
writeln ('Escriba la coordenada de la fila');
readln (f)
end;
writeln ('Escriba la coordenada de la columna');
readln (c);
while f>NUMFIL or c>NUMCOL do
begin
writeln ('Error.La coordenada elegida es erronea');
writeln ('Escriba la coordenada de la columna');
readln (f)
end;
pos:=[f,c];
end;

(** Modulo principal,cuerpo del programa y llamada a los modulos **)
begin
repeat
begin
mostrarTablero(tablero);
leerCasilla(f,c);
x:=pos;
leerCasilla(f,c);
y:=pos;
inicializarJuego(tablero,f,c,marcador);
end;
until puntuacion:=(NUMFIL+NUMCOL) div 2
readln;
end;

Espero ansioso sus respuestas

Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:AYUDA URGENTE: ¿EN QUÉ ME FALLA EL PROGRAMA?

Publicado por Diego Romero (786 intervenciones) el 30/05/2005 01:17:20
Si no nos dices cuál es el problema dudo mucho que podamos echarte una mano, venga.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

EL PROBLEMA

Publicado por MANU (6 intervenciones) el 30/05/2005 13:40:55
El problema es que no sé en qué falla el programa, el pascal da error de variable pero no se q pasa
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:EL PROBLEMA

Publicado por Diego Romero (786 intervenciones) el 30/05/2005 18:58:48
Bien, he copiado el código que has publicado y pegado en el IDE de Turbo Pascal, F9 mediante me sale "Error 26: Type mismatch" en esta línea:
pos:=tablero[r];
La 26 en mi editor.
Esa sola línea de código tiene tres problemas.
- La variable pos es de tipo integer, pero Tablero es una array de char (tipos no coinciden).
- El índice del array tablero es de tipo subrango según la definición en la type pero r es integer (tipos no coinciden).
- El array tablero es bidimensional pero en la línea solo se indica un solo índice (otra vez, tipos no coinciden).
La solución:
- Define el las dimensiones del array usando una nueva definición de tipo subrango tal como sigue:
type
TRangoFil=1..NumFil;
TRangoCol=1..NumCol;
tipoTabla = array [TRangoFil,TRangoCol] of char;
tipoAuxiliar = array [TRangoFil] of char;

- Declara Pos como char y r como tipo TRangoFil en la cláusula var
var
...
pos:char;
r: TRangoFil;
- Asigna un segundo índice para el array tabla que es como tiene que ser, tú verás cómo haces esto según la lógica del programa.

Finalmente unos consejos.
Mueve todas las definiciones de la cláusula type antes de la cláusula var así:
(* Definicion de tipos *)
type
TRangoFil=1..NumFil;
TRangoCol=1..NumCol;
tipoTabla = array [TRangoFil,TRangoCol] of char;
tipoAuxiliar = array [TRangoFil] of char;

(* Definicion de variables *)
var x,y:char;
fila1,fila2,columna1,columna2,puntuacion,i,j:integer;
pos:char;
r:TRangoFil;

Y no uses "pos" como identificador pues TP puede confundir esto con la función estandar Pos() o viceversa.
Revisa que no haya otras variables que estén declaradas con el tipo de dato equivocado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

GRACIAS DIEGO, PERO

Publicado por MANU (6 intervenciones) el 30/05/2005 20:26:36
Muchas gracias, Diego Romero por ayudarme. He modificado lo que me has dicho pero el problema persiste. ¿Me podrías dar algún consejo más? Me juego mucho con esto. Gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:GRACIAS DIEGO, PERO

Publicado por Diego Romero (786 intervenciones) el 01/06/2005 17:44:13
Mmm..., no sé que más decirte.
¿Qué compilador usas?... tal vez deberíamos seguir esto por correo privado, me parece que esto irá para largo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

USO TP6. muchas gracias

Publicado por Manu (6 intervenciones) el 02/06/2005 11:15:02
NADA Q YA LO TENGO. MUCHAS GRACIAS X TU TIEMPO Y TU AYUDA
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

re maalll

Publicado por yo (1 intervención) el 07/10/2008 02:23:53
todo esta mal
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:AYUDA URGENTE: ¿EN QUÉ ME FALLA EL PROGRAMA?

Publicado por eduardo (3 intervenciones) el 16/08/2008 16:27:30
hola decime por favor en que falle para que me salga el error 26

program practico001;
uses wincrt;
type
temperatura=record
dias:integer;
tempmin:real;
tempmax:real;
end;
var
temp : temperatura;
archivo: file of temperatura;
dias:integer;
cant:integer;
i:integer;
suma:integer;
promedio:integer;
cont:integer;
v:array [1..31] of integer;
begin
assign(archivo,'c: emperatura.dat');
reset(archivo);
while not (eof(archivo)) do begin
read(archivo,temp);
write(temp.dias);
write(temp.tempmax);
write(temp.tempmin);
for i:=1 to 31 do begin
promedio:=(temp.tempmax)+(temp.tempmin)/2
v[i]:=promedio;
end;
suma:=0;
promedio:=0;
for i:=1 to 31 do begin
suma:=suma+v[i];
promedio:=suma/31;
end;
for i:=1 to 31 do begin
if v[i]>promedio then
cont:=cont+1
writeln('dias que superaron el promedio:',i);
end;
end;
porcentaje:=cont*31/100;
writeln('el porcentaje es: ',porcentaje);
write('cerrando archivo');
close(archivo);
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar