Foro de elhacker.net

Programación => Programación C/C++ => Mensaje iniciado por: Mario Olivera en 25 Julio 2014, 23:09 pm



Título: [Solucionado] Problema en codigo C++, no se ejecuta el else
Publicado por: Mario Olivera en 25 Julio 2014, 23:09 pm
Hola gente, estoy teniendo un problema con un código, el tema es que tengo que dibujar
esto en el programa:

Código:
********
 ********
********
 ********
********
 ********
********
 ********

Y nosé por qué no se ejecuta el else  para la línea que tiene un espacio (osea la 2da, 4ta,6ta,8va)

Y quiero hacerlo con while

Código
  1. #include <iostream>
  2. using std::cout;
  3. using std::endl;
  4. using std::cin;
  5.  
  6. class Tablero
  7. {
  8. public:
  9. void imprime()
  10. {
  11. linea=0;
  12. while (linea != 8) // itera 8 veces.
  13. {
  14. if (linea == 0 || linea ==2 || linea== 4 || linea ==6)
  15. {
  16. int dibujaLinea = 0;
  17. while (dibujaLinea > 9)
  18. {
  19. cout <<"*";
  20. ++dibujaLinea;
  21. }
  22.  
  23. }
  24. else
  25. {
  26. cout <<" ";
  27. int dibujaLinea= 0;
  28.  
  29. while (dibujaLinea < 8) // itera 7 veces
  30. {
  31. cout <<"*";
  32. ++dibujaLinea;
  33. }
  34.  
  35. }
  36. cout <<endl;
  37. ++linea;
  38.    }
  39. }
  40.  
  41. private:
  42. int linea;
  43. };
  44.  
  45.  
  46. int main()
  47. {
  48. Tablero Tablero1;
  49. Tablero1.imprime();
  50. cin.get();
  51. return 0;
  52. }

Desde ya agradezco cualquier ayuda   :)


Título: Re: Problema en codigo C++, no se ejecuta el else
Publicado por: Blaster en 25 Julio 2014, 23:34 pm
La condición del segundo while debe quedar así:

Código
  1. while (dibujaLinea < 9) // Aqui el <

Y el tercero así:

Código
  1. while (dibujaLinea < 9) // Aqui el 9

Saludos


Título: Re: Problema en codigo C++, no se ejecuta el else
Publicado por: Mario Olivera en 25 Julio 2014, 23:41 pm
La condición del segundo while debe quedar así:

Código
  1. while (dibujaLinea < 9) // Aqui el <

Y el tercero así:

Código
  1. while (dibujaLinea < 9) // Aqui el 9

Saludos

Muchas gracias por la ayuda Blaster!  ;-)


Título: Re: [Solucionado] Problema en codigo C++, no se ejecuta el else
Publicado por: ivancea96 en 26 Julio 2014, 00:02 am
Perdona una cosa 718208. El caso es que en todos los códigos que te veo publicar, usas clases, cuando lo más acertados ería una función. En caso de que solo muestres una parte del código, pues vale. Pero si ese es todo el código, recuerda que tus clases consumen memoria, y al final acaban haciendo lo mismo que una función.


Título: Re: [Solucionado] Problema en codigo C++, no se ejecuta el else
Publicado por: eferion en 26 Julio 2014, 01:08 am
Perdona una cosa 718208. El caso es que en todos los códigos que te veo publicar, usas clases, cuando lo más acertados ería una función. En caso de que solo muestres una parte del código, pues vale. Pero si ese es todo el código, recuerda que tus clases consumen memoria, y al final acaban haciendo lo mismo que una función.

Consumen memoria... esa clase consume el equivalente a un int... 4 bytes ... tampoco hay que dramatizar jejejeje

Yo es que soy partidario de poner todo en clases... permite organizar el código mejor... lo que sucede es que funciones como estas pueden perfectamente ser estáticas, no hace falta crear una instancia de la clase para manejarlas.


Título: Re: [Solucionado] Problema en codigo C++, no se ejecuta el else
Publicado por: ivancea96 en 26 Julio 2014, 01:13 am
Yo siempre hago clases para todo. Pero no una clase por función xD


Título: Re: [Solucionado] Problema en codigo C++, no se ejecuta el else
Publicado por: leosansan en 26 Julio 2014, 06:59 am
Hola gente, estoy teniendo un problema con un código, el tema es que tengo que dibujar
esto en el programa:

Código:
********
 ********
********
 ********
********
 ********
********
 ********
...................................................
Desde ya agradezco cualquier ayuda   :)

Creo que "desparramas" el código, en buena parte por el uso de los while.

Un poco más "cortito":

Código
  1. public:
  2.    void imprime() {
  3.      for ( int i = 0 ; i < linea ; i++ ){
  4.        for ( int j = 0 ; j < linea ; j++ )
  5.        ( i % 2 != 0 && j == 0 ) ? cout << ' ' : cout << '*' ;
  6.      cout << endl ;
  7.    }
  8.  }

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


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)




Título: Re: [Solucionado] Problema en codigo C++, no se ejecuta el else
Publicado por: Blaster en 26 Julio 2014, 17:08 pm
Con una pequeña modificación lo dibujaríamos tal como muestra el ejem:

Código
  1. void imprime()
  2. {
  3.    for ( int i = 0, linea = 8; i < linea ; i++ )
  4.    {
  5.         for ( int j = 0, linea = 8; j < linea ; j++ )
  6.             ( i % 2 != 0 && j == 0 ) ? ++linea, cout << ' ' : cout << '*' ;
  7.         cout << endl ;
  8.     }
  9. }
Saludos


Título: Re: [Solucionado] Problema en codigo C++, no se ejecuta el else
Publicado por: leosansan en 26 Julio 2014, 17:34 pm
Con una pequeña modificación lo dibujaríamos tal como muestra el ejem:
.............................

Salida a tu código:

Código
  1. ********
  2. ********
  3. *********
  4. *********
  5. **********
  6. **********
  7. ***********
  8. ***********
  9. ************
  10. ************
  11. *************
  12. *************
  13. **************
  14. **************
  15. ***************

Y de paso rectifico el mío:

Código
  1. void imprime() {
  2.      for ( int i = 0 ; i < linea ; i++ ){
  3.        for ( int j = 0 ; j < linea ; j++ )
  4.        ( i % 2 != 0 && j == 0 ) ? cout << " *" : cout << '*' ;
  5.      cout << endl ;
  6.    }

Con la salida deseada:

Código
  1. ********
  2. ********
  3. ********
  4. ********
  5. ********
  6. ********
  7. ********
  8. ********

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


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)


Título: Re: [Solucionado] Problema en codigo C++, no se ejecuta el else
Publicado por: Blaster en 26 Julio 2014, 17:56 pm
Salida a tu código:
....................

Es imposible que obtengas esa salida con el código que postee

Y de paso rectifico el mío:

Con la modificación que le hiciste al actual obvio obtendrás la salida esperada, antes lo dibujaba de esta forma:

Salida anterior:

********
  *******
********
  *******
********
  *******
********
  *******
  


Título: Re: [Solucionado] Problema en codigo C++, no se ejecuta el else
Publicado por: daryo en 26 Julio 2014, 18:16 pm
Citar
Es imposible que obtengas esa salida con el código que postee
cierto yo lo probe y funciona bien


Título: Re: [Solucionado] Problema en codigo C++, no se ejecuta el else
Publicado por: leosansan en 26 Julio 2014, 19:11 pm
cierto yo lo probe y funciona bien

Sorry, Blaster no modifique bien. La salida es la correcta.  :-X

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


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)




Título: Re: [Solucionado] Problema en codigo C++, no se ejecuta el else
Publicado por: Blaster en 26 Julio 2014, 19:27 pm
Sorry, Blaster no modifique bien. La salida es la correcta.

Tranquilo leosansan no pasa nada  ;) ya me lo suponía, pero de igual manera me complique demasiado para hacer algo tan simple.

Saludos


Título: Re: [Solucionado] Problema en codigo C++, no se ejecuta el else
Publicado por: rir3760 en 27 Julio 2014, 18:46 pm
Se deben evitar bucles como este:
Código
  1. for ( int i = 0, linea = 8; i < linea ; i++ ){
  2.   for ( int j = 0, linea = 8; j < linea ; j++ )
  3.      ( i % 2 != 0 && j == 0 ) ? ++linea, cout << ' ' : cout << '*' ;
  4.  
  5.   cout << endl ;
  6. }
Ya que abren la puerta a errores lógicos al tener tres variables con el mismo nombre "linea" pero con ámbito distinto.

Para explicarlo mejor el bucle es (en concepto) equivalente a:
Código
  1. {
  2.   int i = 0;
  3.   int linea = 8;
  4.   while (i < linea){
  5.      int j = 0;
  6.      int linea = 8;
  7.      while (j < linea){
  8.         ( i % 2 != 0 && j == 0 ) ? ++linea, cout << ' ' : cout << '*';
  9.  
  10.         j++;
  11.      }
  12.      cout << endl;
  13.  
  14.      i++;
  15.   }
  16. }

Ya que la intención es imprimir un espacio antes de las lineas pares se puede sacar la comprobación del bucle externo colocandola en el interno:
Código
  1. void imprime()
  2. {
  3.   linea = 8;
  4.  
  5.   for (int i = 0; i < linea; i++){
  6.      if (i % 2)
  7.         cout << ' ';
  8.  
  9.      for (int j = 0; j < linea; j++)
  10.         cout << '*';
  11.      cout << endl;
  12.   }
  13. }

Ya por ultimo el valor del campo "linea" debería definirse en otra función y utilizando la clase string se puede eliminar el bucle interno (en su lugar se crea previamente una cadena compuesta por asteriscos).

Todos esto espero se tome como una critica constructiva.

Un saludo


Título: Re: [Solucionado] Problema en codigo C++, no se ejecuta el else
Publicado por: Mario Olivera en 30 Julio 2014, 07:01 am
Sinceramente estoy haciendo siempre en mis códigos clases por una manera de recordar las cosas, osea, en el capitulo donde estoy se separa la interfaz de la implementación y se hacen clases, es por esta razon que lo hago... con respecto a usar for no lo hago porque eso sigue en el capitulo que viene, muchas gracias por los consejos a todos saludos  ;D


Título: Re: [Solucionado] Problema en codigo C++, no se ejecuta el else
Publicado por: leosansan en 30 Julio 2014, 15:03 pm
Sinceramente estoy haciendo siempre en mis códigos clases por una manera de recordar las cosas, osea, en el capitulo donde estoy se separa la interfaz de la implementación y se hacen clases, es por esta razon que lo hago... con respecto a usar for no lo hago porque eso sigue en el capitulo que viene, muchas gracias por los consejos a todos saludos  ;D

"Raro, raro". Está bien lo de ir practicando Clases pero no haber visto previamente cosas tan primaria como los for, else y compañía es cuanto menos "rarito". Pero en fin, de todo hay en la viña del Señor.  ;)

No obstante puedes conseguir el mismo objetivo con while tal como te indicó rir3760:

Código
  1. void imprime() {
  2.      int i = 0 , j = 0 , linea = 8;
  3.      while ( i < linea ) {
  4.        j = 0 ;
  5.        while ( j < linea ){
  6.          ( i % 2 != 0 && j == 0 ) ? cout << " *" : cout << '*' ;
  7.          j++ ;
  8.        }
  9.        cout << endl ;
  10.        i++ ;
  11.      }
  12.    }

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


(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)