Hola gente, estoy teniendo un problema con un código, el tema es que tengo que dibujar
esto en el programa:
********
********
********
********
********
********
********
********
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
#include <iostream>
using std::cout;
using std::endl;
using std::cin;
class Tablero
{
public:
void imprime()
{
linea=0;
while (linea != 8) // itera 8 veces.
{
if (linea == 0 || linea ==2 || linea== 4 || linea ==6)
{
int dibujaLinea = 0;
while (dibujaLinea > 9)
{
cout <<"*";
++dibujaLinea;
}
}
else
{
cout <<" ";
int dibujaLinea= 0;
while (dibujaLinea < 8) // itera 7 veces
{
cout <<"*";
++dibujaLinea;
}
}
cout <<endl;
++linea;
}
}
private:
int linea;
};
int main()
{
Tablero Tablero1;
Tablero1.imprime();
cin.get();
return 0;
}
Desde ya agradezco cualquier ayuda :)
La condición del segundo while debe quedar así:
while (dibujaLinea < 9) // Aqui el <
Y el tercero así:
while (dibujaLinea < 9) // Aqui el 9
Saludos
Cita de: Blaster en 25 Julio 2014, 23:34 PM
La condición del segundo while debe quedar así:
while (dibujaLinea < 9) // Aqui el <
Y el tercero así:
while (dibujaLinea < 9) // Aqui el 9
Saludos
Muchas gracias por la ayuda Blaster! ;-)
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.
Cita de: 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.
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.
Yo siempre hago clases para todo. Pero no una clase por función xD
Cita de: 718208 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:
********
********
********
********
********
********
********
********
...................................................
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":
public:
void imprime() {
for ( int i = 0 ; i < linea ; i++ ){
for ( int j = 0 ; j < linea ; j++ )
( i % 2 != 0 && j == 0 ) ? cout << ' ' : cout << '*' ;
cout << endl ;
}
}
¡¡¡¡ Saluditos! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Con una pequeña modificación lo dibujaríamos tal como muestra el ejem:
void imprime()
{
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 ;
}
}
Saludos
Cita de: Blaster en 26 Julio 2014, 17:08 PM
Con una pequeña modificación lo dibujaríamos tal como muestra el ejem:
.............................
Salida a tu código:
********
********
*********
*********
**********
**********
***********
***********
************
************
*************
*************
**************
**************
***************
Y de paso rectifico el mío:
void imprime() {
for ( int i = 0 ; i < linea ; i++ ){
for ( int j = 0 ; j < linea ; j++ )
( i % 2 != 0 && j == 0 ) ? cout << " *" : cout << '*' ;
cout << endl ;
}
Con la salida deseada:
********
********
********
********
********
********
********
********
¡¡¡¡ Saluditos! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
Cita de: leosansan en 26 Julio 2014, 17:34 PM
Salida a tu código:
....................
Es imposible que obtengas esa salida con el código que postee
Cita de: leosansan en 26 Julio 2014, 17:34 PM
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:
********
*******
********
*******
********
*******
********
*******
CitarEs imposible que obtengas esa salida con el código que postee
cierto yo lo probe y funciona bien
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! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)
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
Se deben evitar bucles como este:
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:
{
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:
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
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
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:
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! ..... !!!!
(http://st.forocoches.com/foro/images/smilies/aaaaa.gif)