Autor
|
Tema: Problema con ejercicio de vectores (Leído 1,507 veces)
|
Draked393
Desconectado
Mensajes: 9
|
Buenas, llevo 4 horas con este ejercicio de vectores y no soy capaz de sacarlo... "31. La suma.Para operar con números naturales muy grandes se pueden utilizar vectores qeu tengan como componentes los dígitos decimales entre 0 y 9, que serán los dígitos del numero. Escribe un programa que sume dos números natura de hasta X cifras. Para cada número se preguntara la cantidad de cifras que tiene. " Esto es lo que tengo: #include <stdio.h> #include <stdlib.h> int main() { int *v1=0, i,*v2=0,j, *Vt, k ; size_t espai1=0; size_t espai2=0; size_t espai3=0; printf("Digues quantes xifres té el primer numero: "); printf("Digues quantes xifres té el segon numero: "); //Per a adjudicar el tamany dels vectors v1 = (int *)malloc( espai1 *sizeof(int) ); v2 = (int *)malloc( espai2 *sizeof(int) ); Vt = (int *)malloc( espai3 *sizeof(int) ); // Dar la cantidad de numeros printf("Digues els numeros de la suma (separa cada numero amb un espai): "); for( i=0; i<espai1;i++) { } printf("Digues els numeros de la suma (separa cada numero amb un espai): "); for(j=0; j<espai2; j++) { } //Poner los numeros en un orden inverso for(i=espai1-1; i>=0; i--) { } for(j=espai2-1; j>=0;j--) { } //Suma for (i=0; i< espai1; i++) { for(j=0; j<espai2; j++) { for(k=0; k<espai3+1; k ++) { Vt[k] = v1[i] + v2[j]; if(Vt[k]>9) { k++; Vt[k]= Vt[k] + 1; } printf("El resultat de la suma es : %d\n", Vt [k ]); } } } // Ordenar el resultado for (k=espai3-1; k>=0; k--) { } return 0; }
Lo que he hecho a sido primero como se puede ver, crear los vectores sin un tamaño, despues pedir el tamaño de dichos vectores. Para poder hacer la suma sin complicarme demasiado, se me ha ocurrido la idea de pasar los números al orden inverso y luego volver a pasar el resultado. Si alguien me puede ayudar se lo agradecería.
|
|
|
En línea
|
|
|
|
|
Draked393
Desconectado
Mensajes: 9
|
no me realiza la operación bien. Supongo que no esta bien hecha..
|
|
|
En línea
|
|
|
|
amchacon
Desconectado
Mensajes: 1.211
|
no me realiza la operación bien. Supongo que no esta bien hecha..
Supongo. ¿Pero que datos le has metido y que valor te sale?
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Una muestra de que el código si puede funcionar:Digues quantes xifres tÚ el primer numero: 2 Digues quantes xifres tÚ el segon numero: 2 Digues els numeros de la suma (separa cada numero amb un espai): 1 3 Digues els numeros de la suma (separa cada numero amb un espai): 4 5 v1[1]=3 v1[0]=1
v2[1]=5 v2[0]=4 El resultat de la suma es Vt[0]= 5
El resultat de la suma es Vt[1]= 8
La suma es: 5 8
#include <stdio.h> #include <stdlib.h> int main() { int *v1=0, i,*v2=0,j, *Vt, k ,ch; int espai1=0, espai2=0, espai3=0; printf("Digues quantes xifres té el primer numero: "); scanf("%d", &espai1); printf("Digues quantes xifres té el segon numero: "); scanf("%d", &espai2); if (espai1 >= espai2) espai3=espai1; else espai3=espai2; //Per a adjudicar el tamany dels vectors v1 = (int *)malloc( espai3*sizeof(int) ); v2 = (int *)malloc( espai3*sizeof(int) ); Vt = (int *)malloc( espai3*sizeof(int) ); for (i=0;i<espai2;i++) v1[i]=v2[i]=0; // Dar la cantidad de numeros printf("Digues els numeros de la suma (separa cada numero amb un espai): "); for( i=0; i<espai1;i++) { scanf("%d", &v1[i]); } printf("Digues els numeros de la suma (separa cada numero amb un espai): "); for(j=0; j<espai2; j++) { scanf("%d", &v2[j]); } //Poner los numeros en un orden inverso for(i=espai1-1; i>=0; i--) { printf("v1[%d]=%d\t", i,v1[i]); } puts("\n"); for(j=espai2-1; j>=0;j--) { printf("v2[%d]=%d\t", j,v2[j]); } //Suma for(k=0; k<espai3; k ++) { Vt[k] =0; Vt[k] = v1[k] + v2[k]; if(Vt[k]>9) { k++; Vt[k]= Vt[k] + 1; } printf("\nEl resultat de la suma es Vt[%d]= %d\n",k, Vt[k]); } // Ordenar el resultado puts("\nLa suma es:"); for (k=0; k<espai3; k++) { printf("%d ", Vt[k]);//system("pause"); } return 0; }
Pero tal como está suma números de iguales cifras -puedes solventar el problema introduciendo ceros al de menos cifras o mejor modificando el código pata tener en cuenta esta opción- ,. Tienes que arreglar lo anterior y también tienes que arreglar cuando sumen dos dígitos más de nueve. Como está no furula.
Pero ese no es el único de tus problemas ya que la dimensión de la suma debería ser "espai3+1", en previsión de lo que te comenté de que la suma de las cifras más significativas sea superior a 9. Saluditos! ..... !!!!
|
|
« Última modificación: 17 Diciembre 2013, 17:13 pm por leosansan »
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 1.314
|
Posteo como nuevo porque he introducido las mejoras que indiqué en el post anterior.
Ya se pueden introducir números con distinto número de cifras, queda solventado el problema del número total de cifras y el echo de que sumen dos dígitos más de nueve.
No es exactamente como yo resolvería este problema de la suma de dos enteros con un número cualquiera de cifras pero tampoco quería modificar drástica mente el código original. Bueno un poquito sí, como el idioma para enterarme mejor de lo que hacia
La "potencia" del código está en que puede sumar enteros de 30, 100 o más dígitos, cosa que como "int" en C no se puede hacer.
Y para muestra un botón:Diga cuantas cifras tiene el primer numero: 3 Diga cuantas cifras tiene el segundo numero: 4 Indique los digitos del primer numero: 6 3 9 Indique los digitos del segundo numero: 9 8 7 5 v1[0]=0 v1[1]=0 v1[2]=6 v1[3]=3 v1[4]=9
v2[0]=0 v2[1]=9 v2[2]=8 v2[3]=7 v2[4]=5
El resultado de la suma es Vt[4]= 4
El resultado de la suma es Vt[3]= 1
El resultado de la suma es Vt[2]= 5
El resultado de la suma es Vt[1]= 0
El resultado de la suma es Vt[0]= 1
La suma es: 1 0 5 1 4 */
#include <stdio.h> int main() { int i,j, k ,ch; int digito1=0, digito2=0, digito_suma=0; printf("Diga cuantas cifras tiene el primer numero: "); scanf("%d", &digito1); printf("Diga cuantas cifras tiene el segundo numero: "); scanf("%d", &digito2); if (digito1 >= digito2) digito_suma=digito1; else digito_suma=digito2; int v1[digito_suma+1],v2[digito_suma+1],Vt[digito_suma+1]; for (i=0;i<digito_suma;i++) v1[i]=v2[i]=0; for (i=0;i<=digito_suma+1;i++) Vt[i]=0; printf("Indique los digitos del primer numero: \n"); for( i=0; i<digito1;i++){ if (digito1<digito2) scanf("%d", &v1[i+digito2-digito1+1]); else scanf("%d", &v1[i+1]); } printf("Indique los digitos del segundo numero: \n"); for(i=0; i<digito2; i++){ if (digito2<digito1) scanf("%d", &v2[i+digito1-digito2+1]); else scanf("%d", &v2[i+1]); } for(i=0; i<=digito_suma; i++) printf("v1[%d]=%d\t", i,v1[i]); puts("\n"); for(i=0; i<=digito_suma;i++) printf("v2[%d]=%d\t", i,v2[i]); //Suma puts("\n"); for(k=digito_suma; k>=0; k--){ Vt[k] = Vt[k]+ v1[k] + v2[k]; if(Vt[k]>9){ Vt[k]-= 10; Vt[k-1]+= 1; } printf("\nEl resultado de la suma es Vt[%d]= %d\n",k, Vt[k]); } puts("\nLa suma es:"); for (k=0; k<=digito_suma; k++) printf("%d ", Vt[k]); return 0; }
Saluditos! ..... !!!!
|
|
« Última modificación: 18 Diciembre 2013, 12:28 pm por leosansan »
|
En línea
|
|
|
|
|
Mensajes similares |
|
Asunto |
Iniciado por |
Respuestas |
Vistas |
Último mensaje |
|
|
Ejercicio en C de Vectores 1[Borland 5.02]
Programación C/C++
|
SonaArtica
|
7
|
2,976
|
6 Noviembre 2012, 06:20 am
por SonaArtica
|
|
|
Ejercicio en C de Vectores 1.0[Borland 5.02]
Programación C/C++
|
SonaArtica
|
0
|
3,068
|
6 Noviembre 2012, 02:14 am
por SonaArtica
|
|
|
[PROBLEMA]Ejercicio en C de Vectores 1.3[Borland 5.02]
Programación C/C++
|
SonaArtica
|
1
|
2,097
|
6 Noviembre 2012, 17:04 pm
por HRSLASH
|
|
|
ejercicio de vectores
Programación C/C++
|
indict
|
2
|
1,725
|
6 Diciembre 2012, 18:50 pm
por indict
|
|
|
Problema con ejercicio de Vectores.
Programación C/C++
|
Starscream-94
|
2
|
1,771
|
17 Marzo 2013, 11:36 am
por pacoperico
|
|