Ver Mensaje Individual
  #1 (permalink)  
Antiguo 17/01/2009, 04:28
josediaz1
 
Fecha de Ingreso: enero-2009
Mensajes: 1
Antigüedad: 15 años, 4 meses
Puntos: 0
AYUDA!No soy capaz de terminar bien el programa

Hola soy muy principiante en esto y no soy capaz de terminar dos pasos que me quedan para una calculadorapara números enteros grandes

Estoy intentando crear una nueva opción en el menú para llamar a una función que debe: almacenar un número grande en una variable double e imprimir el valor de tal variable double . Por ejemplo el número 1592 se imprimiría como 1.592e+003. Para ello me es OBLIGADO a crear la función:
void ImprimirDouble (struct NumeroLargo nlargo[], int ind1), tal y como la la puse en el código. Y tampoco me dejan usar la función POW().

LA unica pista que me dan para terminar es que piense en que 1592= 2 + 5*10 + 9*102 + 1*103 y acumular en una variable double el valor total, ponderando con las potencias de 10 (las potencias de 10 se pueden ir calculando con otra variable acumuladora). y también que usase printf ("%1d" para imprimir una variable double

Aqui os dejo el código que llevo desarrollado, muchas gracias a todos de ante mano, a ver si podria lograr resolver este apartado del programa.


#include <stdio.h>
#include <math.h>

#define MAX 10
#define MAX_LONG 99

struct NumeroLargo
{
int vector[MAX_LONG];
int cantidad;
};
/////////////////////////////////////
void Crear (struct NumeroLargo nlargo[], int ind, int lg)
{
int i;
nlargo[ind].cantidad=lg;
for (i=0; i<lg-1 ; i++)
{
nlargo[ind].vector[i]= rand()%10;
}
nlargo[ind].vector[lg-1]= rand()%9 + 1; //exijo que el ultimo digito sea diferente de 0

}
/////////////////////////////////////////////
void Borrar (struct NumeroLargo nlargo[], int ind)
{
nlargo[ind].cantidad=0;
}
/////////////////////////////////////////////
void Imprimir (struct NumeroLargo nlargo[], int ind)
{
int i, j ;
for(j=0; j<ind ;j++ )
{
printf ("\nNumero %d es: ", j);

for (i=nlargo[j].cantidad-1; i>=0 ; i--)
{
printf ("%1d", nlargo[j].vector[i]);
}
}
}



////////////////////////////////////////////////////////////////////////////////

void ImprimirDouble (struct NumeroLargo nlargo[], int ind1)


///////////////////////////////////////////////////////////////////////////////
int menu() {
int op = 0;

printf("\n\nMENU PRINCIPAL:\n\n");

printf("\t1.- Crear Numero Largo (almacenado al reves) \n");
printf("\t2.- Borrar Numero Largo \n");
printf("\t3.- Imprimir una Lista de Numeros Largos\n");
printf("\t4.- Imprimirlo como Double \n");
printf("\t5.- Sumar dos Numeros Largos \n");
printf("\tCUALQUIER NUMERO NEGATIVO.- Salir \n");
printf("\nELIJA UNA OPCION:");

scanf("%d", &op);
getchar();
return op;
}
//////////////////////////////////////////

main(int argc, char *argv[])
{
int i,j;
int indice1, indice2,indice3, longitud;
int op;

struct NumeroLargo numeros[MAX];

// inicialmente borra todos los numeros
for (i=0; i<MAX; i++)
{
Borrar(numeros, i);
}

op = menu();

while (op >=0 )
{
if (op==1)
{
printf ("Dame indice:");
scanf ("%d", &indice1);
printf ("Dame longitug:");
scanf ("%d", &longitud);

if (indice1<0 || indice1 >=MAX || longitud <0 || longitud >MAX_LONG)
printf ("Indice o longitud negativos o mayor que el maximo permitido\n");
else Crear(numeros, indice1, longitud);
}
else if (op==2)
{
printf ("Dame indice:");
scanf ("%d", &indice1);
if (indice1<0 || indice1 >=MAX) printf ("Indice negativos o mayor que el maximo permitido\n");
else Borrar(numeros, indice1);
}
else if (op==3)
{
printf ("Dame indice:");
scanf ("%d", &indice1);
if (indice1<0 || indice1 >=MAX) printf ("Indice negativos o mayor que el maximo permitido\n");
else Imprimir(numeros, indice1);
}

op = menu();
}

return 0;
}