pequeño problema en pascal

GeeK

Hola, quería exponeros un pequeño problema que tengo en un programa que estoy haciendo para un trabajo. El caso es que es una base de datos para la gestión de una biblioteca , con sus arrays con alumnos , arrays con códigos de libros y arrays con los préstamos. En un apartado me pide que muestre los préstamos(que anteriormente se han inicializado en otro módulo). Estos préstamos yo los quiero representar en forma de cuadrícula , vamos que se vean los datos separados por columnas y rectos, pero tengo un problema y me salen así, y no sé como arreglarlo:

http://img244.imageshack.us/img244/6230/esquema2fh9.jpg

Por cierto, el código del submódulo que inicializa el array de los préstamos(el array se llama real) y posteriormente lo muestra(aquí es donde tengo el problema), es el siguiente:

Procedure inicializar_dias_prestamo(var real:vector1;var nlibros:integer;var nalumnos:integer);
var i,j:integer;
begin

 For i:=1 to nalumnos do
     For j:=1 to nlibros do
         begin
         writeln('Dime el numero de dias que se ha prestado el libro ',j,' al alumno ',nombresdealumnos[i]);
         readln(real[i,j]);
         end;

end;

Procedure mostrar_dias_prestamo(var real:vector1;var nlibros:integer;var nalumnos:integer);
var i,j:integer;
begin

 For i:=1 to nalumnos do
 begin
     write(nombresdealumnos[i]);
     For j:=1 to nlibros do
         begin
         write(real[i,j],'  ');
         end;
 writeln;

 end;

Alguien me puede comentar como arreglarlo?. En la imagen sale como quiero que quede y al lao , la ventanita negra como me queda :(.

Saludos y gracias

zoKes

Si fuese en Delphi o Visual Basic seria mas facil ,jejeje

Una manera es tabularlo con comentarios , es una chapuza .

Otra forma de hacerlo es con la funcion GOTO (X, Y) , funciona en Turbo C: , no se si esta En Turbo Pascal.

Busca en la ayuda de Turbo Pascal pa ver si sale, GOTO , las x es la medida vertical , la Y es para la horizontal.

GeeK

me han dicho que existe la función wherey y goto(x,y). con la función wherey lo que hago es contar los espacios que ocupan las palabras y a continuación con un ciclo y metiendole un número definido "20 x ejemplo", le restas el wherey y sale un espacio general para todas las frases, sean más cortas o más largas, por lo que siempre quedaría bien tabulado ,pero me queda así:

http://img185.imageshack.us/img185/5504/otrazz1.jpg

p.d: este es el mensaje que me dejó un compañero de la universidad :

No me he puesto a leer el programa xq me da pereza pero se me ha ocurrido una cosa y tu pruebala si quieres.
hay una función preestablecida en pascal que es 'wherey' que te dice en que posición esta el cursor cuando ejecutas el comando, es decir:
jose manuel_ *la barra baja (_) es el cursor.
wherey tomaria valor 12 en este caso dado que el cursor esta en la posicion 12.

y existe otra función que es 'gotoxy(a,b)' siendo a,b naturales los que tu quieras.

Pues bien, he visto que con lo que tienes problemas es con la separacion de la primera columna de la segunda. La idea es la siguiente, establece que habra 20 espacios para escribir el nombre, si escribes jose manuel de 11 sobraran 9 que rellenaremos con espacios con un ciclo.
write('jose manuel') *escribe jose manuel y el cursor se queda a continuacion de la l
x := wherey; *x toma el valor 12
j := 20-x; *j es el numero de espacios hasta 20 q hay q rellenar
for i:=1 to j
write(' '); *escribe j espacios

y apartir de ahi escribes todo lo demas que si q lo tienes bien separado
espero que te sirva de algo
1 saludo

Salcort

Hazlo con goto(x,y), inicializalos ambos a 1 y a partir de ahi vas añadiendo espacio. Hazlo desde un procedimiento a parte al que vallas llamando constantemente para sumarle o restarle un valor o te pasaras horas escribiendo goto(x,y).

GeeK

pero es que no entiendo como funciona la función goto(x,y). El programa ya lo tengo terminado, solo me falta esta parte y ya lo puedo entregar, pero las opciones goto y wherey no las he dao , ya que son fundamentos muy simples para hacerse un poco a la idea de pascal y es la primera vez que los oigo, tonces pues no sé como meterle mano porque no sé como funcionan, xDDD. Lo de hacer un procedimiento aparte no tengo problemas, pero no sé como debo usar el goto

GeeK

vale, ya sé como funciona la función gotoxy por un ejemplo que ví en internet. Aquí teneis la maravilla , xDDD.

http://img413.imageshack.us/img413/9830/yavatl2.jpg

GeeK

vale, ahora arreglándolo un poquillo ya sale lo que yo quería, arriba los códigos de los libros, introducidos por otro subalgoritmo y a la izquierda los nombres de los alumnos guardados en un array de tipo string. En el medio los días de préstamo . Resultado:

http://img297.imageshack.us/img297/5115/finishpg8.jpg

Salcort

Es muy simple, goto(x,y) lleva el puntero a las coordenadas que tu le especificas, bien sea para tomar datos o para mostrarlos.

zoKes

Exacto , enhorabuena :D , perdon por no explicar el funcionamiento de goto correctamente.

Usuarios habituales

  • zoKes
  • Salcort
  • GeeK