Bueno, comparto este codigo que hice en C, simplemente te devuelve los valores de x para las raices y los valores de y para la ordenada al origen.
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:
#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 (" *****************Version 2.0*******************\n\a"); 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
printf ("PROGRAMADO Y DISEÑADO POR ALEJANDRO BENTIVENGO ^^ \n"); 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"); printf ("Ingrese el valor a de la funcion\nEn caso de que no exista colocar 0\n"); printf ("Ingrese el valor b de la funcion\nEn caso de que no exista colocar 0\n\a"); printf ("Ingrese el valor c de la funcion\nEn caso de que no exista colocar 0\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 ("Comenzando por el numerador, ingrese a.\nEn caso que no exista colocar 0.\n\a"); printf ("Ingrese el b del numerador.\nEn caso que no exista colocar 0.\n\a"); printf ("Ingrese el c del numerador.\nEn caso que no exista colocar 0.\n\a"); printf ("Siguiendo por el denominador, ingrese el a del mismo.\nEn caso que no exista colocar 0.\n\a"); printf ("Ingrese el b del denominador.\nEn caso que no exista colocar 0.\n\a"); printf ("Ingrese el c del denominador.\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;
printf ("La raiz esta en %f\nY la ordenada al origen en %f\n\a", raiz1
, ordenada
); 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;
printf ("La funcion no tiene raices.\nLa ordenada esta en %f\n\a", ordenada
); 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;
printf ("La funcion no tiene raices.\nLa ordenada esta en %f\n\a", ordenada
); 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);
printf ("Existe asintota Vertical en %f y %f\n\a", asiver1
, asiver2
); }
else {
printf ("No existe Asintota Vertical\n\a"); }
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);
printf ("Existe asintota Vertical en %f y %f\n\a", asiver1
, asiver2
); }
else {
printf ("No existe Asintota Vertical\n\a"); }
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 {
printf ("No existen raices\n\a"); }
ordenada=(numc/denc);
printf ("La ordenada se encuentra en %f\nY la asintota horizontal en %f.\n\a", ordenada
, asihor
); }
float diva(float numa,float numb,float numc,float dena,float denb,float denc){
printf ("No existe asintota horizontal\n\a"); 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 {
printf ("No existen raices\n\a"); }
asiver1=((0-denc)/denb);
ordenada=numc/denc;
printf ("Existe asintota vertical en %f\nYla ordenada al origen en %f\n\a",asiver1
,ordenada
); }
El programa esta 100% probado y resuelve las funciones con un 99.9999% de exito.
Espero respuestas =)