Version:0.9 StartHTML:0000000105 EndHTML:0000010354 StartFragment:0000000152 EndFragment:0000010320
/******************************************************/
/*************** Isidro Pastor Jorda ******************/
/******************************************************/
/****************** Telematica ************************/
/******************************************************/
/************* Practica 6 Ejercicio 2 *****************/
/******************************************************/

#include <iostream.h>
#include <stdlib.h>

/* Definicion de constantes y tipos */

const int MAX = 201;
typedef int Vector[MAX];

/* Prototipos de las funciones */

void InicializaV (Vector v, int reset); // Funcion para inicializar v al valor reset
void GrabarVector(Vector v);
void SumarV(Vector v1, Vector v2, Vector vaux);
void MostrarV (Vector v);

/* PROGRAMA PRINCIPAL */

int main()
{

    Vector v1, v2, vsuma;
    InicializaV(v1, 0);
    InicializaV(v2, 0);
    InicializaV(vsuma, 0);

    cout << " Programa para sumar dos numeros enteros positivos grandes \n ";
    cout << endl << " Introduce el primer entero -> " ;
    GrabarVector(v1);
    cout << endl << " Introduce el segundo entero -> " ;
    GrabarVector(v2);



    SumarV(v1, v2, vsuma);

    cout << " La suma de los dos numeros es -> ";
    MostrarV(vsuma);
    cout << endl << endl;


    system("PAUSE");
    return 0;
}

/* COMIENZO DE LA IMPLEMENTACION DE LAS FUNCIONES UTILIZADAS */


/******************************************************************
* Funcion: GrabarVector
* Descripcion: Funcion que graba los datos introducidos en el vector
*              y los ordena al final del vector
*
*  Parametros:
*
* Nombre      E/S       Descripcion
* ------     -----      -----------
*   v         E/S        Vector de entrada para modificarlo
*
*
* Valor devuelto:
*       La funcion solo devuelve el vector modificado. void
*******************************************************************/

void GrabarVector(Vector v)
{

    int i,j, pos, aux;

    i = 0; // inicializamos el indice i a la primera posicion de nuestro vector
    j = MAX-1; // El ultimo punto de nuestro vector es este
    do
    {
        aux = int (cin.get() - 48);  // cin.get lee caracteres le restamos 48 para que devuelva el numero real
        v[i] = aux;
        i++;
    }
    while ( aux != -38 ); // el -38 es el numero que resulta de quitar 48 al int de \n

    pos = i-2; // La ultima cifra de nuestro numero ocupa la posicion i-1
    v[i-1] = 0;

    while ( pos >= 0)
    {
        v[j] = v[pos]; // Vamos copiando desde pos empezando por el final del vector
        v[pos] = 0;
        pos--;
        j--;
    }



return;
}


/******************************************************************
* Funcion: InicializaV
* Descripcion: Funcion que inicializa el vector a un valor dado
*    Introducimos el valor de reset en todas las posiciones del vector
*
*  Parametros:
*
* Nombre      E/S       Descripcion
* ------     -----      -----------
*   v         E/S
* reset       E         Valor al que inicializaremos el vector
*
* Valor devuelto:
*     Funcion void, no devuelve ningun valor
*******************************************************************/

void InicializaV (Vector v, int reset)
{
    for (int i=0; i<MAX; i++)
        v[i] = reset;
    return;
}


/******************************************************************
* Funcion: SumarV
* Descripcion: Funcion que suma dos vectores de entrada y devuelve la
*              suma en un vector tambien pasado a la entrada
*
*  Parametros:
*
* Nombre      E/S       Descripcion
* ------     -----      -----------
*   v1        E        Vector de entrada 1
*   v2        E        Vector de entrada 2
*  vaux       E/S      Vector resultado de la suma
*
*
* Valor devuelto:
*       Funcion void. Modifica el vector resultado de la suma de v1 y v2
************************************************************************/

void SumarV(Vector v1, Vector v2, Vector vaux)
{
    int i = MAX - 1;
    int suma;
    for ( i ; i >= 0; i--)
    {
        suma = v1[i] + v2[i];
        if (suma >= 10)
        {
            // cout << " la suma es superior a 10" << endl;
            vaux[i-1]= 1;
            // cout << " En la casilla" << i-1 << " Introducimos el valor 1 ver -> " << vaux[i-1];
            vaux[i] = ( vaux[i] + (suma%10) );
            // cout << " metemos el valor " << vaux[i]<< " En la casilla " << i << endl;
        }
        else
        {
            vaux[i] = vaux[i] + v1[i] + v2[i] ; // Sumamos uno a uno todos los numeros de los dos vectores
            // cout << " La suma no es mayor que 10 introducimos el valor " << vaux[i] << " + " << v1[i] << " + " <<v2[i]<< endl;
        }
    }

    return;
}


/***********************************************************************
* Funcion: MostrarV
* Descripcion: Funcion que muestra un vector escrito al final con ceros
*              hasta el primer valor significativo del numero a mostrar
*
*  Parametros:
*
* Nombre      E/S       Descripcion
* ------     -----      -----------
*   v         E        Vector de entrada a mostrar
*
*
* Valor devuelto:
*       La funcion solo muestra por pantalla el contenido del vector void
*************************************************************************/

void MostrarV (Vector v)
{
    int i; // variable que nos hara de indice de nuestro vector
    i = 0;

    while (v[i] == 0)
    {
        i++;
    }
    // i = i + 1; // damos el valor siguiente que sera nuestro primer valor a mostrar en pantalla

    for (i; i<MAX; i++)
        cout << v[i];

    return;
}