En caso de que sea polinomica y teniendo en cuenta el siguiente modelo: ax^2 + bx + c. Y en el programa se debera ingresar los valores para a, b, c.
Y en el caso de la racional, teniendo el cuenta el siguiente modelos:
(ax^2+bx+c)/(ax^2+bx+c). Y tendremos que ingresar los valores a,b,c del numerador y del denominador.
Aqui el codigo:
Código
#include <stdio.h> #include <stdlib.h> #include <math.h> #include <conio.h> float divis(float numa,float numb,float numc,float dena,float denb,float denc); float div0(float numa,float numb,float numc,float dena,float denb,float denc); float divt(float numa,float numb,float numc,float dena,float denb,float denc); float diva(float numa,float numb,float numc,float dena,float denb,float denc); float var10(float b,float c); float var20(float a,float c); float vartrue(float a,float b,float c); float a; float b; float c; float raiz1; float raiz2; float ordenada; float numa; float numb; float numc; float dena; float denb; float denc; float asihor; float asiver1; float asiver2; int x; int main(int argc, char *argv[]){ //comienzo funcion main prin: //menu principal printf (" ----------------------------------------------------\n| Si desea calcular una funcion polinomica ingrese 1.|\n| Si desea calcular una funcion racional ingrese 2. |\n ----------------------------------------------------\n"); switch (x){ case 1: goto poli; case 2: goto raci; case 1992: goto rights; default: goto prin; } rights: //Rights goto prin; poli: //ACA EMPIEZA LA SELECCION DE LAS POLINOMICAS printf ("Esta opcion unicamente calcula los valores correspondientes a funciones polinomicas de hasta grado 2\n\a"); if (a==0) { var10(b,c); goto pregunta; } else if (b==0){ var20(a,c); goto pregunta; } else { vartrue(a,b,c); goto pregunta; } pregunta: //PREGUNTA PARA ARRANCAR DE VUELTA printf (" ********************************************\n * Si desea resolver otra funcion ingrese 1.*\n * Si desea salir ingrese 2. *\n ********************************************\n\a"); switch (x){ case 1: goto prin; case 2: return (0); default: goto pregunta; } raci: // Comiendo funciones RACIONALES printf ("Esta opcion unicamente calcula los valores correspondientes a funciones racionales de hasta grado 2\nEste programa expresa: Las asintotas, las raices, y la ordenada al origen.\n\a"); printf ("Siguiendo por el denominador, ingrese el a del mismo.\nEn caso que no exista colocar 0.\n\a"); if (numa==0 && dena==0){ divis(numa,numb,numc,dena,denb,denc); goto pregunta; } else if (numa==0 && dena!=0){ div0(numa,numb,numc,dena,denb,denc); goto pregunta; } else if (numa!=0 && dena==0){ diva(numa,numb,numc,dena,denb,denc); goto pregunta; } else { divt(numa,numb,numc,dena,denb,denc); goto pregunta; } } float var10(float b,float c){ raiz1=((0-c)/b); ordenada=c; return (0); } float var20(float a,float c){ raiz1=(-4*(a*c)); if (raiz1>0){ raiz1=0-raiz1; raiz1=raiz1/(2*a); } else { ordenada=c; return (0); } raiz2=(-4*(a*c)); raiz2=0+raiz2; raiz2=raiz2/(2*a); ordenada=c; printf ("La raiz 1 esta en %f\nLa raiz 2 esta en %f\nY la ordenada al origen en %f\n\a", raiz1, raiz2, ordenada); } float vartrue(float a,float b,float c){ raiz1=((b*b)-4*(a*c)); if (raiz1>0){ raiz1=(0-b)-raiz1; raiz1=raiz1/(2*a); } else { ordenada=c; return (0); } raiz2=((b*b)-4*(a*c)); raiz2=(0-b)+raiz2; raiz2=raiz2/(2*a); ordenada=c; printf ("La raiz 1 esta en %f\nLa Raiz 2 esta en %f\nY la ordenada al origen en %f\n\a", raiz1, raiz2, ordenada); } float divis(float numa,float numb,float numc,float dena,float denb,float denc){ asiver1=((0-denc)/denb); asihor=(numa/dena); raiz1=((0-numc)/numb); ordenada=(numc/denc); printf ("La raiz se encuentra en %f.\nLa asintota Vertical en %f y la horizontal en %f.\nLa ordenada esta en %f\n\a", raiz1, asiver1, asihor, ordenada); } float div0(float numa,float numb,float numc,float dena,float denb,float denc){ asihor=0; asiver1=((denb*denb)-4*(dena*denc)); if (asiver1>0){ asiver1=((0-denb)-asiver1); asiver1=asiver1/(2*dena); asiver2=((denb*denb)-4*(dena*denc)); asiver2=((0-denb)+asiver2); asiver2=asiver2/(2*dena); } else { } raiz1=((0-numc)/numb); ordenada=(numc/denc); printf ("La asintota horizontal se encuentra en %f.\nLa raiz se encuentra en %f.\nLa ordenada se encuentra en %f\n\a",asihor,raiz1,ordenada); } float divt(float numa,float numb,float numc,float dena,float denb,float denc){ asihor=numa/dena; asiver1=((denb*denb)-4*(dena*denc)); if (asiver1>0){ asiver1=((0-denb)-asiver1); asiver1=asiver1/(2*dena); asiver2=((denb*denb)-4*(dena*denc)); asiver2=((0-denb)+asiver2); asiver2=asiver2/(2*dena); } else { } raiz1=((numb*numb)-4*(numa*numc)); if (raiz1>0){ raiz1=((0-numb)-raiz1); raiz1=(raiz1/(2*numa)); raiz2=((numb*numb)-4*(numa*numc)); raiz2=((0-numb)+raiz2); raiz2=(raiz2/(2*numa)); printf ("Existe raiz en %f y %f\nCUIDADO!: Si el valor de las raices es igual al de las asintotas\nentonces no es una raiz!!!\n\a",raiz1,raiz2); } else { } ordenada=(numc/denc); } float diva(float numa,float numb,float numc,float dena,float denb,float denc){ raiz1=((numb*numb)-4*(numa*numc)); if (raiz1>0){ raiz1=((0-numb)-raiz1); raiz1=(raiz1/(2*numa)); raiz2=((numb*numb)-4*(numa*numc)); raiz2=((0-numb)+raiz2); raiz2=(raiz2/(2*numa)); printf ("Existe raiz en %f y %f\nCUIDADO!: Si el valor de las raices es igual al de las asintotas\nentonces no es una raiz!!!\n\a",raiz1,raiz2); } else { } asiver1=((0-denc)/denb); ordenada=numc/denc; }
El programa esta 100% probado y resuelve las funciones con un 99.9999% de exito.
Espero respuestas =)