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++
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
Me podrías poner el código completo aunque sea en c. Es que no me aclaro
No se hacen tareas, dime donde está tu duda
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"
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