Advertisement
ipsBruno

(Pawn) Equacao de 3 grau — Método Girardi

Oct 27th, 2013
375
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.35 KB | None | 0 0
  1. main() {
  2.     printf("%f", E3(2.0, -19.0, 37.0, -14.0) ); //
  3. }
  4.  
  5.  
  6.  
  7.  
  8.  
  9. // Método Newton-Raphson para pegar as raizes iniciais
  10. // Por rjjj
  11.  
  12. // Método Briot Ruffini para encontrar o resto das raizes
  13. // Por Bruno da Silva
  14.  
  15.  
  16.  
  17.  
  18. stock E3(Float:a, Float:b, Float:c, Float:d)  {
  19.  
  20.     new Float:  Raiz = 1.0; new Float: produto = 1.0;
  21.  
  22.     for(;;)
  23.     {
  24.         if(floatabs((a * floatpower(Raiz, 3) + b * floatpower(Raiz, 2) + c * Raiz + d)) < 0.0001)    break;
  25.        
  26.         Raiz = (2* a * floatpower(Raiz, 3) + b * floatpower(Raiz, 2) - d)/(3* a * floatpower(Raiz, 2) + 2 * b * Raiz + c);
  27.     }
  28.  
  29.  
  30.     produto = Raiz;
  31.  
  32.     new Float:na = a;
  33.     new Float:nb = (na * produto) + b;
  34.     new Float:nc = (nb * produto) + c;
  35.  
  36.     static Float: x[3];
  37.    
  38.     new Float:root = ((nb*nb) - (4*na*nc));
  39.    
  40.     if(root < 0.0) {
  41.         new Float:ParteImaginaria = floatsqroot(root / -1) / (2 * na);
  42.         new RaizesComplexas[2][20];
  43.         x[0] = produto;
  44.         format(RaizesComplexas[0], 20, "%f+%fi", -nb / (2 * na), ParteImaginaria);
  45.         format(RaizesComplexas[1], 20, "%f-%fi", -nb / (2 * na), ParteImaginaria);
  46.         printf("%f %s %s", x[0], RaizesComplexas[0], RaizesComplexas[1]);
  47.         return true;
  48.     }
  49.    
  50.     root = floatsqroot(root);
  51.    
  52.     x[2] = ( ((-nb) - (root)) / (2*na) );
  53.     x[1] = ( ((-nb) + (root)) / (2*na) );
  54.     x[0] = produto;
  55.  
  56.     printf("%f %f %f", x[0], x[1], x[2]);
  57. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement