Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [Java] Interazione tra classi

    Ciao a tutti, vorrei chiedervi aiuto su un esercizio che non riesco a risolvere. Devo pregettare una classe che implementa Polinomi, e fin qui nulla di difficoltoso.. Essendo per definizione un tipo di dato immutabile, rappresento il polinomio come un vettore di interi.

    per chiarezzaecco una parte della classe e il costruttore:

    codice:
    private int[] termini;
    private int grado;
    
    public Poly (int c, int n) throws NegativeExponentException{
    	// POST:if n<0 solleva l'eccezione NegativeExponentException
    	// altrimenti inizializza this al polinomio cx^n
    	if (n<0) throw new NegativeExponentException("Poly(int,int) constructor");
    	if (c==0){termini=new int[1];grado=0;return;}
    	termini=new int[n+1];
    	for (int i=0;i<n;i++) termini[i]=0;
    	termini[n]=c;grado=n;
     }
    Il mio problema è questo: il coefficiente nel mio caso non deve essere un intero, ma un tipo di dato Razionale , precedentemente implementato in un'altra classe (che ha due campi privati interi, numeratore e denominatore) e il prototipo del mio costruttore deve essere

    codice:
    public Poly (Razionale r, int n)

    Non riesco a capire come posso ad esempio fare il testo sul Razionale nullo, non accedendo ai campi privati.. e come andare successivamente a memorizzare il razionale nel vettore di interi. Non posso fare un cast in quanto int e razionale non sono nella stessa gerarchia, e non posso modificare la classe Razionale; allo stessomodo non ha senso creare un vettore di Razionali per memorizzare il polinomio....

    Come fare? Grazie a chi mi risponderà!
    Altro non ci apparìa che il cielo e l'onda Quando il Saturnio sul veloce legno Sospese in alto una cerulea nube
    Sotto cui tutte intenebrarsi l'acque

  2. #2
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Non c'è alcun problema, se non quello che devi prendere il tuo Poly(int, int) e buttarlo via: dimenticati della sua esistenza e lavora su Poly(Rational r, int n):

    immagino che tra i vari metodi della classe Rational ci saranno anche quelli per fare vari controlli... tipo se un Razionale è 0, oppure se è maggiore e/o minore di un altro etc etc, quindi usa i metodi di Rational...
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  3. #3
    Ciao grazie mille per aver risposto..

    tra i metodi della classe Razionale c'è quello che fa il test di uguaglianza (prot: boolean equals (razionale r) ) e di minoranza ( prot: boolean lessorequal (razionale r)) .. niente che verifichi se il razionale è 0 (solo all'atto della creazione del razionale verifico se il denomiatore è 0).. ma francamente non riesco a capire come questi metodi possano essermi di aiuto con i miei polinormi...
    Altro non ci apparìa che il cielo e l'onda Quando il Saturnio sul veloce legno Sospese in alto una cerulea nube
    Sotto cui tutte intenebrarsi l'acque

  4. #4
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    immagino che comunque tu possa accedere tramite getNumeratore e getDenominatore ai due campi numerici del tuo Rational... un razionale è 0 se il numeratore è 0.
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  5. #5
    No, non ho metodi che me lo consentono.. stavo pensando di memorizzare il polinomio in un vettore di object anziché di int, e di trasformare gli int in integer... ma non saprei lo stesso come verificare se un razionale è 0 : una cosa del tipo
    if (r == 0) ...non la posso scrivere poiché r è un tipo di dato astratto.. e soprattutto non so come fare a memorizzare il coefficiente razionale nel vettore del polinomio.
    sono davvero in alto mare.

    Grazie per aver risposto
    Altro non ci apparìa che il cielo e l'onda Quando il Saturnio sul veloce legno Sospese in alto una cerulea nube
    Sotto cui tutte intenebrarsi l'acque

  6. #6
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    posta l'intera classe Rational
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  7. #7
    Ok..

    eccola

    codice:
     class Razionale 
     {
       /* Classe che implementa il tipo di dato razionale */
       private int num;    private int den;
    
    
      /* Costruttore1 di Razionale, a partire da 2 interi */
         public Razionale (int a, int b) 
       {
         if (b == 0){
             System.out.println("Denominatore Nullo! Errore fatale\n"); 
             System.exit(1);}
         int div = Mate.mcd(a,b);
         a=a/div; 
         b=b/div;
         if (b<0) {num = -a; den = -b;}
         else {num = a; den = b;}
        
       }
     
     
     
     /* Costruttore2 di Razionale, a partire da 1 intero */
    
       public Razionale (int a) 
        {
    	   num = a; den = 1;
        }
    
    
    // operazioni sui razionali
       public Razionale somma(Razionale r)  {... }
       public Razionale diff(Razionale r)  {... }
       public Razionale molt(Razionale r)  {... }
       public Razionale div (Razionale r)  {... }
    
    public boolean equals (Razionale r)
      {
        return ( (num == r.num) && (den == r.den) );
      }
    
     
    
    public boolean lessOrEqual (Razionale r)
      {
        float div1 =  (float) num / den;
        float div2 = (float) r.num / r.den;
        return (div1 <= div2);
    
      }
    l'idea del vettore di object per memorizzare il polinomio potrebbe andare?

    Grazie
    Altro non ci apparìa che il cielo e l'onda Quando il Saturnio sul veloce legno Sospese in alto una cerulea nube
    Sotto cui tutte intenebrarsi l'acque

  8. #8
    Ah, c'è anche la toString ovviamente..
    Altro non ci apparìa che il cielo e l'onda Quando il Saturnio sul veloce legno Sospese in alto una cerulea nube
    Sotto cui tutte intenebrarsi l'acque

  9. #9
    Utente di HTML.it
    Registrato dal
    Aug 2002
    Messaggi
    8,013
    Personalmente, un polinomio per me è un vettore di coefficienti

    a0 + a1*x + a2*x^2... + an*x^n

    Quindi lo andrei a rappresentare con un array di Razionale.

    Ossia, avrei un costruttore Poly:

    codice:
    public Poly(Razionale[] r) {
      //r è un array di n+1 elementi, dove n è il grado massimo del polinomio
    }
    poi puoi fare tutti i metodi accessori che vuoi (per esempio, dato il grado di un monomio, ritornare il Razionale coefficiente del tale monomio)

    Per quanto riguarda il verificare se un Razionale è zero, visto che quella classe non è tanto user-friendly, puoi inventarti questo:
    codice:
    Razionale zero = new Razionale(0,1);
    
    if (zero.lessOrEqual(tuoRazionale) && tuoRazionale.lessOrEqual(zero)) { // è 0
    }
    <´¯)(¯`¤._)(¯`»ANDREA«´¯)(_.¤´¯)(¯`>
    "The answer to your question is: welcome to tomorrow"

  10. #10
    Grazie ancora per aver risposto.. forse la cosa migliore è rappresentare il polinomio come un vettori di Razionali.. come hai giustamente sottolineato tu.. peril testo sullo 0, anche io mi sono scritta una cosa del tipo:

    codice:
    Poly (Razionale r, int n) {
    ....
    Razionale rTest = new Razionale (0);
    if (rTest.equal(r) == true ) {...}
    ..
    }
    Purtroppo il prototipo del costruttore non lo posso modificare, ma tenterò cmq di rappresentare il polinomio come vettore di Razionali, usando quindi una var private

    private Razionale [] termini;

    Spero davvero che funzioni...

    Grazie mille per l'aiuto
    Altro non ci apparìa che il cielo e l'onda Quando il Saturnio sul veloce legno Sospese in alto una cerulea nube
    Sotto cui tutte intenebrarsi l'acque

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.