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?
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.
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
Lo que pasa es que en el ejemplo que he puesto los espacios también los cuento como columnas (las dos columnas en blanco).
por que no cambias un poquito la funcion, te dejo una que se entiende mejor:
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