elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Sigue las noticias más importantes de seguridad informática en el Twitter! de elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Funciones polinomicas y racionales
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Funciones polinomicas y racionales  (Leído 4,054 veces)
clodan

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Funciones polinomicas y racionales
« en: 25 Agosto 2010, 17:27 pm »

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:

Código
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4. #include <conio.h>
  5.  
  6.  
  7. float divis(float numa,float numb,float numc,float dena,float denb,float denc);
  8. float div0(float numa,float numb,float numc,float dena,float denb,float denc);
  9. float divt(float numa,float numb,float numc,float dena,float denb,float denc);
  10. float diva(float numa,float numb,float numc,float dena,float denb,float denc);
  11. float var10(float b,float c);
  12. float var20(float a,float c);
  13. float vartrue(float a,float b,float c);
  14. float a;
  15. float b;
  16. float c;
  17. float raiz1;
  18. float raiz2;
  19. float ordenada;
  20. float numa;
  21. float numb;
  22. float numc;
  23. float dena;
  24. float denb;
  25. float denc;
  26. float asihor;
  27. float asiver1;
  28. float asiver2;
  29. int x;
  30.  
  31. int main(int argc, char *argv[]){ //comienzo funcion main
  32.  prin: //menu principal
  33.  system("cls");
  34.  printf ("    *****************Version 2.0*******************\n\a");
  35.  printf (" ----------------------------------------------------\n| Si desea calcular una funcion polinomica ingrese 1.|\n| Si desea calcular una funcion racional ingrese 2.  |\n ----------------------------------------------------\n");
  36.  scanf ("%d",&x);
  37.  switch (x){  
  38.         case 1:
  39.              goto poli;
  40.         case 2:
  41.              goto raci;
  42.         case 1992:
  43.              goto rights;        
  44.         default:
  45.              goto prin;
  46.              }
  47.  rights: //Rights
  48.         system("cls");
  49.         printf ("PROGRAMADO Y DISEÑADO POR ALEJANDRO BENTIVENGO ^^ \n");
  50.         system("PAUSE");
  51.         goto prin;
  52.  
  53.  poli:  //ACA EMPIEZA LA SELECCION DE LAS POLINOMICAS
  54.  system("cls");
  55.  printf ("Esta opcion unicamente calcula los valores correspondientes a funciones polinomicas de hasta grado 2\n\a");
  56.  printf ("Ingrese el valor a de la funcion\nEn caso de que no exista colocar 0\n");
  57.  scanf ("%f",&a);
  58.  printf ("Ingrese el valor b de la funcion\nEn caso de que no exista colocar 0\n\a");
  59.  scanf ("%f",&b);
  60.  printf ("Ingrese el valor c de la funcion\nEn caso de que no exista colocar 0\n\a");
  61.  scanf ("%f",&c);
  62.  if (a==0) {
  63.            var10(b,c);
  64.            goto pregunta;
  65.  }
  66.  else if (b==0){
  67.            var20(a,c);
  68.            goto pregunta;
  69.  }
  70.  else {
  71.            vartrue(a,b,c);
  72.            goto pregunta;
  73.  }
  74.  pregunta: //PREGUNTA PARA ARRANCAR DE VUELTA
  75.  system("cls");
  76.  printf ("     ********************************************\n     * Si desea resolver otra funcion ingrese 1.*\n     *        Si desea salir ingrese 2.         *\n     ********************************************\n\a");
  77.  scanf ("%d",&x);
  78.  switch (x){
  79.         case 1:
  80.              goto prin;
  81.         case 2:
  82.              return (0);
  83.         default:
  84.                 goto pregunta;
  85.         }
  86.  
  87.  raci: // Comiendo funciones RACIONALES
  88.  system("cls");
  89.  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");
  90.  printf ("Comenzando por el numerador, ingrese a.\nEn caso que no exista colocar 0.\n\a");
  91.  scanf ("%f",&numa);
  92.  printf ("Ingrese el b del numerador.\nEn caso que no exista colocar 0.\n\a");
  93.  scanf ("%f",&numb);
  94.  printf ("Ingrese el c del numerador.\nEn caso que no exista colocar 0.\n\a");
  95.  scanf ("%f",&numc);
  96.  printf ("Siguiendo por el denominador, ingrese el a del mismo.\nEn caso que no exista colocar 0.\n\a");
  97.  scanf ("%f",&dena);
  98.  printf ("Ingrese el b del denominador.\nEn caso que no exista colocar 0.\n\a");
  99.  scanf ("%f",&denb);
  100.  printf ("Ingrese el c del denominador.\nEn caso que no exista colocar 0.\n\a");
  101.  scanf ("%f",&denc);
  102.  if (numa==0 && dena==0){
  103.              divis(numa,numb,numc,dena,denb,denc);
  104.              goto pregunta;
  105.  }
  106.  else if (numa==0 && dena!=0){
  107.              div0(numa,numb,numc,dena,denb,denc);
  108.              goto pregunta;
  109.  }
  110.  else if (numa!=0 && dena==0){
  111.              diva(numa,numb,numc,dena,denb,denc);
  112.              goto pregunta;
  113.  }
  114.  else {
  115.              divt(numa,numb,numc,dena,denb,denc);
  116.              goto pregunta;
  117.  }
  118. }
  119.  
  120. float var10(float b,float c){
  121.      system("cls");
  122.      raiz1=((0-c)/b);
  123.      ordenada=c;
  124.      printf ("La raiz esta en %f\nY la ordenada al origen en %f\n\a", raiz1, ordenada);
  125.      system("PAUSE");
  126.      return (0);
  127. }
  128. float var20(float a,float c){
  129.      system("cls");
  130.      raiz1=(-4*(a*c));
  131.      if (raiz1>0){
  132.           raiz1=sqrt(raiz1);
  133.           raiz1=0-raiz1;
  134.           raiz1=raiz1/(2*a);
  135.      }
  136.      else {
  137.           ordenada=c;
  138.           printf ("La funcion no tiene raices.\nLa ordenada esta en %f\n\a", ordenada);
  139.           system("PAUSE");
  140.           return (0);
  141.      }
  142.      raiz2=(-4*(a*c));
  143.      raiz2=sqrt(raiz2);
  144.      raiz2=0+raiz2;
  145.      raiz2=raiz2/(2*a);
  146.      ordenada=c;
  147.      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);
  148.      system("PAUSE");
  149. }
  150.  
  151. float vartrue(float a,float b,float c){
  152.      system("cls");
  153.      raiz1=((b*b)-4*(a*c));
  154.      if (raiz1>0){
  155.           raiz1=sqrt(raiz1);
  156.           raiz1=(0-b)-raiz1;
  157.           raiz1=raiz1/(2*a);
  158.      }
  159.      else {
  160.           ordenada=c;
  161.           printf ("La funcion no tiene raices.\nLa ordenada esta en %f\n\a", ordenada);
  162.           system("PAUSE");
  163.           return (0);
  164.      }
  165.      raiz2=((b*b)-4*(a*c));
  166.      raiz2=sqrt(raiz2);
  167.      raiz2=(0-b)+raiz2;
  168.      raiz2=raiz2/(2*a);
  169.      ordenada=c;
  170.      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);
  171.      system("PAUSE");
  172. }
  173.  
  174. float divis(float numa,float numb,float numc,float dena,float denb,float denc){
  175.      system("cls");
  176.      asiver1=((0-denc)/denb);
  177.      asihor=(numa/dena);
  178.      raiz1=((0-numc)/numb);
  179.      ordenada=(numc/denc);
  180.      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);
  181.      system("PAUSE");
  182. }
  183.  
  184. float div0(float numa,float numb,float numc,float dena,float denb,float denc){
  185.      system("cls");
  186.      asihor=0;
  187.      asiver1=((denb*denb)-4*(dena*denc));
  188.      if (asiver1>0){
  189.                    asiver1=sqrt(asiver1);
  190.                    asiver1=((0-denb)-asiver1);
  191.                    asiver1=asiver1/(2*dena);
  192.                    asiver2=((denb*denb)-4*(dena*denc));
  193.                    asiver2=sqrt(asiver2);
  194.                    asiver2=((0-denb)+asiver2);
  195.                    asiver2=asiver2/(2*dena);
  196.                    printf ("Existe asintota Vertical en %f y %f\n\a", asiver1, asiver2);
  197.      }
  198.  
  199.      else {
  200.           printf ("No existe Asintota Vertical\n\a");
  201.      }
  202.      raiz1=((0-numc)/numb);
  203.      ordenada=(numc/denc);
  204.      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);
  205.      system("PAUSE");
  206. }
  207.  
  208. float divt(float numa,float numb,float numc,float dena,float denb,float denc){
  209.      system("cls");
  210.      asihor=numa/dena;
  211.      asiver1=((denb*denb)-4*(dena*denc));
  212.      if (asiver1>0){
  213.                    asiver1=sqrt(asiver1);
  214.                    asiver1=((0-denb)-asiver1);
  215.                    asiver1=asiver1/(2*dena);
  216.                    asiver2=((denb*denb)-4*(dena*denc));
  217.                    asiver2=sqrt(asiver2);
  218.                    asiver2=((0-denb)+asiver2);
  219.                    asiver2=asiver2/(2*dena);
  220.                    printf ("Existe asintota Vertical en %f y %f\n\a", asiver1, asiver2);
  221.      }
  222.  
  223.      else {
  224.           printf ("No existe Asintota Vertical\n\a");
  225.      }
  226.      raiz1=((numb*numb)-4*(numa*numc));
  227.      if (raiz1>0){
  228.                   raiz1=sqrt(raiz1);
  229.                   raiz1=((0-numb)-raiz1);
  230.                   raiz1=(raiz1/(2*numa));
  231.                   raiz2=((numb*numb)-4*(numa*numc));
  232.                   raiz2=sqrt(raiz2);
  233.                   raiz2=((0-numb)+raiz2);
  234.                   raiz2=(raiz2/(2*numa));
  235.                   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);
  236.      }
  237.      else {
  238.           printf ("No existen raices\n\a");
  239.      }
  240.      ordenada=(numc/denc);
  241.      printf ("La ordenada se encuentra en %f\nY la asintota horizontal en %f.\n\a", ordenada, asihor);
  242.      system("PAUSE");
  243. }
  244.  
  245. float diva(float numa,float numb,float numc,float dena,float denb,float denc){
  246.      system("cls");
  247.      printf ("No existe asintota horizontal\n\a");
  248.      raiz1=((numb*numb)-4*(numa*numc));
  249.      if (raiz1>0){
  250.                   raiz1=sqrt(raiz1);
  251.                   raiz1=((0-numb)-raiz1);
  252.                   raiz1=(raiz1/(2*numa));
  253.                   raiz2=((numb*numb)-4*(numa*numc));
  254.                   raiz2=sqrt(raiz2);
  255.                   raiz2=((0-numb)+raiz2);
  256.                   raiz2=(raiz2/(2*numa));
  257.                   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);
  258.      }
  259.      else {
  260.           printf ("No existen raices\n\a");
  261.      }
  262.      asiver1=((0-denc)/denb);
  263.      ordenada=numc/denc;
  264.      printf ("Existe asintota vertical en %f\nYla ordenada al origen en %f\n\a",asiver1,ordenada);
  265.      system("PAUSE");
  266. }


El programa esta 100% probado y resuelve las funciones con un 99.9999% de exito.

Espero respuestas =)


« Última modificación: 25 Agosto 2010, 17:29 pm por clodan » En línea

Gallu

Desconectado Desconectado

Mensajes: 247



Ver Perfil
Re: Funciones polinomicas y racionales
« Respuesta #1 en: 25 Agosto 2010, 22:37 pm »

Consejos...

- No uses goto , por que no llamas directamente a las funciones?

- No uses llamadas a system

- No uses conio.h

- Limpia el buffer de entrada despues de las llamadas a scanf .

- Es buena práctica comentar los procedimientos , parámetros que recibe, finalidad y valor de retorno.



En línea

Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
clodan

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Re: Funciones polinomicas y racionales
« Respuesta #2 en: 26 Agosto 2010, 14:57 pm »

muchas gracias por los consejos!! jejeje yo recien toy empezando :P

El problema que tuve es que si no pongo goto, como hago para que vuelva a empezar ¬¬

El conio.h ni me acuerdo porque lo use xD

lo del system, estoy tratando de reemplazar el pause por el getchar de a poquito jajaja y el system("cls"); con que puede reemplazarse???

Como haces para limpiar el buffer de entrada?? cual es la funcion??

jejeje lo de los comentarios siempre lo uso pero pense que iba a quedar re pet* poner los comentarios mios en un post publico jejeje
En línea

Littlehorse
All the world's a stage
Moderador
***
Desconectado Desconectado

Mensajes: 2.714


Nie Dam Sie


Ver Perfil WWW
Re: Funciones polinomicas y racionales
« Respuesta #3 en: 26 Agosto 2010, 22:13 pm »

Citar
El problema que tuve es que si no pongo goto, como hago para que vuelva a empezar ¬¬

Con un ciclo, un switch mas las funciones que necesites. Hay mil variantes que podes realizar para conseguir ese objetivo, sea cual sea va a ser mejor que "goto", que dicho sea de paso es considerada una muy mala practica.

Citar
El conio.h ni me acuerdo porque lo use xD

Olvídate de conio, completamente.

Citar
lo del system, estoy tratando de reemplazar el pause por el getchar de a poquito jajaja y el system("cls"); con que puede reemplazarse???

No hay un reemplazo estándar, para limpiar la pantalla no te queda otra que o bien usar funciones especificas de cada sistema o librerías multi-plataforma.

Citar
Como haces para limpiar el buffer de entrada?? cual es la funcion??

Función estándar no existe, esos aspectos son inherentes a cada sistema. Aplica igual que en el caso anterior, funciones especificas del sistema o librerías multi-plataforma.
Ignora los códigos que utilizan fflush(stdin) u setbuf(stdin,NULL) y demás, invocan comportamiento indefinido y no limpian el buffer precisamente. Lo ideal es que utilices fgets+sscanf y no tengas que preocuparte por la basura en el buffer.

Saludos
En línea

An expert is a man who has made all the mistakes which can be made, in a very narrow field.
Gallu

Desconectado Desconectado

Mensajes: 247



Ver Perfil
Re: Funciones polinomicas y racionales
« Respuesta #4 en: 27 Agosto 2010, 08:27 am »

Como dice LittleHorse , lo suyo sería usar fgets+sscanf, pero si de todas maneras usas scanf , para limpiar el buffer  después de cada llamada haces

Código
  1. while(getchar() != '\n');
  2.  

saludos.
En línea

Nadie alcanza la meta con un solo intento, ni perfecciona la vida con una sola rectificación, ni alcanza altura con un solo vuelo.
clodan

Desconectado Desconectado

Mensajes: 277



Ver Perfil
Re: Funciones polinomicas y racionales
« Respuesta #5 en: 27 Agosto 2010, 14:53 pm »

barbaroo!!! muchas gracias por las respuestas!!!
En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
TAB de OPERACIONES CON RACIONALES
Programación C/C++
chicainge 3 2,091 Último mensaje 9 Junio 2014, 21:49 pm
por eferion
Calcular las n raices racionales de un polinomio grado n (dudas particulares)
Programación C/C++
tenshi96 2 6,290 Último mensaje 23 Mayo 2016, 04:12 am
por JavierScars
graficador de funciones polinomicas en c.
Programación C/C++
ivan rios 1 2,412 Último mensaje 25 Noviembre 2017, 20:31 pm
por Serapis
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines