..
es un problema para sentarse a pensar, porque es complicado para un nivel basico...
tienes que usar 3 ciclos anidados...
el primero para repetir cada patron desde la letra de inicio (en tu ejemplo X) hasta la vuelta y comprobar si el largo de la cadena mayor es mayor que 1
el segundo para seleccionar la letra a dibujar y hace cada linea (este se divide en 2, la "ida" y la "vuelta"
el tercero es quien imprime cada letra
para la letra la teoria es simple... no te importa que posición representa cada letra en la tabla ascii, lo que te importa es que no se escape de A y Z, así que la letra que recibes la llevas a una escala entre 0 y 25... esto es tan simple como
char escala = letra_recibida - 'A';
así si recibes un "A", "escala" será 9 y si recibes "Z" será 25
para que no se te desborde debes usar el operador de modulo... como sabes que son 26 letras
char letra = (letra_recibida + modificador) % 26
esto hará que si la letra es Z y se le suma 1, (modificador que te lo da el segundo ciclo) la letra volverá a 0
por ultimo para imprimir debes volver a su condicion ascii original, si no se imprimirá "basura"
char letra_imprimible = letra + 'A';
Realmente tiene que imprimir un patrón tan absurdo y tan largo originado tan desordenadamente, exactamente como en el ejemplo?? porque el problema no es la sintaxis del código, sino la abstracción de la lógica (el requerimiento o como debe funcionar el programa) lo que lo hace tan complicado.
digo si tuviera que imprimirse en escenarios separados como por ejemplo:
CitarDigite la letra: X
digite la cantidad de repeticiones: 5
X
YY
ZZZ
AAAA
BBBBB
AAAA
ZZZ
YY
X
CitarDigite la letra: X
digite la cantidad de repeticiones: 5
V
W
XX
YYY
ZZZZ
YYY
XX
W
V
CitarDigite la letra: X
digite la cantidad de repeticiones: 5
T
UU
VVV
UU
T
seria algo más comprensible, pero si hay que hacerlo con un patrón así de extenso y que haga esa serie de pasos, amigo, yo diria que te estan tomando el pelo, o que simplemente estas exagerando las cosas, clarificanos ese asunto.
No, no es tan difícil. Revisa otra vez el patrón. Tiene su lógica, y todo se saca con bucles anidados. Easy.
Cita de: MAFUS en 29 Septiembre 2016, 20:46 PM
No, no es tan difícil. Revisa otra vez el patrón. Tiene su lógica, y todo se saca con bucles anidados. Easy.
si es verdad, lo que me queda la duda es si realmente ese es el patrón que se necesita en cada impresión, o si son escenarios como lo estoy suponiendo. porque parece que cambia en casi un aleatorio de XYZABAZYX ---> VWXYZYXWV ---> TUVUT
se me hace demasiado dispar para realizar un control apropiado.
Tiene su lógica. Si te fijas a cada inicio del triángulo, o punta de flecha, como se quiera llamar, es una letra menos del grupo anterior.
Esta es la salida y ejecución del programa:
Del ejemplo:
Indica la letra por la que empezar: X
Indica el tamaño de la cadena más larga: 5
X
YY
ZZZ
AAAA
BBBBB
AAAA
ZZZ
YY
X
W
XX
YYY
ZZZZ
YYY
XX
W
V
WW
XXX
WW
V
U
VV
U
T
------------------
(program exited with code: 0)
Press return to continue
Otra configuración. Más extremo.
Indica la letra por la que empezar: A
Indica el tamaño de la cadena más larga: 10
A
BB
CCC
DDDD
EEEEE
FFFFFF
GGGGGGG
HHHHHHHH
IIIIIIIII
JJJJJJJJJJ
IIIIIIIII
HHHHHHHH
GGGGGGG
FFFFFF
EEEEE
DDDD
CCC
BB
A
Z
AA
BBB
CCCC
DDDDD
EEEEEE
FFFFFFF
GGGGGGGG
HHHHHHHHH
GGGGGGGG
FFFFFFF
EEEEEE
DDDDD
CCCC
BBB
AA
Z
Y
ZZ
AAA
BBBB
CCCCC
DDDDDD
EEEEEEE
FFFFFFFF
EEEEEEE
DDDDDD
CCCCC
BBBB
AAA
ZZ
Y
X
YY
ZZZ
AAAA
BBBBB
CCCCCC
DDDDDDD
CCCCCC
BBBBB
AAAA
ZZZ
YY
X
W
XX
YYY
ZZZZ
AAAAA
BBBBBB
AAAAA
ZZZZ
YYY
XX
W
V
WW
XXX
YYYY
ZZZZZ
YYYY
XXX
WW
V
U
VV
WWW
XXXX
WWW
VV
U
T
UU
VVV
UU
T
S
TT
S
R
------------------
(program exited with code: 0)
Press return to continue
ah capto, va retrocendiendo en el valor de la letra, y recomienza el ciclo, eso era lo que no entendia claro, buen punto señor.
Cuando llegue a mi casa le dare un intento por curiosidad.
---
EDITADO: vamos a probar, esta mucho más complicado de lo que parece, solo hice la escala porque realmente estar validando ciclo letra por letra requiere siempre más tiempo de lo que suponia, y ya es tarde, pero bueno aquí dejo una base, no es lo mejor de lo mejor, pero al menos podriamos darnos una idea:
#include <stdio.h>
#include <stdlib.h>
int main()
{
char letraInicial;
int tamanyo;
printf("Digite la letra inicial: ");
scanf("%c", &letraInicial);
printf("Tamaño de la cadena más larga: ");
scanf("%i", &tamanyo);
if(letraInicial >= 'A' && letraInicial <= 'Z')
{
printf("\n %c", letraInicial);
printf("\n %i \n\n", tamanyo);
}
else
{
printf("\n Letra no valida \n");
}
int contador = 0;
while(tamanyo>0){
printf("\n %c", letraInicial);
letraInicial++;
if(letraInicial == '[')
{
letraInicial = 'A';
}
contador++;
if(contador == tamanyo)
{
break;
}
}
letraInicial--;
while(tamanyo>0){
letraInicial--;
if(letraInicial == '@')
{
letraInicial = 'Z';
}
printf("\n %c", letraInicial);
tamanyo--;
if(tamanyo == 1)
{
break;
}
}
return 0;
}
(http://fotos.subefotos.com/ee41bb29489cb7d80e3662f2942e10d3o.png)