10/05/2016

Ejercicio 24

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;
    }
}