Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: el conquistador13 en 28 Octubre 2016, 13:46 pm



Título: Ayuda con Pascal
Publicado por: el conquistador13 en 28 Octubre 2016, 13:46 pm
Necesito hacer un programa que pidad el lado del cuadrado (obligatoriamente
debe ser impar y mayor que 0) y debe dibujar un cuadrado de la siguiente forma:
Si n=3                Si lado = 5                  Si lado = 7
AAA                    AAAAA                          AAAAAAA
ABA                    ABBBA                          ABBBBBA
AAA                    ABCBA                          ABCCCBA
                          ABBBA                          ABCDCBA
                          AAAAA                          ABCCCBA
                                                              ABBBBBA
                                                              AAAAAAA

Por ahora llevo esto
Código:
BEGIN
REPEAT
writeln('Introduzca el lado del cuadrado (impar y mayor que 0:)');
readln(lado);
UNTIL(lado > 0) AND (lado MOD 2 = 1);
letra := 'A';
FOR i := 0 TO (lado-1) DO BEGIN
FOR j := 0 TO (lado-1) DO BEGIN
IF (j = 0) OR (j = lado-k) OR (i = 0) OR (i = lado-k)THEN
write(letra)
ELSE
write(chr(ord(letra)+1));
END;
writeln();
END
writeln();
END;
Si alguien me pudiese ayudar. Si no es en Pascal da igual que sea en c o en C++


Título: Re: Ayuda con Pascal
Publicado por: engel lex en 28 Octubre 2016, 16:25 pm
no manejo pascal, así que iré explicando en base a C

parte de tu codigo está bien, pero ignoras el hecho que la propagación llega solo hasta la mitad del cuadrado y vuelve

para lo que quieres hacer debes manejar un ciclo de "entrada" (la primera mitad) y un ciclo de "salida" (la segunda mitad) tanto horizontal como vertical

primero ... lees el numero y revisas que mod%2==1
la entrada será hasta la mitad mas 1

Código:
int entrada = leido/2 +1;
int salida = leido/2;

esto ya que cuando divides un impar entre 2 y lo dejas como entero, quedará uno menos del medio, así que para 5 entrada es 3 y salida 2

haces un ciclo desde 1 hasta (menor que) entrada y otro desde salida hasta (mayor que) 1....  esto nos dirá cuantas letras van en esta capa

dentro del ciclo de entrada haces otro ciclo... este recorre desde 0 hasta entrada

dentro de este ciclo un if con el que medirás si la posición es menor o igual que el valor del ciclo entrada, si lo es escribe la respectiva letra, si no, escribe la maxima (que es el valor del ciclo anteror)

ejemplo

Código:
para Y desde 0 hasta Y < entrada{
  para X desde 0 hasta X < entrada{
    si(X<=Y) imprimir 'A'+X
    sino imprimir 'A'+Y
  }
}

esto con leido = 7  dará

Código:
leido = 7
entrada = 3

X= 0 1 2 3 4 5 6 7
Y________________
0| A A A A
1| A B B B
2| A B C C
3| A B C D  
4|
5|
6|

ahora solo necesitas un poco de matemática para hacer los ciclos de "salida" que es casi lo mismo solo que superado la mitad y hacia atrás


Título: Re: Ayuda con Pascal
Publicado por: el conquistador13 en 28 Octubre 2016, 23:23 pm
Me podrías poner el código completo aunque sea  en c. Es que no me aclaro


Título: Re: Ayuda con Pascal
Publicado por: engel lex en 28 Octubre 2016, 23:47 pm
No se hacen tareas, dime donde está tu duda


Título: Re: Ayuda con Pascal
Publicado por: el conquistador13 en 29 Octubre 2016, 10:17 am
No entiendo a qué te refieres con un bucle de entrada y uno de salida. Y no se como hacer ese " poco de matemáticas"


Título: Re: Ayuda con Pascal
Publicado por: engel lex en 1 Noviembre 2016, 04:52 am
el bucle de entrada es el que escribe

ABCD


el de salida quien escribe CBA (el que va de retroceso)

la matematica es para calcular esa resta