Programación General > C/C++

 Dibujar un rombo con asteriscos con Lenguaje C

<< < (2/3) > >>

leosansan:

--- Cita de: DanielC# en Viernes 25 de Abril de 2014, 19:25 ---Hola  chenech
Muchas gracias por la ayuda, un solo favor más te voy a pedir, tan sólo decime si lo que quiero hacer (con el código de dejo a continuación) es factible, practique de todas maneras con paréntesis, punto y coma y nada, con solo saber que se puede hacer voy a seguir leyendo y practicando hasta lograrlo.-
...............................
Daniel

--- Fin de la cita ---

No soy chenech pero te ayudo igual.

Antes que nada ten en cuenta el uso de los pre y post incrementos ya que te aligeran el código, así como la igualación de dos variables:


--- Código: C++ ---#include <stdio.h> int main(){  int i=0, izq=5, der=5;  char ate[] = "          ";  for(; i<10; i++){    if(i<5)      ate[izq--] = ate[der++] = '*';    else      ate[++izq] =  ate[--der] = ' ';  printf("\n %s", ate);  }  return 0;}
Y respecto al operador ternario no te preocupes, es normal que al principio no te salga sobre todo con la cantidad de variables que incrementabas y post incrementabas por separado:


--- Código: C++ ---#include <stdio.h> int main(){  int i=0, izq=5, der=5;  char ate[] = "          ";  for(; i<10; i++){    (i<5) ? (ate[izq--] = ate[der++] = '*'):(ate[++izq] = ate[--der] = ' ');  printf("\n %s", ate);  }  return 0;}

¡¡¡¡ Saluditos! ..... !!!!

DanielC#:
Hola  leosansan
Maravilloso tú código ya estaba por desistir, tengo unas duditas para consultarte/consultarles.-

Si declaro la variable de esta manera funciona.

--- Código: C ---char ate[] = "          ";Si la declaro de estas otras 2 no me imprime ningún asterisco.-

--- Código: C ---char ate[10] = "";
--- Código: C ---char ate[10] = {‘\0’};Me podrían dar alguna explicación.-

Otra cosita, según tengo entendido el signo igual tiene asociatividad por la derecha pero esto no lo entiendo.-

ate[izq--] = ate[der++] = '*';
 
Saludos.
Daniel

leosansan:

--- Cita de: DanielC# en Viernes 25 de Abril de 2014, 21:56 ---Hola  leosansan
Maravilloso tú código ya estaba por desistir, tengo unas duditas para consultarte/consultarles.-

Si declaro la variable de esta manera funciona.

--- Código: C ---char ate[] = "          ";Si la declaro de estas otras 2 no me imprime ningún asterisco.-

--- Código: C ---char ate[10] = "";
--- Código: C ---char ate[10] = {‘\0’};Me podrían dar alguna explicación.-
...............................

--- Fin de la cita ---

Estas llenando el array con nada, simplemente está vacío.

Tendrías que hacer algo como esto, y perdona que le halla cambiado el nombre al array:


--- Código: C++ ---#include <stdio.h> int main(){  int i, izq, der,n;  do{    printf("\nBase del rombo(numero impar positivo): \n");    scanf("%d", &n);    }while ( n <=0 || (n % 2) == 0);  izq = der =  --n/2;  char ch[n+1];  for(i=0; i<n; i++)    ch[i]=' ';  ch[i]='\0';  for(i=0; i<n; i++){    (i<n/2) ? (ch[izq--] = ch[der++] = '*'):(ch[++izq] = ch[--der] = ' ');  printf("\n %s", ch);  }  return 0;}

--- Cita de: DanielC# en Viernes 25 de Abril de 2014, 21:56 ---Hola  leosansan

.........................................................
Otra cosita, según tengo entendido el signo igual tiene asociatividad por la derecha pero esto no lo entiendo.-

ate[izq--] = ate[der++] = '*';
...............................

--- Fin de la cita ---

Te obsesiona la asociatividad pero en este caso no hay tal, simplemente hay una igualación de variables. :suerte:

¡¡¡¡ Saluditos! ..... !!!!


DanielC#:
Hola  leosansan
Muy bien entendí todo sólo que en mi compilador MinGW no me permite declarar las variables en cualquier lado, tiene que ser todas al principio de la función Main.-


--- Código: C ---.........  izq = der =  --n/2;  char ch[n+1];  for(i=0; i<n; i++)......... 
Saludos y gracias por tu tiempo.
Daniel

leosansan:

--- Cita de: DanielC# en Sábado 26 de Abril de 2014, 20:50 ---Hola  leosansan
Muy bien entendí todo sólo que en mi compilador MinGW no me permite declarar las variables en cualquier lado, tiene que ser todas al principio de la función Main.-
.............................................

--- Fin de la cita ---

Yo también uso MinGW y lo único que lanza, estando en modo -Wall y -pedantic, es un warning, que no un error, porque no se ajusta al estándar  C90 ya superado, así que tu problema se arreglará actualizando tu versión del MinGW o bien la del compilador que usas. Yo usualmente uso el Code::Blocks, por supuesto.

Por cierto, he visto que algo fallaba, creo, en el anterior código así que te lo paso revisado por si acaso:


--- Código: C++ ---#include <stdio.h> int main(){  int i, izq, der,n;  do{    printf("\nBase del rombo(numero impar positivo): \n");    scanf("%d", &n);    }while ( n <=0 || (n % 2) == 0);  izq = der =  --n/2;  char ch[n+1];  for(i=0; i<n; i++)    ch[i]=' ';  ch[i]='\0';  for(i=0; i<n; i++){    (i<n/2) ? (ch[izq--] = ch[der++] = '*'):(ch[++izq] = ch[--der] = ' ');  printf("\n %s", ch);  }  return 0;}
¡¡¡¡ Saluditos! ..... !!!!

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa