[ Foro de Pascal ]

Ayuda en este planteamiento...

19-Nov-2010 10:59
oscar gomez
1 Respuestas

Cordial saludo.
Agradeciendo antetodo este espacio y colaboracion que nos brindan, que sepan que su ayuda es muy valiosa.

intento resolver el siguiente planteamiento para un programa en pascal.

la idea es que cada vez que se me indique la entrada para una componente de una matriz , vaya entrando el valor y que este se coloque inmediatamente en esa posicion y se vaya visualizando por cada entrada de componente la creacion de la matriz.

ejemplo
supon una matriz de 3x3

al entrar porejemplo el valor 9 y dar enter, este se posicione en dicha componente y asi para las demas.

valor de A[3][1]:9
5  1  6
12 34 5
9 ...



valor de A[3][2]:7
5  1  6
12  34  5
9  7


valor de A[3][3]:3
5  1  6
12  34  5
9  7  3


si vemos en el ejemplo que os doy se me esta pidiendo la  componente A[3][1], al entrar el valor y dar enter, este valor debe posicionarse debajo del 12...asi hasta el final osea hasta
A[3][3](logicamente este proceso a sido el mismo para las filas uno y dos ya llenadas) ,pues bien  he intentado de varias formas pero no encuentro la solucion,en alguna parte lei sobre utilizar una funcion llamada ClrEol, que permite borrar linea actual, pero no se en que parte y de que forma colocarla porejemplo en la parte de codigo de lectura de componentes de la matriz, y si deba usar gotoxy? si pueen ayudarme mil gracias

begin
for i:= 1 to 3
for j:= 1 to 3 do
begin
writeln('valor de A[' , i , ',' , j , ']');
readln(A[i,j]);
end;
end.


19-Nov-2010 11:42
Nacho Cabanes (+83)

En principio, no creo que necesites posicionarte con gotoxy. Con el ejemplo que tú muestras, yo creo que bastaría con que tras cada lectura de un valor muestres todo el array:

for i:= 1 to 3
 for j:= 1 to 3 do
   begin
   writeln('valor de A[' , i , ',' , j , ']');
   readln(A[i,j]);
   escribeArray;
 end;
end;

donde "escribeArray" sería un "procedure" que escribiría toda la matriz con dos "for", similar a lo que haces cuando pides los datos:

for i:= 1 to 3
 for j:= 1 to 3 do
   begin
   write(A[i,j], '  ');
 end;
 writeln;
end;

Si aun así, quieres usar gotoxy (algo que es posible si el programa es para ti, pero no suelen querer que uses si es para una universidad o centro de estudios), podrías pedir datos siempre en la primera fila y mostrarlos a partir de (por ejemplo) la cuarta, así:

for i:= 1 to 3
 for j:= 1 to 3 do
   begin
   clrscr;
   writeln('valor de A[' , i , ',' , j , ']');
   readln(A[i,j]);
   escribeArray;
 end;
end;

(al borrar la pantalla, te quedas en la posición inicial) Y la rutina de escribir podría ser


for i:= 1 to 3
 for j:= 1 to 3 do
   begin
   gotoxy(j * 10, i + 2);
   write(A[i,j], '  ');
 end;
end;

pero eso tiene el problema de que tendrías que añadir una pausa (con "delay", por ejemplo), porque si no, borrarías la pantalla inmediatamente y no se llegaría a ver. La alternativa, que es volver a escribir con gotoxy sin borrar, tampoco es buena, porque puede quedar "basura" que haga que no leas los valores correctos. Por ejemplo, si donde había un 23 escribes ahora un 4... puede parecer que has escrito un 43.

Por todas esas complicaciones, insisto: a nivel de un aprendiz, creo que es más razonable hacerlo sin "gotoxy".






(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.)