4/15/2017

Ejercicio 53

Dado un arreglo de n números enteros, haga un algoritmo que busque el par de elementos adyacentes que tiene el producto más grande y devuelva el resultado de ese producto.

Vector
Ejemplo

Para el arreglo = [3, 6, -2, -5, 7, 3], la salida debe ser:
elementosAdyacentesProducto() = 21. 7 y 3 producen el producto más grande.


#include <iostream>
// se incluye la clase Calcular para despues llamar a sus métodos
#include "Calcular.h"
// se incluye la libreria stdlib para utilizar los comandos de la consola, la utilizaremos para limpiar la consola 
#include "stdlib.h"

using namespace std;

// método para llenar el vector 
void llenar(Calcular *obj)
{
    // recorremos cada posicion del vector con el ciclo for 
    for (int i = 0; i < obj->getTamano(); i++)
    {
        cout << "Digite numero de la posicion " << i << endl;
        cout << ">> ";
        cin >> dato;
        // le asignamos el dato que se haya ingresado en la posicion i del vector 
        obj->setVector(i, dato);
    }
    // limpiamos pantalla 
    system("cls");
}

// método para mostrar el vector 
void mostrar(Calcular *obj)
{
    cout << "Vector: [";
    // recorremos el vector con el ciclo for 
    for (int i = 0; i < obj->getTamano(); i++)
    {
        // si llegamos a la ultimo posicion 
        if (i == obj->getTamano()-1)
        {
            // cerramos con el corchete 
            cout << obj->getVector(i) << "]" << endl;
        }
        else
        {
            // sino, entonces separamos cada valor con una , 
            cout << obj->getVector(i) << ", ";
        }
    }
}

int main(void)
{
    // se crea un objeto de la clase Calcular (Instanciación) 
    Calcular *obj = new Calcular();
    // se declaran dos variables de tipo entero 
    int tam;
    // pedimos el tamaño del vector (el valor 164 representa el caracter ñ en la tabla ascii) 
    cout << "Digite el tama" << (char) 164 << "o del vector" << endl;
    cout << ">> ";
    cin >> tam;
    // encapsulamos la variable tam 
    obj->setTamano(tam);
    // creamos el vector 
    obj->crearVector();
    // llenamos el vector 
    llenar(obj);
    // mostramos el vector 
    mostrar(obj);
    // mostramos el producto mayor del par de elementos adyacentes 
    cout << "El producto es: " << obj->elementosAdyacentesProducto() << endl;
}

#ifndef CALCULAR_H
#define CALCULAR_H
#include <iostream>

using namespace std;

class Calcular
{
    public:
        Calcular();
        virtual ~Calcular();
        // se declaran los métodos publicos 
        void setTamano(int val);
        int getTamano();
        void setVector(int pos, int val);
        int getVector(int pos);
        void crearVector();
        int elementosAdyacentesProducto();
    protected:

    private:
        // se declaran los atributos privados 
        int tamano;
        int *vector;
};

#endif // CALCULAR_H 

#include "Calcular.h"

Calcular::Calcular()
{
    // se le asignan valores por defecto a los atributos en el contructor 
    tamano = 0;
    vector = NULL;
}

Calcular::~Calcular()
{
    //dtor 
}

// metodos Setters y Getters de los atributos de la clase 
void Calcular::setTamano(int val)
{
    tamano = val;
}

int Calcular::getTamano()
{
    return tamano;
}

void Calcular::setVector(int pos, int val)
{
    vector[pos] = val;
}

int Calcular::getVector(int pos)
{
    return vector[pos];
}

// método para crear el vector 
void Calcular::crearVector()
{
    // le asignamos al vector de tipo entero un nuevo tamaño y sera el valor de la variable tamano 
    vector = new int[tamano];
}

// método para calcular el producto mayor de dos elementos adyacentes 
int Calcular::elementosAdyacentesProducto()
{
    // declaramos una variable de tipo entero llamada producto 
    int producto;
    // si el tamaño del vector es de 1 
    if (getTamano() == 1)
    {
        // entonces, el producto obviamente sera solo el valor que haya en la posicion 0 
        producto = getVector(0);
    }
    else
    {
        // sino, se le asigna a la variable producto el producto entre el valor de
        // la posicion 0 y el valor de la posicion 1 del vector 
        producto = getVector(0) * getVector(1);
        // recorremos el vector con el ciclo for 
        for (int i = 0; i < getTamano(); i++)
        {
            // si estamos en la ultima posicion (significa que no otro valor despues del vector
            // por lo que no podemos multiplicar el valor que hay en posicion final con el
            // siguiente valor de la posicion final porque no existe) 
            if (i == getTamano()-1)
            {
                // si el valor de ultima posicion es mayor al valor de la variable producto 
                if (getVector(i) > producto)
                {
                    // entonces, le asignamos a la variable producto el valor que hay en la ultima posicion del vector 
                    producto = getVector(i);
                }
            }
            else
            {
                // sino, si la multiplicacion del valor de la posicion i con el valor de la posicion i+1 (el que le sigue)
                // es mayor al valor de la variable producto 
                if (getVector(i) * getVector(i+1) > producto)
                {
                    // entonces le asignamos a la variable producto el valor de la posicion i por el valor de la posicion i+1 del vector 
                    producto = getVector(i) * getVector(i+1);
                }
            }
        }
    }
    // retornamos el valor del producto 
    return producto;
}

// 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
{
    // método para llenar el vector 
    public static void llenar(Calcular obj)
    {
        // recorremos cada posicion del vector con el ciclo for 
        for (int i = 0; i < obj.getTamaño(); i++)
        {
            // pedimos el numero 
            int dato = Integer.parseInt(JOptionPane.showInputDialog("Digite numero de la posicion " + i)); 
            // le asignamos el dato que se haya ingresado en la posicion i del vector 
            obj.setVector(i, dato);
        }
    }
    
    // método para mostrar el vector 
    public static void mostrar(Calcular obj)
    {
        String datos = "Vector: [";
        // recorremos el vector con el ciclo for 
        for (int i = 0; i < obj.getTamaño(); i++)
        {
            // si llegamos a la ultimo posicion 
            if (i == obj.getTamaño()-1)
            {
                // cerramos con el corchete 
                datos += obj.getVector(i) + "]";
            }
            else
            {
                // sino, entonces separamos cada valor con una , 
                datos += obj.getVector(i) + ", ";
            }
        }
    }
    
    public static void main(String[] args)
    {
        // se crea un objeto de la clase Calcular (Instanciación) 
        Calcular obj = new Calcular();
        // pedimos el tamaño del vector 
        int tam = Integer.parseInt(JOptionPane.showInputDialog("Digite el tamaño del vector:"));
        // encapsulamos la variable tam 
        obj.setTamaño(tam);
        // creamos el vector 
        obj.crearVector();
        // llenamos el vector 
        llenar(obj);
        // mostramos el vector 
        mostrar(obj);
        // mostramos el producto mayor del par de elementos adyacentes 
        JOptionPane.showMessageDialog(null, "El producto es: " + obj.elementosAdyacentesProducto());
    }
}

public class Calcular
{
    // se declaran los atributos privados de la clase 
    private int tamaño;
    private int [] vector;
    
    public Calcular()
    {
        // se le asignan valores por defecto a los atributos en el contructor 
        tamaño = 0;
        vector = null;
    }
    
    // metodos Setters y Getters de los atributos de la clase 
    public void setTamaño(int val)
    {
        tamaño = val;
    }
    
    public int getTamaño()
    {
        return tamaño;
    }
    
    public void setVector(int pos, int val)
    {
        vector[pos] = val;
    }
    
    public int getVector(int pos)
    {
        return vector[pos];
    }
    
    // método para crear el vector 
    public void crearVector()
    {
        // le asignamos al vector de tipo entero un nuevo tamaño y sera el valor de la variable tamaño 
        vector = new int[tamaño];
    }
    
    // método para calcular el producto mayor de dos elementos adyacentes 
    public int elementosAdyacentesProducto()
    {
        // declaramos una variable de tipo entero llamada producto 
        int producto;
        // si el tamaño del vector es de 1 
        if (getTamaño() == 1)
        {
            // entonces, el producto obviamente sera solo el valor que haya en la posicion 0 
            producto = getVector(0);
        }
        else
        {
            // sino, se le asigna a la variable producto el producto entre el valor de
            // la posicion 0 y el valor de la posicion 1 del vector 
            producto = getVector(0) * getVector(1);
            // recorremos el vector con el ciclo for 
            for (int i = 0; i < getTamaño(); i++)
            {
                // si estamos en la ultima posicion (significa que no otro valor despues del vector
                // por lo que no podemos multiplicar el valor que hay en posicion final con el
                // siguiente valor de la posicion final porque no existe) 
                if (i == getTamaño()-1)
                {
                    // si el valor de ultima posicion es mayor al valor de la variable producto 
                    if (getVector(i) > producto)
                    {
                        // entonces, le asignamos a la variable producto el valor que hay en la ultima posicion del vector 
                        producto = getVector(i);
                    }
                }
                else
                {
                    // sino, si la multiplicacion del valor de la posicion i con el valor de la posicion i+1 (el que le sigue)
                    // es mayor al valor de la variable producto 
                    if (getVector(i) * getVector(i+1) > producto)
                    {
                        // entonces le asignamos a la variable producto el valor de la posicion i por el valor de la posicion i+1 del vector 
                        producto = getVector(i) * getVector(i+1);
                    }
                }
            }
        }
        // retornamos el valor del producto 
        return producto;
    }
}