Polinomio in Java


///////////////////////////////////////
// INIZIO file Polinomio.java
///////////////////////////////////////
import java.util.Scanner;

public class Polinomio {

    private int grado;
    private int coeff[];

    private Polinomio(int g) {
    grado = g;
    coeff = new int[g+1];
    }

    public Polinomio(Polinomio p) {
  grado = p.grado;
  coeff = new int[grado+1];
  for(int i=0; i<coeff.length; i++)
   coeff[i] = p.coeff[i];
    }
    
    // Versione semplice
/*    public String toString() {
     String output = "";
     for(int i=grado; i>=0; i--)
      if(coeff[i] != 0) {
       if(coeff[i] > 0)
        output += "+";
       output += coeff[i] + "x^" + i;
      }
     return output;
    }
*/
    // Versione + sofisticata
    public String toString() {
     String output = "";
     for(int i=grado; i>=0; i--)
      if(coeff[i] != 0) {
       if(coeff[i] > 0 && i < grado)
        output += "+";
       if(coeff[i] == -1 && i > 0)
        output += "-";
       else
        if(coeff[i] != 1 || i == 0)
         output += coeff[i];
       if(i > 0)
        output += "x";
       if(i > 1)
        output += "^" + i;;
      }
     return output;
    }
    
    public int getGrado() {
        return grado;
    }
    
    public int getTermine(int g) {
     if(g < coeff.length)
      return coeff[g];
     else
      return 0;
    }
    
    public void setTermine(int g, int t) {
     if(g < coeff.length)
      coeff[g] = t;
    }
    
    public boolean equals(Polinomio p) {
     if(grado != p.grado)
      return false;
     for(int i=0; i<coeff.length; i++)
      if(coeff[i] != p.coeff[i])
       return false;
     return true;
    }
    
    public Polinomio perCostante(int c) {
     Polinomio ris = new Polinomio(grado);
     for(int i=0; i<=grado; i++)
      ris.coeff[i] = c*coeff[i];
     return ris;
    }
    
    public Polinomio somma(Polinomio p) {
     Polinomio somma;
     if(grado > p.grado)
      somma = new Polinomio(grado);
     else
      somma = new Polinomio(p.grado);

     int i = 0;
     while(i<=grado && i<=p.grado) {
      somma.coeff[i] = coeff[i] + p.coeff[i];
      i++;
     }
     while(i<=grado) {
      somma.coeff[i] = coeff[i];
      i++;
     }
     while(i<=p.grado) {
      somma.coeff[i] = p.coeff[i];
      i++;
     }
     return somma;
    }
    
    public Polinomio sottrai(Polinomio p) {
     return somma(p.perCostante(-1));
    }
    
    public int valuta(int x) {
     int val = 0;
     for(int i=0; i<=grado; i++)
      val += coeff[i]*Math.pow(x,i);
     return val;
    }
    
    public boolean eRadice (int x) {
     return (valuta(x) == 0);
    }
    
    public static Polinomio leggi(Scanner input) {
     int g;
     do {
      System.out.print("Grado del polinomio: ");
      g = input.nextInt();
      if(g < 0)
       System.out.println("Il grado di un polinomio non pu� essere un numero negativo!!!");
     } while(g < 0);
     Polinomio pol = new Polinomio(g);
     System.out.println("Inserisci i coefficienti del polinomio per grado decrescente. ");
     for (int i=g; i>=0; i--) {
      System.out.print("Grado " + i + ": ");
      pol.coeff[i] = input.nextInt();
      }
     return pol;
    }
    
}
///////////////////////////////////////
// FINE   file Polinomio.java
///////////////////////////////////////


///////////////////////////////////////
// INIZIO file OperazioniPolinomi.java
///////////////////////////////////////
import java.util.Scanner;

public class OperazioniPolinomi {
    
    public static void main(String[] args) {
     Scanner input = new Scanner(System.in);
     Polinomio p1 = Polinomio.leggi(input);
     System.out.println("Il polinomio inserito �: " + p1);
     Polinomio p2 = Polinomio.leggi(input);
     System.out.println("Il polinomio inserito �: " + p2);
     
     if(p1.equals(p2))
         System.out.println("I due polinomi sono uguali");
     else
         System.out.println("I due polinomi sono diversi");

      Polinomio p3 = p1.somma(p2);
     System.out.println("Il polinomio risultante dalla loro somma �: " + p3);

      Polinomio p4 = p1.sottrai(p2);
     System.out.println("Il polinomio risultante dalla loro differenza �: " + p4);
     
     System.out.println("Inserisci un valore intero per l'incognita x:");
     int x = input.nextInt();
     System.out.println("Il valore del primo polinomio per x=" + x + " �: " + p1.valuta(x));
     
     System.out.println("Inserisci un intervallo in cui cercare eventuali radici (intere) del primo polinomio:");
     System.out.print("Estremo iniziale: ");
     int inizio = input.nextInt();
     System.out.print("Estremo finale: ");
     int fine = input.nextInt();
     boolean esisteRadice = false;
     for(int i=inizio; i<=fine; i++)
      if(p1.eRadice(i)){
       System.out.println("L'intero " + i + " � una radice del polinomio " + p1);
       esisteRadice = true;
      }
     if(!esisteRadice)
   System.out.println("Nessuna radice (intera) nell'intervallo considerato");

    }
    
}
///////////////////////////////////////
// FINE   file OperazioniPolinomi.java
///////////////////////////////////////

fonte: https://www.mat.unical.it/calimeri/wiki/InformaticaCDLmatematica?action=AttachFile&do=get&target=20100108-Classi-Polinomio.txt

Commenti

Post popolari in questo blog

Simulazioni di reti (con Cisco Packet Tracer)

Esercizi sulla rappresentazione della virgola mobile IEEE 754 (Floating Point)