error de compilacion
Publicado por manu (2 intervenciones) el 05/04/2009 05:38:07
Hola, que tal? estoy haciendo un tateti en pascal.. cuando lo compilo me tira el siguien error:
** ERROR ILLEGAL QUALIFIER **
este es el codigo del programa y el error es en las lineas q estan marcadas dentro de la funcion leertabla...
PROGRAM tateti;
USES
Crt;
VAR
A:ARRAY[1..3,1..3] OF char;
turno:byte;
partida,simbolo:char;
PROCEDURE jugada(simbolo:char);
VAR
jugi,jugj:integer;
LABEL
ingreseotro;
BEGIN
writeln;
write(' Jugador ',simbolo,', marque una casilla: ');
ingreseotro:
read(jugi,jugj);
IF (jugi<=3) AND (jugi>=1) AND (jugj<=3) AND (jugj>=1) THEN {si esta en el rango}
BEGIN
IF (A[jugi,jugj]<>'X') AND (A[jugi,jugj]<>'O') THEN {si esta vacio}
A[jugi,jugj]:=simbolo
ELSE
BEGIN
write(' El casillero ya esta marcado, ingrese otro: ');
GOTO ingreseotro;
END;
END
ELSE
BEGIN
write(' El numero de casillero es invalido, ingrese otro: ');
GOTO ingreseotro;
END;
END;
FUNCTION leertabla(A:ARRAY OF char;simbolo:char):char;
BEGIN
{en estas lineas es el error}
IF ((A[1,1]=simbolo) AND (A[1,1]=A[2,2]) AND (A[1,1]=A[3,3])) THEN {diagonal 1º}
leertabla:=simbolo
ELSE IF ((A[1,3]=simbolo) AND A[1,3]=A[2,2]) AND (A[1,3]=A[3,1]) THEN {diagonal 2º}
leertabla:=simbolo
ELSE IF ((A[1,1]=simbolo) AND A[1,1]=A[1,2]) AND (A[1,1]=A[1,3]) THEN {fila 1}
leertabla:=simbolo
ELSE IF ((A[2,1]=simbolo) AND A[2,1]=A[2,2]) AND (A[2,1]=A[2,3]) THEN {fila 2}
leertabla:=simbolo
ELSE IF ((A[3,1]=simbolo) AND A[3,1]=A[3,2]) AND (A[3,1]=A[3,3]) THEN {fila 3}
leertabla:=simbolo
ELSE IF ((A[1,1]=simbolo) AND A[1,1]=A[2,1]) AND (A[1,1]=A[3,1]) THEN {columna 1}
leertabla:=simbolo
ELSE IF ((A[1,2]=simbolo) AND A[1,2]=A[2,2]) AND (A[1,2]=A[3,2]) THEN {columna 2}
leertabla:=simbolo
ELSE IF ((A[1,3]=simbolo) AND A[1,3]=A[2,3]) AND (A[1,3]=A[3,3]) THEN {columna 3}
leertabla:=simbolo
{hasta aca}
ELSE
leertabla:=' ';
END;
PROCEDURE mostrartabla();
VAR
i,j:byte;
BEGIN
ClrScr;
writeln;
writeln(' TA-TE-TI');
writeln;
writeln(' 1 2 3');
writeln(' +-----------+');
FOR i:=1 TO 3 DO
BEGIN
FOR j:=1 TO 3 DO
BEGIN
IF j=1 THEN
write(' ',i,'| ',A[i,j],' | ')
ELSE
write(A[i,j],' | ');
END;
writeln;
IF i=3 THEN
writeln(' +-----------+')
ELSE
writeln(' |---+---+---|');
END;
END;
BEGIN
partida:=' ';
turno:=0;
WHILE ((partida=' ') AND (turno<=9)) DO
BEGIN
turno:=turno+1;
IF ((turno mod 2)=0) THEN
simbolo:='O'
ELSE
simbolo:='X';
mostrartabla;
jugada(simbolo);
partida:=leertabla(simbolo);
END;
mostrartabla;
writeln;
IF (partida=' ') THEN
writeln(' Partido empatado!')
ELSE
writeln(' El jugador ',simbolo,' gano la partida!');
END.
el problema es con el array q le paso como argumento a la funcion leertabla, me parece...
yo le paso como argumento dentro del cuerpo del programa, un array bidimensional.. pero no se como declararlo en la funcion para que sea bidimensional, porq no me deja ni poniendole el rango (ej: A:ARRAY[1..3,1..3] OF char; ) ni de esta forma A : ARRAY OF ARRAY OF char;
por favor fijense si alguien me puede ayudar.. porq me esta volviendo loco!!! jej
muchas gracias
saludos
** ERROR ILLEGAL QUALIFIER **
este es el codigo del programa y el error es en las lineas q estan marcadas dentro de la funcion leertabla...
PROGRAM tateti;
USES
Crt;
VAR
A:ARRAY[1..3,1..3] OF char;
turno:byte;
partida,simbolo:char;
PROCEDURE jugada(simbolo:char);
VAR
jugi,jugj:integer;
LABEL
ingreseotro;
BEGIN
writeln;
write(' Jugador ',simbolo,', marque una casilla: ');
ingreseotro:
read(jugi,jugj);
IF (jugi<=3) AND (jugi>=1) AND (jugj<=3) AND (jugj>=1) THEN {si esta en el rango}
BEGIN
IF (A[jugi,jugj]<>'X') AND (A[jugi,jugj]<>'O') THEN {si esta vacio}
A[jugi,jugj]:=simbolo
ELSE
BEGIN
write(' El casillero ya esta marcado, ingrese otro: ');
GOTO ingreseotro;
END;
END
ELSE
BEGIN
write(' El numero de casillero es invalido, ingrese otro: ');
GOTO ingreseotro;
END;
END;
FUNCTION leertabla(A:ARRAY OF char;simbolo:char):char;
BEGIN
{en estas lineas es el error}
IF ((A[1,1]=simbolo) AND (A[1,1]=A[2,2]) AND (A[1,1]=A[3,3])) THEN {diagonal 1º}
leertabla:=simbolo
ELSE IF ((A[1,3]=simbolo) AND A[1,3]=A[2,2]) AND (A[1,3]=A[3,1]) THEN {diagonal 2º}
leertabla:=simbolo
ELSE IF ((A[1,1]=simbolo) AND A[1,1]=A[1,2]) AND (A[1,1]=A[1,3]) THEN {fila 1}
leertabla:=simbolo
ELSE IF ((A[2,1]=simbolo) AND A[2,1]=A[2,2]) AND (A[2,1]=A[2,3]) THEN {fila 2}
leertabla:=simbolo
ELSE IF ((A[3,1]=simbolo) AND A[3,1]=A[3,2]) AND (A[3,1]=A[3,3]) THEN {fila 3}
leertabla:=simbolo
ELSE IF ((A[1,1]=simbolo) AND A[1,1]=A[2,1]) AND (A[1,1]=A[3,1]) THEN {columna 1}
leertabla:=simbolo
ELSE IF ((A[1,2]=simbolo) AND A[1,2]=A[2,2]) AND (A[1,2]=A[3,2]) THEN {columna 2}
leertabla:=simbolo
ELSE IF ((A[1,3]=simbolo) AND A[1,3]=A[2,3]) AND (A[1,3]=A[3,3]) THEN {columna 3}
leertabla:=simbolo
{hasta aca}
ELSE
leertabla:=' ';
END;
PROCEDURE mostrartabla();
VAR
i,j:byte;
BEGIN
ClrScr;
writeln;
writeln(' TA-TE-TI');
writeln;
writeln(' 1 2 3');
writeln(' +-----------+');
FOR i:=1 TO 3 DO
BEGIN
FOR j:=1 TO 3 DO
BEGIN
IF j=1 THEN
write(' ',i,'| ',A[i,j],' | ')
ELSE
write(A[i,j],' | ');
END;
writeln;
IF i=3 THEN
writeln(' +-----------+')
ELSE
writeln(' |---+---+---|');
END;
END;
BEGIN
partida:=' ';
turno:=0;
WHILE ((partida=' ') AND (turno<=9)) DO
BEGIN
turno:=turno+1;
IF ((turno mod 2)=0) THEN
simbolo:='O'
ELSE
simbolo:='X';
mostrartabla;
jugada(simbolo);
partida:=leertabla(simbolo);
END;
mostrartabla;
writeln;
IF (partida=' ') THEN
writeln(' Partido empatado!')
ELSE
writeln(' El jugador ',simbolo,' gano la partida!');
END.
el problema es con el array q le paso como argumento a la funcion leertabla, me parece...
yo le paso como argumento dentro del cuerpo del programa, un array bidimensional.. pero no se como declararlo en la funcion para que sea bidimensional, porq no me deja ni poniendole el rango (ej: A:ARRAY[1..3,1..3] OF char; ) ni de esta forma A : ARRAY OF ARRAY OF char;
por favor fijense si alguien me puede ayudar.. porq me esta volviendo loco!!! jej
muchas gracias
saludos
Valora esta pregunta


0