En el final del mundo 1-1 de Super Mario Bros en Nintendo, Mario debe subir a una "media piramide" de bloques el cual debe saltar (si quiere maximizar su puntuación) hasta alcanzar la bandera. A continuación se muestra una captura de pantalla:
Haga un algoritmo que recree esta "media piramide" utilizando ciclos solamente, los bloques de la "media piramide" pueden estar representados por un "#". Para hacer las cosas más interesantes el usuario debe decir que altura tendrá la "media piramide", se debe tener en cuenta que la altura no puede ser un entero negativo y no debe sobrepasar una altura de 23, véase también que en la imagen anterior la "media piramide" tiene una altura de 8.
#include <iostream>
// se incluye la clase Recrear para despues llamar a sus metodos
#include "Recrear.h"
using namespace std;
int main()
{
// se crea un objeto de la clase Calcular (Instanciaciación)
Recrear *obj = new Recrear();
// se define una variable de tipo entero llamada "alt"
int alt;
// con el ciclo do-while pediremos la altura
do
{
cout << "Altura: ";// se pide la altura
cin >> alt;// se guarda la altura en la variable "alt"
obj->setAltura(alt);// se llama al metodo setAltura para encapsular a la variable "alt"
}
while(alt < 0 || alt > 23);// el ciclo repetira esas instrucciones si la "alt" es menor a 0 o mayor a 23.
cout << obj->recrearPiramide() << endl;// mostramos la media piramide
return 0;
}
#ifndef RECREAR_H
#define RECREAR_H
#include <iostream>
using namespace std;
class Recrear
{
public:
Recrear();
virtual ~Recrear();
// se definen los metodos publicos:
string recrearPiramide();// recrearPiramide de tipo string, sera quien dibujara la "media piramide"
// se definen los metodos Setters y Getters del atributo "altura" y "bloque"
void setAltura(int n);
int getAltura();
protected:
private:
// se define un atributo privado:
int altura;// altura de tipo entero, sera la altura que digite el usuario
};
#endif // RECREAR_H
#include "Recrear.h"
#include <iostream>
using namespace std;
Recrear::Recrear()
{
// se le asignan los siguientes valores por defecto en el constructor de la clase
altura = 0;// 0 a la variable "altura"
}
Recrear::~Recrear()
{
//dtor
}
// implemetacion del metodo para recrear la "media piramide"
string Recrear::recrearPiramide()
{
string bloque = "";
// recorremos con un ciclo for desde 0 hasta la altura que el usuario digito
for(int i = 0; i < altura; i++)
{
// se recorre con un ciclo for hasta que j sea menor que la altura del usuario menos el valor de i menos 1
for(int j = 0; j < altura-i-1; j++)
{
// se acumulara con un espacio en blanco la variable "bloque"
bloque = bloque + " ";
// se acumulan con espacios para alinear la "media piramide" hacia la derecha...
}
// se recorre con un ciclo for hasta k sea menor (que el valor de i mas 2)
for(int k = 0; k < i+2; k++)
{
// se acumulara con un "#" (bloque) la variable "bloque"
bloque = bloque + "#";
}
// despues de recorrer los dos ciclos:
bloque = bloque + "\n";// se dara un salto de linea... en la variable bloque
}
return bloque;
}
// implementacion del metodos Setters y Getters del atributo altura
void Recrear::setAltura(int n)
{
altura = n;
}
// se importa paquete "JOptionPane" para dibujar un cuadro de dialogo en pantalla
// que muestre información o para llenar información.
import javax.swing.JOptionPane;
public class Main
{
public static void main(String[] args)
{
// se crea un objeto de la clase Recrear (Instanciaciación)
Recrear obj = new Recrear();
// se define una variable de tipo entero llamada "alt"
int alt;
// con el ciclo do-while pediremos la altura
do
{
// se pide la altura y se guarda en "alt"
alt = Integer.parseInt(JOptionPane.showInputDialog("Altura:"));
obj.setAltura(alt);// se llama al metodo setAltura para encapsular a la variable "alt"
}
while(alt < 0 || alt > 23);// el ciclo repetira esas instrucciones si la "alt" es menor a 0 o mayor a 23.
System.out.println(obj.recrearPiramide());// mostraramos la "media piramide".
}
}
public class Recrear
{
// se define un atributo privado:
private int altura;// altura de tipo entero, sera la altura que digite el usuario
public Recrear()
{
// se le asignan los siguientes valores por defecto en el constructor de la clase
altura = 0;// 0 a la variable "altura"
}
// implemetacion del metodo para recrear la "media piramide"
public String recrearPiramide()
{
String bloque = "";
// recorremos con un ciclo for desde 0 hasta la altura que el usuario digito
for(int i = 0; i < altura; i++)
{
// se recorre con un ciclo for hasta que j sea menor que la altura del usuario menos el valor de i menos 1
for(int j = 0; j < altura-i-1; j++)
{
// se acumulara con un espacio en blanco la variable "bloque"
bloque = bloque + " ";
// se acumulan con espacios para alinear la "media piramide" hacia la derecha...
}
// se recorre con un ciclo for hasta k sea menor (que el valor de i mas 2)
for(int k = 0; k < i+2; k++)
{
// se acumulara con un "#" (bloque) la variable "bloque"
bloque = bloque + "#";
}
// despues de recorrer los dos ciclos:
bloque = bloque + "\n";// se dara un salto de linea... en la variable bloque
}
return bloque;
}
// implementacion del metodos Setters y Getters del atributo altura
public void setAltura(int n)
{
altura = n;
}
public int getAltura()
{
return altura;
}
}