Pascal/Turbo Pascal - ayuda para que me siga el orden de columnas y filas

 
Vista:

ayuda para que me siga el orden de columnas y filas

Publicado por thecf809 (1 intervención) el 25/04/2020 21:22:00
tengo este programa que me organiza los numero de manera ascendente y descendente pero cuando llegan a c
400 vota el orden de columna y filas quien me ayuda para que me siga el orden de columnas y filas.

aqui le dejo el programa (es en pascal):

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
Program Ascendente;
Uses Crt;
Var
  N, Inicio,Final,L,C : Integer;
  Ch : Char;
Begin
 Repeat
  Clrscr;
  N := 0;
  C := 1;
  L := 3;
  Inicio := 0;
  Final := 0;
  Gotoxy(20,01);Write('Inicial::: ');Readln(Inicio);
	Gotoxy(20,02);Write('Final::: ');Readln(Final);
  If Inicio < Final Then
   Begin
    Repeat
     Inicio := Inicio + 1;
     Gotoxy(C,L); Write(Inicio);
     L := L + 1;
     If (L >= 23)  Then
      Begin
       L := 3;
       C := C + 4;
      End;
    Until ( Inicio >= Final);
   End
  Else
   Repeat
    Gotoxy(C,L); Write(Inicio);
    Inicio := Inicio - 1;
    L := L + 1;
    If (L >= 23) Then
     Begin
      L := 3;
      C := C + 4;
     End;
   Until ( Inicio <= Final);
   Gotoxy(20,30);Write(' Desea Continuar [S/N]  ');Readln(Ch);
  Until ( Upcase(Ch) ='N');
 Readkey;
End.
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
sin imagen de perfil
Val: 86
Bronce
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

ayuda para que me siga el orden de columnas y filas

Publicado por David (37 intervenciones) el 14/05/2020 04:56:27
¿Qué cantidad de caracteres tiene el ancho de la pantalla?
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
sin imagen de perfil
Val: 112
Bronce
Ha mantenido su posición en Pascal/Turbo Pascal (en relación al último mes)
Gráfica de Pascal/Turbo Pascal

ayuda para que me siga el orden de columnas y filas

Publicado por juanba (40 intervenciones) el 01/06/2020 09:57:49
Hola.
Aunque sea algo tarde, voy a intentar explicar lo que te pasa por si es útil para alguien.
Posiblemente tienes definido el ancho de la ventana de comandos a su tamaño estándar que son 80 columnas.
Como el programa coloca 20 datos por columna, cuando el número de datos sea de 400 o más habrá 20 o más columnas. Cada columna ocupa un ancho de 3digitos + 1 espacio en blanco = 4 casillas que multiplicadas por las 20 columnas de datos nos da los 80 caracteres que se pueden visualizar en cada linea de pantalla. A partir de ahí, la instrucción GotoXY(C, L) no puede localizar la posición y los caracteres aparecen secuencialmente en la pantalla.

Para resolver o paliar el problema, si tu sistema operativo permite cambiar las propiedades de la ventana de comandos, clica en el simbolo del sistema (esquina superior izquierda de la ventana de comandos)

Gotxy-01

y selecciona la opción Propiedades.

Gotxy-03

En la siguente ventana selecciona la pestaña Diseño, desmarca la casilla Ajustar la salida de texto al cambiar de tamaño si es que está marcada y aumenta el ancho en Tamaño de la ventana a lo que necesites.
Adjunto las imágenes con un ancho de 160 columnas.

Gotxy-04

Si esto no es posible, tendrías que comprobar que (Final - Inicio) div 20 no es mayor que <Ancho de la ventana> div 4 . De lo contrario te aparecerá ese desborde. O tambien podrías hacer columnas de más de 20 números cada una si es que la ventana se puede estirar hacia abajo.

Un comentario sobre el programa: Te van a salir las pantallas muy feas si el número visualizado tiene más de tres dígitos o si tiene 3 y es negativo. Yo le pondría algún control a las entradas de Inicio y Final.
Por ejemplo que tengan que ser >= 0 y < 1000.

Resultado para numeros > 1000:

Gotxy-05

Resultado para negativos:

Gotxy-06

Otra cosa más: Observo que el bucle de escritura de los números empieza incrementando el valor de Inicio y lugo lo muestra en pantalla, con lo que el primer dato no se representa nunca. ¿No convendría desplazar la instrucción Inicio := Inicio + 1 una línea más abajo (después de GotoXY(C, L); write(Inicio)). Si se hace esto y se quiere que también aparezca Final en la lista hay que cambiar la condición Until a Until ( Inicio > Final); (estrictamente mayor que).

Suerte.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar