Ejercicio Pascal

Iniciado por BioHazardTM, 1 Enero 2012, 23:41 PM

0 Miembros y 1 Visitante están viendo este tema.

BioHazardTM

Buenas noches, tengo un problema con un ejercicio de Pascal, el ejercicio consiste en escribir un programa que a partir de un número entero impar, forme figuras de este tipo:

Número = 5

5
  4
    3
  2
1


Tengo todo el ejercicio hecho, pero me falta una parte, si hay 5 filas y 5 columnas, ¿cuál sería el número de espacios en función de las filas, que debería poner?
Código (pascal) [Seleccionar]
PROGRAM P04_8;
USES    CRT;
VAR     N, i, j, k, cont: integer;
BEGIN
        Write('Introduce un numero positivo impar: ');
        Read(N);

        FOR i := 1 TO N DO
                cont := 0;
                FOR j := 1 TO N DO
                        BEGIN
                                IF (j MOD 2 <> 0) AND (cont = 0) THEN
                                        BEGIN
                                                IF (i <> 1) THEN
                                                        BEGIN
                                                                k := ;   <------ k = Numero de espacios antes del numero, para la fila actual
                                                                REPEAT
                                                                        BEGIN
                                                                                Write(' ');
                                                                                k := k - 1;
                                                                        END;
                                                                UNTIL k = 0;
                                                        END;
                                                Write(N - i + 1);
                                                cont := cont + 1;
                                        END;
                                IF (cont <> 0) THEN Write(' ');
                        END;

READKEY;
END.


No se si me he explicado bien.

kaiserr

#1
mmmm
y si utilizas por ejemplo:

write(a:5)

Con esto mueves el valor de a (en mi caso, en el tuyo el valor que quieras mover) 5 posiciones.
No domino mucho el lenguaje pero ahora mismo me pongo hacer el codigo a ver si me sale.
--------------------------------------------------------------------------

Rectifico:

Al haber 5 linias es posible que haya 5 columnas?, es decir, en el ejemplo que has puesto hay 5 linias pero solo utilizas 3 columnas

5
 4
   3
 2
1





BioHazardTM

Lo que pasa es que en el ejemplo que he puesto los espacios también los cuento como columnas (las dos columnas en blanco).

W0lFy

#3
por que no cambias un poquito la funcion, te dejo una que se entiende mejor:
Código (pascal) [Seleccionar]
PROGRAM
VAR
a:integer;

PROCEDURE escrbirImpar(num:integer)
VAR i,j,limite,cont:integer;
BEGIN
cont:=0;
limite= num div 2 + num mod 2;
FOR i := num DOWNTO 1 BEGIN
cont = (i div limite) * (limite - (i Mod limite + 1)) + ((i Mod limite - 1) - (i div limite) * (i Mod limite - 1))
   For j:= 1 To cont
        print(' ');
   println(i);
   END;
END;

BEGIN
read(a);
escrbirImpar(a);

END.





Pd. Habra algún error de compilación no recuerdo si los procedimientos ivan arriba o abajo de las variables... espero que te sirva :D
K@NuT0