Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Multiplicacion de polinomios en c++ builder

Estas en el tema de Multiplicacion de polinomios en c++ builder en el foro de C/C++ en Foros del Web. hola buenas, antes que nada soy nuevo en el foro, estudio civil en acústica, y precisamente por eso me registre en el foro.. en la ...
  #1 (permalink)  
Antiguo 10/11/2012, 13:38
Avatar de Stonedbored  
Fecha de Ingreso: noviembre-2012
Ubicación: Santiago de Chile
Mensajes: 2
Antigüedad: 12 años
Puntos: 0
Exclamación Multiplicacion de polinomios en c++ builder

hola buenas, antes que nada soy nuevo en el foro, estudio civil en acústica, y precisamente por eso me registre en el foro.. en la clase de programación me han mandado hacer un programa en C++ Builder, el programa debe multiplicar dos polinomios (al azar) y el usuario debe elegir el grado de cada polinomio,¿ me podrían ayudar con el codigo?

un amigo me intento explicar la logica
cito: "el usuario entra ingresa el código
el programa te genera un polinomio de ese grado con un ciclo
luego usando otro arreglo
te genera los coeficientes que acompañan a las x del polinomio mediante un random
y al final
generas el algoritmo de la multiplicación
pero esas 3 teni q hacerlas con ciclos basados en el grado que ingresa el usurio
antes del algoritmo de multipicación
teni que hacer lo mismo con el otro polinomio"

una ayuda porfavor! que estoy bastante confundido D:

Saludos, gracias!!
  #2 (permalink)  
Antiguo 10/11/2012, 19:06
Avatar de cotolon  
Fecha de Ingreso: octubre-2012
Mensajes: 55
Antigüedad: 12 años
Puntos: 10
Respuesta: Multiplicacion de polinomios en c++ builder

Parece un poco problemático la cosa, bueno te voy a dar tips más "sólidos" (no tanto)

Primero para generar un número al azar se usa la función "rand". Puedes ver su uso aquí:
http://www.cplusplus.com/reference/clibrary/cstdlib/rand/

Para poder usarla debes colocar un #include <stdlib.h> o algo parecido (según como lo acepte el C++ Builder)

Primero empiezas pidiendo al usuario 2 valores de tipo int "grado1" y "grado2"

Puedes hacerlo con printf scanf (necesitarias #include <stdio.h) ej:

Código C++:
Ver original
  1. printf("Ingresa grados de los polinomios.  Ej: 4 3 \n");
  2. scanf("%d %d", &grado1, &grado2)

Seguido de esto creas 2 arrays de tipo int (no trabajan con decimales supongo)

Código C++:
Ver original
  1. int polinomio1[grado1+1], polinomio2[grado2+1];

Aquí está el tip, por ejemplo si grado1 = 3 significa que es de la forma
ax^3 + bx^2 + cx + d
Por lo tanto sería polinomio1[4]; //de 4 elementos por ej (de polinomio1[0] .. polinomio1[3])
En donde

polinomio1[3] = valor de a (ya que el "3" indicaria que lo acompaña el x^3)
polinomio1[2] = valor de b (ya que el "2" indicaria que lo acompaña el x^2)
polinomio1[1] = valor de c (ya que el "1" indicaria que lo acompaña el x^1)
polinomio1[0] = valor de d (ya que el "0" indicaria que lo acompaña el x^0)

Espero lo entiendas, entonces puedes hacer un for para rellenar el array, por ej:

Código C++:
Ver original
  1. srand ((unsigned) time(NULL) ); //Si te da error quita el unsigned
  2. for(int i = 0; i < grado1+1; i++)
  3.     polinomio1[i] = rand()%19-9;
Eso del srand se coloca porque creo que lo hace más al "azar", ya que rand es un pseudo-random (calculado por fórmula creo más que por azar)
rand()%19 indicaría un número al azar entre 0 y 18 y con -9 seria entre -9 y 9

Y de la misma forma llenas polinomio2

Quedaría la parte de multiplicar
aquí podría complicar, lo que tendrías que hacer sería encontrar como multiplicar por coef sin importar el grado (Podría haber una "fórmula" similar para todas).

Espero te sirva, Saludos.

Actualizado:

Imaginemos esto:

usuario ingresa grado1 = 3 grado2 = 2, crea polinomio1[4] polinomio2[3]

Sabemos que un polinomio se multiplica término por término, así que por ej

(4x^3 + 3x^2 + 2x + 1) * (3x^2 + 2x + 1)
Sería 4 *3 + 4 *2 + 4 * 1 + 3 *3 + 3*2 + ...... Y así hasta el último termino.

Por lo tanto esta sería una posible solución para sumar:

Código C++:
Ver original
  1. //pos = posicion  ter = termino
  2. //Polinomio donde termino mayor es un x^(grado1 + grado2)
  3. int polinomioResultante [grado1 + grado2 + 1];
  4.  
  5. //Iniciamos como 0 los valores del polinomio resultante
  6. for (int c = 0; c < grado1 + grado2 + 1; c++)
  7.     polinomioResultante[c] = 0;
  8. //Por cada termino del polinomio1
  9. for (int pos = 0; pos < grado1 + 1; pos++){
  10.     //Vamos a multiplicar cada termino del polinomio2
  11.     for (int ter = 0; ter < grado2 + 1; ter++){
  12.         //Voy a explicar luego del código
  13.         polinomioResultante[pos + ter] += polinomio1[pos] * polinomio2[ter];  
  14.     }
  15. }

Vamos a explicar: imagina que tenemos el polinomio 3x^2 + 2x + 1 y 4x + 5
El polinomio resultante seria este: 3x^2 * 4x + 3x^2*5 + 2x*4x + 2x*5 + 1*4x + 1 *5
Es decir: 12 x^3 + 15 x^2 + 8x^2 + 10 x + 4x + 5
Mas resumido: 12 x^3 + 23 x^2 + 14x + 5

...........
tomando grado1 = 2 grado2 = 1 pResultante[4] de 0 .. 3
Empieza el for de pos = 0; ter = 0;

eso equivale a pResul[0] = 1 * 5 = 5; el 0 ya que el resultado es x^0
ter = 1 -> pResul[1] = 1 * 4 = 4; (a 4x) el 1 es un x^1 que esta correcto
(Solo son 2 terminos, asi que paso a pos = 1)
ter = 0; pResul[1] = 2 *5 = 10; (a 10x) y se le suma pResul[1] de antes o sea 10 + 4 (14 x) Si miras el resultado esta correcto
ter = 1; pResul[2] = 2 *4 = 8; (a 8x^2)
(pos = 2)
ter = 0; pResul[2] = 3 * 5 = 15; se le suma pResul[2] de antes 8 + 15 = 23 (23x) que está correcto.
ter = 1 pResul[3] = 3 * 4 = 12; ( a 12 x^3)

Y listo!!!

Ahora solo mostramos El resultado:
(De la misma forma podrias mostrar los otros 2 polinomios)

Código C++:
Ver original
  1. //Si no es x >= 0 es x>0 solamente
  2. for (int x = grado1 + grado2; x >= 0; x--){
  3.      
  4.      printf("  %dx^%d", pResul[x], x );
  5.      //Para que no aparezca un + luego del último término
  6.      if (x != 0)
  7.      printf("   +  ");
  8. }

Última edición por cotolon; 10/11/2012 a las 19:46
  #3 (permalink)  
Antiguo 11/11/2012, 18:02
Avatar de Stonedbored  
Fecha de Ingreso: noviembre-2012
Ubicación: Santiago de Chile
Mensajes: 2
Antigüedad: 12 años
Puntos: 0
Respuesta: Multiplicacion de polinomios en c++ builder

muchas gracias!! a pesar de eso, aun no puedo hacer el programa... me dice que los simbolos no estan asignados... la verdad soy un principiante en esto, y aun me cuesta entender la logica, será posible que me mandes el codigo completo?, así como para enteder mas a la vista, solo si puedes... muchas gracias, Saludos
  #4 (permalink)  
Antiguo 11/11/2012, 18:48
Avatar de cotolon  
Fecha de Ingreso: octubre-2012
Mensajes: 55
Antigüedad: 12 años
Puntos: 10
Respuesta: Multiplicacion de polinomios en c++ builder

Voy a suponer que no han trabajado con funciones para no complicarte la vida. Ya que el código no es muy largo lo mandaré por acá:

(Yo uso Code::Blocks y no C++ Builder, así que tu tendrías que arreglar si te da error la sintaxis)

Código C++:
Ver original
  1. #include <iostream>
  2. #include <conio.h>
  3. #include <stdlib.h>
  4. #include <stdio.h>
  5. #include <time.h>
  6.  
  7. using namespace std;
  8.  
  9. int main()
  10. {
  11.     int grado1, grado2;
  12.     //Ingresamos los grados de los 2 polinomios
  13.     printf("Ingresa grados de los 2 polinomios. Ej: 4 3\n");
  14.     scanf("%d %d", &grado1, &grado2);
  15.  
  16.     //Creamos los polinomios de grado + 1
  17.     int polinomio1[grado1 + 1], polinomio2[grado2 + 1];
  18.  
  19.     //Iniciamos rand al azar
  20.     srand ((unsigned) time(NULL) );
  21.  
  22.     //Llenamos los 2 polinomios
  23.     for(int i = 0; i < grado1+1; i++){
  24.         //Valores entre -9 y 9
  25.         do{
  26.         //Elige al azar mientras polinomio1 es 0, deja de hacerlo si es distinto
  27.         polinomio1[i] = rand()%19-9;}while(polinomio1[i]==0);
  28.     }
  29.     for(int i = 0; i < grado2+1; i++){
  30.         do{
  31.         polinomio2[i] = rand()%19-9;}while(polinomio2[i]==0);
  32.     }
  33.  
  34.     //Mostramos polinomio1:
  35.     printf("(");
  36.     for (int x = grado1; x >= 0; x--){
  37.      //Dibujamos los x^2 o mayor
  38.      if (x > 1)
  39.         printf(" %dx^%d ", polinomio1[x], x );
  40.      //Si es 1 dibujamos solamente "x"
  41.      else if (x == 1) printf(" %dx ", polinomio1[x] );
  42.      //Y si es 0 no dibujamos la "x"
  43.      else if (x == 0) printf(" %d ", polinomio1[x] );
  44.      //Para que no se dibuje un + luego del último termino
  45.      if (x != 0)
  46.      printf(" + ");
  47.     }
  48.     printf(") * (");
  49.  
  50.     //Mostramos polinomio2
  51.     for (int x = grado2; x >= 0; x--){
  52.      if (x > 1)
  53.         printf(" %dx^%d ", polinomio2[x], x );
  54.      else if (x == 1) printf(" %dx ", polinomio2[x] );
  55.      else if (x == 0) printf(" %d ", polinomio2[x] );
  56.      if (x != 0)
  57.      printf(" + ");
  58.     }
  59.     printf(")");
  60.  
  61.     //Termino mayor del polinomio Resultante es  x^(grado1+grado2)
  62.     int polinomioResultante [grado1 + grado2 + 1];
  63.  
  64.     //Iniciamos como 0 los valores del polinomio resultante
  65.     for (int c = 0; c < grado1 + grado2 + 1; c++)
  66.         polinomioResultante[c] = 0;
  67.  
  68.     //Por cada termino del polinomio1
  69.     for (int pos = 0; pos < grado1 + 1; pos++)
  70.     //Vamos a multiplicar cada termino del polinomio2
  71.         for (int ter = 0; ter < grado2 + 1; ter++){
  72.             //pos + ter = x ^ (pos + ter)
  73.             polinomioResultante[pos + ter] += polinomio1[pos] * polinomio2[ter];
  74.         }
  75.  
  76.  
  77.     //Mostramos el Polinomio Resultante:
  78.     printf("\n\nPolinomio Resultante: \n\n");
  79.     for (int x = grado1+grado2; x >= 0; x--){
  80.      if (x > 1)
  81.         printf(" %dx^%d ", polinomioResultante[x], x );
  82.      else if (x == 1) printf(" %dx ", polinomioResultante[x] );
  83.      else if (x == 0) printf(" %d ", polinomioResultante[x] );
  84.      if (x != 0)
  85.      printf(" + ");
  86.     }
  87.  
  88.  
  89.  
  90.  
  91.     getche();
  92.     return 0;
  93. }

Etiquetas: c++, c++builder, multiplicacion, polinomios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 13:39.