Ejercicio iteraciones

Iniciado por i-node, 29 Abril 2016, 18:29 PM

0 Miembros y 2 Visitantes están viendo este tema.

i-node

Hola,

Estoy aprendiendo C++ y llevo toda la tarde devanandome los sesos, pensando cual es la forma mas elegante de realizar este ejercicio. Solo se me ha ocurrido esta, pero estoy seguro de que hay una forma menos guarra de hacerlo.

Solo se pueden utilizar estas tres instrucciones de salida:

cout << "*";
cout << " ";
cout << endl;

#include <iostream>

using std::cout;
using std::cin;

int main() {
       for(int linea = 1;linea <= 8;linea++) {
               if(linea % 2 != 0)
                       for(int i = 0; i <= 15; i++)
                               if(i % 2 == 0)
                                       cout << '*';
                               else
                                       cout << ' ';

               else
                       for(int i = 0; i <= 16; i++)
                               if(i % 2 == 0)
                                       cout << ' ';
                               else
                                       cout << '*';
               cout << "\n";
       } // Fin de bucle for
       return 0;
} // Fin de main


El resultado ha de ser exactamente igual al de este ejercicio.


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


Para que nos entendamos.. No me sirve esto:


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


Seguro que es culpa mia que no doy para mas, pero se tiene que poder hacer de una manera mas elegante que como lo he hecho yo seguro.

Muchas gracias!

HardForo

#1
Otra forma:


#include <stdio.h>      /* printf */

void print_n(char *c,int n) {  
int i;
for (i=0;i<n;i++)
  printf ("%s",c);
}

int main ()
{
int i;
for (i=0;i<8;i++){
if (i % 2) printf(" ");
print_n("* ",8);
printf("\n");
}

 return 0;
}


Obvio se pude reducir el numero de lineas de codigo y no faltará quien lo haga con un solo bucle hasta 64 y un mod
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

class_OpenGL

Otra forma bastante intuitiva es imprimir fila por fila, y cuando se imprima una columna, que sea columna por columna; en función de si la fila que se está imprimiendo es par o impar, pues una columna equivale a "* " o " *" respectivamente:

#include <stdio.h>

int main() {
register unsigned int row, col;
for(row = 0; row < 8; row++) {
for(col = 0; col < 8; col++) {
if(row%2 == 0)
printf("* ");
else
printf(" *");
}

printf("\n");
}

return 0;
}

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

geeke

#3
Usando puro C++

Código (cpp) [Seleccionar]

#include <iostream>
#using std::cout;
#using std::string;

int main()
{
    int n = 8;
    for(int i = 0; i < n; i++)
        cout << string(i % 2 ? 1 : 0, ' ') << string(n, '*') << "\n";
    return 0;
}

class_OpenGL

using no es una directiva de preprocesador, así que los '#' sin inválidos xD

Además, ese código no realiza la función que pide el enunciado. Lo que hace ese código es imprimir n asteriscos precedida de un espacio si el número de línea en la que se imprime es par, pero el enunciado dice que debe de haber un espacio entre cada asterisco.

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL

geeke

Jaja es verdad lo que provocan las prisas y el escribir desde el móvil, con respecto al enunciado no me había fijado en ése detalle cuando llegue a casa lo reviso

i-node

Chicos. Siento el fallo. El enunciado del problema dice que solo se pueden utilizar estas instrucciones de salida:

cout << "*";
cout << " ";
cout << endl;

Lo añado en el OP tambien.

HardForo

#7
Y no sabes la equivalencia entre cout() y printf() ?

Código (cpp) [Seleccionar]

#include <iostream>   
 
int main ()
{
int i,j;
for (i=0;i<8;i++){
if (i % 2) std::cout << " "; // printf(" ")
for (j=0;j<8;j++){
std::cout << "*"; std::cout << " "; // printf("* ")
}
std::cout << std::endl; // printf("\n")
}

  return 0;
}
HardForo:  foro de Hardware y programación

Se buscan Mods y colaboradores *

geeke

#8
Algo así tal vez:

Código (cpp) [Seleccionar]
#include <iostream>
#include <iterator>

int main()
{
   int n = 8;
   for(int i = 0; i < n; i++)
   {
       if(i % 2) std::cout << " ";
       std::fill_n(std::ostream_iterator < const char* >( std::cout ), n, "* ");
       std::cout << std::endl;
   }
   return 0;
}

class_OpenGL

Eso no es un poco romperse la cabeza cuando hay soluciones más simples?? XDD
No digo que esté mal, pero dudo que eso lo acepte un profesor que está enseñando a un alumno en su primer trimestre XDD

Programador aficionado. Me quiero centrar en programar videojuegos. La API que uso para crearlos es OpenGL