Título: Teorema del Binomio
Publicado por: Black Lotus en 23 Mayo 2013, 01:06 am
Se trata de crear un programa para que resuelva ejercicios del teorema del binomio, sin embargo se tiene el problema de que solo realiza ejercicios con signo positivo tales como (http://www.eplc.umich.mx/salvadorgs/matematicas1/contenido/CapIII/3_5_5_teo_bin_archivos/image062.gif) hasta el exponente 12, sin embargo no se puede realizar ejercicios que contentan signo negativos tales como: (http://www.eplc.umich.mx/salvadorgs/matematicas1/contenido/CapIII/3_5_5_teo_bin_archivos/image070.gif).... Entonces me ayudarian a darme la idea o arreglar el codigo a modo que se pueda hacer operaciones con signo negativo?#include <iostream> #include <string> #include <conio> #include <stdlib> using namespace std; long int fact(long int x) { int z = 1; for (x; x >=1; x--) { z = z*x; } return z; } int main() { long int r, n, p, num , y ,n1, n2, resu1, resu2, resul; char a,b; char t1, t2, p1; char op; do { ret: clrscr(); cout<<"\n ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»"; cout<<"\n º :: Suma de Binomios :: º"; cout<<"\n ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ"; cout<<"\n Escriba el Exponente de la Ecuaci\242n: "; cin>> p1; if ((p1>48) && (p1<58)) goto sig; else goto ret; sig: cout <<"\n Escribir el T\202rmino numerico: "; cin >> t1 ; if ((t1>48) && (t1<58)) goto sig2; else goto sig; sig2: cout <<"\n Escribir el Primer T\202rmino: "; cin >> a ; if ((a>64) && (a<91) || (a>96) && (a<123)) goto sig3; else goto sig2; sig3: cout <<"\n Escribir el T\202rmino numerico: "; cin >> t2 ; if ((t2>48) && (t2<58)) goto sig4; else goto sig3; sig4: cout <<"\n Escribir el Segundo T\202rmino: "; cin >> b ; if ((b>64) && (b<91) || (b>96) && (b<123)) goto sig5; else goto sig4; sig5: cout<<endl; cout<<" El Producto Notable de ("<<t1<<a<<"+"<<t2<<b<<")^"<<p1<<" es..."; cout<<endl<<endl; n = p1 - 48; for (p=0; p<=n; p++) { n1 = t1 - 48; n2 = t2 - 48; resu2 = ( pow(n2,p)) ; y = n - p; resu1 = ( pow(n1,y)) ; num = fact(n) / (fact(p) * fact(y)); resul= resu1*num*resu2; if (p==0) cout<< resul <<" " << a << "^ " << n<< " + " ; else if ( p==n) cout << resul <<" "<< b <<"^ " << p ; else { cout << resul <<" " << a << "^ " << y << " * " << b <<"^ " << p <<" + " ; } } cout<<endl<<endl; cout<<"Ingresar la posicion que deseas averiguar:"; cin >> r ; p = r-1; y = n - p; num = fact(n) / (fact(p) * fact(y)); resul= resu1*num*resu2; cout<<"la posicion es :"; cout<< resul<<" " << a << "^ " << y << " * " << b <<"^ " << p ; cout<<endl<<endl; }while (op != 50); }
Título: Re: Teorema del Binomio
Publicado por: leosansan en 23 Mayo 2013, 16:06 pm
Creo que te has hecho la p*cha un lío. No me explico como no metes la gamba entre tanto paréntesis y goto, con lo fáciles que son los do-while a la hora de revisar el código. Pero en fin, tú mismo.
Creo que andabas buscando una salida como esta:escriba el exponente de la ecuacion = 4 escribir el primer coeficiente (numero)= 2 escribir el segundo coeficiente (numero)= 3 escribir el primer coeficiente (letra en minuscula)= a escribir el segundo coeficiente (letra en minuscula)= b +16 a^ 4-96 a^ 3 * b^ 1+216 a^ 2 * b^ 2-216 a^ 1 * b^ 3+81 b^ 4 Presione una tecla para continuar . . . Mejor escrito: 16 a^4 - 96 a^3 b + 216 a^2 b^2 - 216 a b^3 + 81 b^4
con signos, coeficientes numéricos y coeficientes "letrados" ;)
Ta´bien, te paso el código: :) #include <iostream> #include <cmath> #include <cstdlib> using namespace std; float comb(int n,int p) { int i; if (n < 0 || p < 0 || p > n) return 0; float c = 1; if (p>n/2) p=n-p; for ( p; p>=1; p--,n--) c*= n/p; return c; } int main() { long int n,c,d,p, num ,y, y1=0,expon; char coef_1,coef_2,signo,a,b; cout << "escriba el exponente de la ecuacion = "; cin >> expon; do{ cout << "escribir el primer coeficiente (numero)= "; cin >>coef_1 ; }while (coef_1<48 || coef_1>58); do{ cout << "escribir el segundo coeficiente (numero)= "; cin >>coef_2 ; }while (coef_2<48 || coef_2>58); do{ cout << "escribir el primer coeficiente (letra en minuscula)= "; cin >>a ; }while (a>64 && a<96); do{ cout << "escribir el segundo coeficiente (letra en minuscula)= "; cin >>b ; }while (b>64 && b<96); n=expon; c=coef_1-48; d=coef_2-48; for (p=0; p<=n; p++,y1++) { num = comb(n,p); y=n-p; if ( p%2==0) signo='+'; else signo='-'; if (p==0 ) cout<<signo<< pow(c,n) <<" " << a <<"^ " << n; else if ( p==n) cout <<signo<< pow(d,n) <<" "<< b <<"^ " << p ; else { cout <<signo<< num*pow(c,n-y1)*pow(d,y1) <<" "<<a<< "^ " << y << " * " << b<<"^ " << p ; } } cout <<endl; system("pause") ; return 0; }
Espero te sirva de referencia al menos.
Por cierto lo del número combinatorio es para obtener potencias superiores a 12, que si no salen más es porque C/C++ "no pueden" con números tan grandes como los que originan los factoriales al calcular los números combinatorios y de esta manera pueden ser de 20 y más, dependiendo de los coeficientes .Si son uno no hay problema pero cuando los subes, la combinación entre el tamaño de los combinatorios y las potecias de los mencionados numeros hacen que el exponente no pueda ser muy grande. Son las miserias cel C/C++ con números grrandes como ya te indiqué. Habría que usar una librería de números grandes, como GMP, para poder hacer cálculos sin esas limitaciones del C/C++.Una explicación más amplia en: Teorema Binomial (http://foro.elhacker.net/buscador2-t388312.0.html;msg1846605#msg1846605l)
Saluditos!. .... ..(http://i1280.photobucket.com/albums/a497/leosansan/leosan1/leones%20peques/lion14peque_zps1d213b80.jpg) P.D:A mí personalmente no me acaba se satisfacer el código ya que limitas la entrada de coeficientes a números entre 0 y 9, cuando declarándolos directamente como int en lugar de char no tendrías esa limitación. O bien los declaras como char pero como array para pillar todas las cifras y luego hacer una conversión de cadena a entero, que para eso existen las funciones apropiadas. Pero bueno, tal como lo tenías he procurado no "menartelo" mucho. :laugh:
|