Ayuda con Pascal

Iniciado por el conquistador13, 28 Octubre 2016, 13:46 PM

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

el conquistador13

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

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++

engel lex

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

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


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á

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

el conquistador13

Me podrías poner el código completo aunque sea  en c. Es que no me aclaro

engel lex

No se hacen tareas, dime donde está tu duda
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.

el conquistador13

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"

engel lex

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
El problema con la sociedad actualmente radica en que todos creen que tienen el derecho de tener una opinión, y que esa opinión sea validada por todos, cuando lo correcto es que todos tengan derecho a una opinión, siempre y cuando esa opinión pueda ser ignorada, cuestionada, e incluso ser sujeta a burla, particularmente cuando no tiene sentido alguno.