Advertisement
nRikee

EquacioSegonGrau

Nov 15th, 2011
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 4.43 KB | None | 0 0
  1.  
  2.  
  3.  
  4.  
  5. public class EquacioSegonGrau {
  6.  
  7.     private double a, b, c; // Coeficients de l’ecuació de 2on grau
  8.  
  9.     private String sol; // Text amb la solució
  10.  
  11.    
  12.  
  13.     /** Inicialitza els coeficients de l’equació i el seu resultat */
  14.  
  15.     public EquacioSegonGrau(double a, double b, double c) {
  16.  
  17.         this.a = a; this.b = b; this.c = c;
  18.  
  19.         sol = resoldre();
  20.  
  21.     }
  22.  
  23.    
  24.  
  25.     /** Retorna el coeficient quadràtic */
  26.  
  27.     public double getCoefA() { return a; }
  28.  
  29.    
  30.  
  31.     /** Retorna el coeficient linial */
  32.  
  33.     public double getCoefB() { return b; }
  34.  
  35.    
  36.  
  37.     /** Retorna el coeficient constant */
  38.  
  39.     public double getCoefC() { return c; }
  40.  
  41.    
  42.  
  43.     /** Retorna el text amb la solució */
  44.  
  45.     public String getSol() { return sol; }
  46.  
  47.    
  48.  
  49.     /** Retorna un String que representa l’equació amb el format ax^2+bx+c=0 */
  50.  
  51.     public String toString() {
  52.  
  53.         String s = new String();
  54.  
  55.         if(b==0){
  56.  
  57.             s= a + "x^2" + signe(0,c) + "=0";
  58.  
  59.         } else {
  60.  
  61.             s= a + "x^2" + signe(0,b) + "x" + signe(0,c) +"=0";
  62.  
  63.         }
  64.  
  65.         return s;
  66.  
  67.     }
  68.  
  69.    
  70.  
  71.     /** Calcula les solucions dels casos possibles i construeix el String amb el
  72.  
  73.     * missatge resultant.
  74.  
  75.     * Els casos possibles i els missatges resultants són:
  76.  
  77.     * CAS MISSATGE
  78.  
  79.     * a=b=c=0 Infinites solucions
  80.  
  81.     * a=b=0, c!=0 Sense solució
  82.  
  83.     * a=0, b!=0 Equació de primer grau x = ...
  84.  
  85.     * a!=0, disc=0 Una solució real doble x = ...
  86.  
  87.     * a!=0, disc>0 Dues solucions reals x = ... i x = ...
  88.  
  89.     * a!=0, disc<0 Dues solucions complexes x = ... i x = ...
  90.  
  91.     */
  92.  
  93.     private String resoldre() {
  94.  
  95.         String solucio = new String();
  96.  
  97.         double disc, x1, x2, arrel, denominador, x10,x11,x20,x21;
  98.  
  99.        
  100.  
  101.         disc = Math.pow(b,2)-4*a*c;
  102.  
  103.         denominador = 2*a;
  104.  
  105.        
  106.  
  107.         if (a==0){
  108.  
  109.             if(b==0){
  110.  
  111.                 if(c==0){
  112.  
  113.                     /**Infinites solucions. */
  114.  
  115.                     solucio = "Infinites solucions.";
  116.  
  117.                 } else{
  118.  
  119.                     /**No te solució. (c=0) */
  120.  
  121.                     solucio = "Sense solució.";
  122.  
  123.                 }
  124.  
  125.             } else {
  126.  
  127.                 /**Eq. de primer grau x=-c/b */
  128.  
  129.                 x1=-c/b;
  130.  
  131.                 solucio = String.format("Equació de primer grau x=%.4f",x1);
  132.  
  133.             }
  134.  
  135.         } else {
  136.  
  137.             if (disc==0){
  138.  
  139.                 /**Una solució real doble. */
  140.  
  141.                 x1= (-b) / (denominador);
  142.  
  143.                 solucio = String.format("Una solució real doble x=%.4f",x1);
  144.  
  145.             } else {
  146.  
  147.                 if(disc>0){
  148.  
  149.                     /**Dues solucions reals. */
  150.  
  151.                     arrel = Math.sqrt(disc);
  152.  
  153.                            
  154.  
  155.                     x1 = (-b + arrel) / (denominador);
  156.  
  157.                     x2 = (-b - arrel) / (denominador);
  158.  
  159.                     solucio = String.format("Dues solucions reals x=%.4f i x=%.4f",x1,x2);
  160.  
  161.                 } else {
  162.  
  163.                     /**Dues solucions complexes. */
  164.  
  165.                     arrel = Math.sqrt(Math.abs(disc)); // sqrt( |b^2-4*a*c| )
  166.  
  167.                    
  168.  
  169.                     x10 = -b/denominador;
  170.  
  171.                     x11 = arrel / denominador;
  172.  
  173.                    
  174.  
  175.                     x20 = -b/denominador;
  176.  
  177.                     x21 = -arrel / denominador;
  178.  
  179.                     solucio = String.format("Dues solucions complexes x=%.4f",x10) + signe(1,x11) + String.format("·i i x=%.4f",x20) + signe(1,x21) + "·i";
  180.  
  181.                 }
  182.  
  183.             }
  184.  
  185.         }
  186.  
  187.        
  188.  
  189.         return solucio;
  190.  
  191.        
  192.  
  193.        
  194.  
  195.     }
  196.  
  197.    
  198.  
  199.     /**Torna un + o res, segons siga a>0 o a<0 o a=0*/
  200.  
  201.     private String signe(int format, double a){
  202.  
  203.         String s = new String();
  204.  
  205.        
  206.  
  207.         if (format==0){
  208.  
  209.             if(a>=0.){
  210.  
  211.                 if(a==1){
  212.  
  213.                     s= "+";
  214.  
  215.                 }else{
  216.  
  217.                     s= "+" + a;
  218.  
  219.                 }
  220.  
  221.             } else {
  222.  
  223.                 if(a==-1){
  224.  
  225.                     s= "-";
  226.  
  227.                 } else {
  228.  
  229.                     s= "" + a;
  230.  
  231.                 }
  232.  
  233.             }
  234.  
  235.         } else {
  236.  
  237.             if(a>=0.){
  238.  
  239.                 s= String.format("+%.4f",a);
  240.  
  241.             } else {
  242.  
  243.                 s= String.format("%.4f",a);
  244.  
  245.             }
  246.  
  247.         }
  248.  
  249.         return s;
  250.  
  251.     }
  252.  
  253. }
  254.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement