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