10/04/2016

Ejercicio 22

Dado un vector de 12 elementos enteros. Haga un algoritmo que muestre dos vectores: uno para mostrar los números positivos y el ultimo para mostrar los números negativos.


#include <iostream>
// se incluye la clase Calcular para despues llamar a sus metodos 
#include "Calcular.h"

using namespace std;

// implementacion del metodo para mostrar los numeros positivos 
void mostrarPositivos(Calcular* obj)
{
    cout << "DATOS POSITIVOS:" << endl;
    // recorremos con el ciclo for hasta el tamaño del vector que contiene los numeros positivos 
    for(int i = 0; i < obj->getTamPos(); i++)
    {
        cout << obj->getPositivos(i) << " ";// mostramos en pantalla los valores positivos del vector 
    }
    cout << endl;// saltamos una linea para que no quede todo en una sola linea... 
}

// implementacion del metodo para mostrar los numeros negativos 
void mostrarNegativos(Calcular* obj)
{
    cout << "DATOS NEGATIVOS:" << endl;
    // recorremos con el ciclo for hasta el tamaño del vector que contiene los numeros negativos 
    for(int i = 0; i < obj->getTamNeg(); i++)
    {
        cout << obj->getNegativos(i) << " ";// mostramos en pantalla los valores negativos del vector 
    }
}

int main(void)
{
    // se crea un objeto de la clase Calcular (Instanciaciación) 
    Calcular *obj = new Calcular();
    int n;// se define una variable de tipo n llamada "n" 
    for(int i = 0; i < 12; i++)// con el ciclo for pediremos 12 veces los datos 
    {
        // pedimos el numero de la posicion "i" 
        cout << "Digite numero de la posicion " << i << endl;
        cin >> n;// guardamos el numero en "n" 
        obj->setNum(i, n);// encapsulamos la variable "n" 
    }
    obj->contar();// llamamos al metodo contar() 
    obj->clasificar();// llamamos al metodo clasificar() 

    mostrarPositivos(obj);// llamamos al metodo mostrarPositivos() y le pasamos un objeto de la clase Calcular (obj) 
    mostrarNegativos(obj);// llamamos al metodo mostrarNegativos() y le pasamos un objeto de la clase Calcular (obj) 
}
     

#ifndef CALCULAR_H
#define CALCULAR_H


class Calcular
{
    public:
        Calcular();
        virtual ~Calcular();

        // se definen los metodos publicos: 
        // metodo contar(), sera el que cuente el tamaño de los vectores: "positivos" y "negativos" 
        void contar();
        // metodo para clasificar los numeros negativos y positivos 
        void clasificar();
        // metodos Setters y Getters de la clase... 
        void setNum(int pos, int val);
        int getNum(int pos);
        void setPositivos(int pos, int val);
        int getPositivos(int pos);
        void setNegativos(int pos, int val);
        int getNegativos(int pos);
        void setTamPos(int n);
        int getTamPos();
        void setTamNeg(int n);
        int getTamNeg();

    protected:

    private:// se definen 5 atributos y 1 metodo privados: 
        // crearVectores() y necesitara de dos parametros: "pos" para el tamaño del vector
        // "positivos" y "neg" para el de "negativos" 
        void crearVectores(int pos, int neg);
        int *num;// 1 vector de tipo entero llamado "num" con 12 posiciones 
        int *positivos;// 1 vector de tipo entero llamado "positivos" 
        int *negativos;// 1 vector de tipo entero llamado "negativos" 
        int pos;// una variable de tipo entero llamada "pos" 
        int neg;// una variable de tipo entero llamada "neg" 
};

#endif // CALCULAR_H 
     

#include "Calcular.h"

// implementacion del constructor de la clase Calcular 
Calcular::Calcular()
{
    // se le asignan por defecto los siguiente valores: 
    num = new int [12];// a "num" se le asigna un tamaño de 12 posiciones 
    pos = 0;// a pos se le asigna 0 
    neg = 0;// a neg se le asigna 0 
}

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

// implementacion del metodo para crear los vectores "positivos" y "negativos" 
void Calcular::crearVectores(int pos, int neg)
{
    // al vector "positivos" le asignamos el tamaño que haya en la variable "pos" 
    positivos = new int [pos];
    // al vector "negativos" le asignamos el tamaño que haya en la variable "neg" 
    negativos = new int [neg];
}

// implementacion del metodo para contar el tamaño de los vectores: "positivos" y "negativos" 
void Calcular::contar()
{
    // se recorre el vector "num" 
    for(int i = 0; i < 12; i++)
    {
        // si el valor en la posicion "i" del vector "num" es menor que 0, entonces: 
        if(num[i] < 0)
        {
            // la variable neg incrementa 
            neg++;
        }
        else// sino 
        {
            // la variable pos incrementa 
            pos++;
        }
    }
    // se llama al metodo crearVectores() y le asignamos los parametros "pos" y "neg" que seran los
    // tamaños de los vectores "positivos" y "negativos" 
    crearVectores(pos, neg);
    // se llama el metodo setTamPos() y le asignamos pos, sera el tamaño que hay en el vector "positivos" 
    setTamPos(pos);
    // se llama el metodo setTamNeg() y le asignamos pos, sera el tamaño que hay en el vector "negativos" 
    setTamNeg(neg);
}

// implementacion del  metodo para clasificar los numeros negativos y positivos en sus respectivos vectores 
void Calcular::clasificar()
{
    // se definen las variable aux1 y aux2 
    int aux1, aux2;
    // le asignamos a aux1 y aux2 el valor de 0 
    aux1 = 0;
    aux2 = 0;

    // recorremos el vector "num" con el ciclo for 
    for(int i = 0; i < 12; i++)
    {
        // si el valor en la posicion "i" del vector "num" es menor que 0, entonces: 
        if(num[i] < 0)
        {
            // en la posicion aux1 del vector "negativos" se le asigna el valor que hay en la
            // posicion "i" del vector "num" 
            negativos[aux1] = num[i];
            // se incrementa aux1 
            aux1++;
        }
        else// sino 
        {
            // en la posicion aux2 del vector "positivos" se le asigna el valor que hay en la
            //posicion "i" del vector "num" 
            positivos[aux2] = num[i];
            // se incrementa aux2 
            aux2++;
        }
    }
}

// implementacion de los metodos Setters y Getters de los atributos de la clase 
void Calcular::setNum(int pos, int val)
{
    num[pos] = val;
}

int Calcular::getNum(int pos)
{
    return num[pos];
}

void Calcular::setPositivos(int pos, int val)
{
    positivos[pos] = val;
}

int Calcular::getPositivos(int pos)
{
    return positivos[pos];
}

void Calcular::setNegativos(int pos, int val)
{
    negativos[pos] = val;
}

int Calcular::getNegativos(int pos)
{
    return negativos[pos];
}

void Calcular::setTamPos(int n)
{
    pos = n;
}

int Calcular::getTamPos()
{
    return pos;
}

void Calcular::setTamNeg(int n)
{
    neg = n;
}

int Calcular::getTamNeg()
{
    return neg;
}
     

// 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 Calcular (Instanciaciación) 
        Calcular obj = new Calcular();
        int n;// se define una variable de tipo n llamada "n" 
        for(int i = 0; i < 12; i++)// con el ciclo for pediremos 12 veces los datos 
        {
            // guardamos los datos en la variable "n" y los convertimos a enteros con el metodo parseInt() 
            n = Integer.parseInt(JOptionPane.showInputDialog(null, "Digite numero de la posicion " + i));
            obj.setNum(i, n);// encapsulamos la variable "n" 
        }
        obj.contar();// llamamos al metodo contar() 
        obj.clasificar();//llamamos al metodo clasificar() 
        mostrarPositivos(obj);// llamamos al metodo mostrarPositivos() y le pasamos un objeto de la clase Calcular (obj) 
        mostrarNegativos(obj);// llamamos al metodo mostrarNegativos() y le pasamos un objeto de la clase Calcular (obj) 
    }
    
    // implementacion del metodo para mostrar los numeros positivos 
    public static void mostrarPositivos(Calcular obj)
    {
        // se definen la variable datosVector de tipo string y se le asigna " " 
        String datosVector = "";
        
        // recorremos con el ciclo for hasta el tamaño del vector que contiene los numeros positivos 
        for(int i = 0; i < obj.getTamPos(); i++)
        {
            // acumularemos la variable datosVector con los datos que haya en getPositivos(i) 
            datosVector = datosVector + String.valueOf(obj.getPositivos(i) + " ");
        }
        // se muestra el valor acumulado en datosVector en un mensaje de dialogo 
        JOptionPane.showMessageDialog(null, "DATOS POSITIVOS:\n" + datosVector);
    }
    
    // implementacion del metodo para mostrar los numeros negativos 
    public static void mostrarNegativos(Calcular obj)
    {
        // se definen la variable datosVector de tipo string y se le asigna " " 
        String datosVector = "";
        
        // recorremos con el ciclo for hasta el tamaño del vector que contiene los numeros negativos 
        for(int i = 0; i < obj.getTamNeg(); i++)
        {
            // acumularemos la variable datosVector con los datos que haya en getNegativos(i) 
            datosVector = datosVector + String.valueOf(obj.getNegativos(i) + " ");
        }
        // se muestra el valor acumulado en datosVector en un mensaje de dialogo 
        JOptionPane.showMessageDialog(null, "DATOS NEGATIVOS:\n" + datosVector);
    }
}
     

public class Calcular
{
    // se definen los atributos privados:
    private int[] num;// 1 vector de tipo entero llamado "num"
    private int[] positivos;// 1 vector de tipo entero llamado "positivos"
    private int[] negativos;// 1 vector de tipo entero llamado "negativos"
    private int pos;// una variable de tipo entero llamada "pos"
    private int neg;// una variable de tipo entero llamada "neg"
    
    // implementacion del constructor de la clase Calcular
    public Calcular()
    {
        // se le asignan por defecto los siguiente valores:
        num = new int [12];// a "num" se le asigna un tamaño de 12 posiciones
        pos = 0;// a pos se le asigna 0
        neg = 0;// a neg se le asigna 0
    }
    
    // implementacion del metodo privado para crear los vectores para los positivos y negativos
    private void crearVectores(int pos, int neg)
    {
        // al vector "positivos" le asignamos el tamaño que haya en la variable "pos"
        positivos = new int [pos];
        // al vector "negativos" le asignamos el tamaño que haya en la variable "neg"
        negativos = new int [neg];
    }
    
    // implementacion del metodo para contar el tamaño de los vectores: "positivos" y "negativos"
    public void contar()
    {
        // se recorre el vector "num"
        for(int i = 0; i < 12; i++)
        {
            // si el valor en la posicion "i" del vector "num" es menor que 0, entonces:
            if(num[i] < 0)
            {
                // la variable neg incrementa
                neg++;
            }
            else // sino
            {
                // la variable pos incrementa
                pos++;
            }
        }
        // se llama al metodo crearVectores() y le asignamos los parametros "pos" y "neg" que seran los
        // tamaños de los vectores "positivos" y "negativos"
        crearVectores(pos, neg);
        
        // se llama el metodo setTamPos() y le asignamos pos, sera el tamaño que hay en el vector "positivos"
        setTamPos(pos);
        
        // se llama el metodo setTamNeg() y le asignamos pos, sera el tamaño que hay en el vector "negativos"
        setTamNeg(neg);
    }
    
    // implementacion del  metodo para clasificar los numeros negativos y positivos en sus respectivos vectores
    public void clasificar()
    {
        // se definen las variable aux1 y aux2
        int aux1, aux2;
        // le asignamos a aux1 y aux2 el valor de 0
        aux1 = 0;
        aux2 = 0;
        
        // recorremos el vector "num" con el ciclo for
        for(int i = 0; i < 12; i++)
        {
            // si el valor en la posicion "i" del vector "num" es menor que 0, entonces:
            if(num[i] < 0)
            {
                // en la posicion aux1 del vector "negativos" se le asigna el valor que hay en la
                // posicion "i" del vector "num"
                negativos[aux1] = num[i];
                // se incrementa aux1
                aux1++;
            }
            else // sino
            {
                // en la posicion aux2 del vector "positivos" se le asigna el valor que hay en la
                // posicion "i" del vector "num"
                positivos[aux2] = num[i];
                // se incrementa aux2
                aux2++;
            }
        }
    }
    
    // implementacion de los metodos Setters y Getters de los atributos de la clase
    public void setNum(int pos, int val)
    {
        num[pos] = val;
    }
    
    public int getNum(int pos)
    {
        return num[pos];
    }
    
    public void setPositivos(int pos, int val)
    {
        positivos[pos] = val;
    }
    
    public int getPositivos(int pos)
    {
        return positivos[pos];
    }
    
    public void setNegativos(int pos, int val)
    {
        negativos[pos] = val;
    }
    
    public int getNegativos(int pos)
    {
        return negativos[pos];
    }
    
    public void setTamPos(int n)
    {
        pos = n;
    }
    
    public int getTamPos()
    {
        return pos;
    }
    
    public void setTamNeg(int n)
    {
        neg = n;
    }
    
    public int getTamNeg()
    {
        return neg;
    }
}