[Solucionado] Problema en codigo C++, no se ejecuta el else

Iniciado por Mario Olivera, 25 Julio 2014, 23:09 PM

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

daryo

CitarEs imposible que obtengas esa salida con el código que postee
cierto yo lo probe y funciona bien
buenas

leosansan

#11
Cita de: daryo en 26 Julio 2014, 18:16 PM
cierto yo lo probe y funciona bien

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

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





Blaster

Cita de: leosansan en 26 Julio 2014, 19:11 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

rir3760

Se deben evitar bucles como este:
Código (cpp) [Seleccionar]
for ( int i = 0, linea = 8; i < linea ; i++ ){
   for ( int j = 0, linea = 8; j < linea ; j++ )
      ( i % 2 != 0 && j == 0 ) ? ++linea, cout << ' ' : cout << '*' ;
   
   cout << endl ;
}

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 (cpp) [Seleccionar]
{
   int i = 0;
   int linea = 8;
   while (i < linea){
      int j = 0;
      int linea = 8;
      while (j < linea){
         ( i % 2 != 0 && j == 0 ) ? ++linea, cout << ' ' : cout << '*';
         
         j++;
      }
      cout << endl;
     
      i++;
   }
}


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 (cpp) [Seleccionar]
void imprime()
{
   linea = 8;
   
   for (int i = 0; i < linea; i++){
      if (i % 2)
         cout << ' ';
     
      for (int j = 0; j < linea; j++)
         cout << '*';
      cout << endl;
   }
}


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
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

Mario Olivera

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

leosansan

#15
Cita de: 718208 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

"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 (cpp) [Seleccionar]
void imprime() {
      int i = 0 , j = 0 , linea = 8;
      while ( i < linea ) {
        j = 0 ;
        while ( j < linea ){
          ( i % 2 != 0 && j == 0 ) ? cout << " *" : cout << '*' ;
          j++ ;
        }
        cout << endl ;
        i++ ;
      }
    }


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