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