lunedì 24 novembre 2014

Uso dell'operatore new in Java

//Uso dell'operatore new in Java
// Esercizio di Lab 5 
 // Prima parte

 public class New {
   
    // Dati membrao ottenuto dal primo Pradigma OOP
    private int a;
    private int b;
    private int c;
    private int d;
    private String f; // f e ti tipo calsse chiamato stringa
    private double e;
    private boolean g;
    // Elenco Funzione Membro Setter e Getter
public void set_a(int a) // prametro
  {
    this.a=a;   // puntatore this
   
    // procedure
}
public void set_b(int b)
  {
    this.b=b;
}
public void set_c(int c)
   {
    this.c=c;
}

public void set_d(int d)
{
    this.d=d;
  }
 public void set_e(double e)

 {
this. e=e;   
 }
public void set_f(String f )
{
    this.f=f;

}
public void set_g(boolean g)
{
    this.g=g;
}

public double get_e()
{
  return this. e;

  }

public String get_f()
{

 return this. f;

  }
public boolean get_g()
{
 return this. g;

  }

 int get_a()
{

return this. a;

  }   
public int get_b()
{
  return this . b;

  }

public int get_c()
{

 return this. c;

  }
public int get_d()
{
 return this. d;

  }
public static void main(String[] args)
{
    System.out.println("Il programma diterminato");
   
    }
}

//
//Uso dell'operatore new in Java
public class OperatoreNew
{ // classe
   

public static void main(String[] args)
{
        // TODO Auto-generated method stub
   
        New myobject;
        New myobject2;
        // Ho difinito un dato locale chiamata myobject di tipo calsse new
       
       
         myobject=new New ();
         myobject2=new New ();
                     // costruttore  dell edeficio
                     // allocati dei byte nello HEAP per una
                     // struttura dati complessa rappresentata
                     // dalla classe prima
   
// Perche ho dichiarato myobject di tipo calsse New?
       
          // Perche in questo modo conosce il medesimo progetto che l' operazione
          // New ha impegato per costruire l' edefficio in memoria HEAP
          // il progetto e evidentamente la calsse New
          // myobject e un dato locale !!!
          // Questo significa che si trova nell STACK

 myobject2=new New ();

           // Istanziare una classe sgnifica allocare lo spazio nell HEAP ed
           // accedervi tramite un variabile di riferimento. Questo variabile è
           // anche chiamato OGGETTO.
    myobject.set_a(23);
    myobject.set_b(33);
    myobject.set_c(43);
    myobject.set_d(53);
    myobject.set_e(0.55);
    myobject.set_f("Primo programmo");
    myobject.set_g(true);

        myobject2.set_a(123);
        myobject2.set_b(133);
        myobject2.set_c(143);
        myobject2.set_d(153);
        myobject2.set_e(3.55);
        myobject2.set_f("secondo object");
        myobject2.set_g(false);
   
           System.out.println("Il dato membero a di object vale :"+myobject.get_a());
             System.out.println("Il dato membero b di object vale :"+myobject.get_b());
               System.out.println("Il dato membero c di object vale :"+myobject.get_c());
                  System.out.println("Il dato membero d di object vale :"+myobject.get_d());
                    System.out.println("Il dato membero e di object vale :"+myobject.get_e());
                     System.out.println("Il dato membero f di object vale :"+myobject.get_f());
                       System.out.println("Il dato membero g di object vale :"+myobject.get_g());

           System.out.println("Il dato membero a di object2 vale :"+myobject2.get_a());
             System.out.println("Il dato membero b di objec2t vale :"+myobject2.get_b());
               System.out.println("Il dato membero c di object2 vale :"+myobject2.get_c());
                 System.out.println("Il dato membero d di object2 vale :"+myobject2.get_d());
                  System.out.println("Il dato membero e di object2 vale :"+myobject2.get_e());
                    System.out.println("Il dato membero f di object2 vale :"+myobject2.get_f());
                     System.out.println("Il dato membero g di object2 vale :"+myobject2.get_g());
          }   

// stampa valore intero concatinazione
}

Associazione 1 a molti C++

Associazione 1 a molti C++
#include <iostream>

using namespace std;

class B // dichiarazione seconda classe
{
public:
    void stampa() // metodo per stampa
    {
        cout<<"Benvenuto nella class B"<<endl;
    }
};

class A // dichiarazione prima classe
{
public:
   B* ruoloB; // puntatore alla seconda classe (B)
public:
    A(B* linkato){  //
    ruoloB=linkato;
    }
};

int main()
{
    B b; // creazione di un oggetto di classe B , con nome b
A a(&b); // creazione di un oggetto di classe A , con nome a con parametro l'indirizzo di b
a.ruoloB->stampa(); // stampa attraverso la classe A di "stampa" in classe B
};

martedì 11 novembre 2014

Funzione Virtuale

Funzioni virtuali
Le funzioni virtuali sono funzioni associate al tipo attuale di oggetto disponibile permettendo la chiamata in tempo di esecuzione e costituiscono il meccanismo utilizzato dal C++ per ottenere il polimorfismo. Per dichiarare una funzione come virtuale si mette la parola chiave virtual prima del nome nella dichiarazione della classe base (o anche di ogni figlia, ma non è necessario):
virtual  type Nome_Funzione ( elenco parametri );

Un esempio di codice :

#include <iostream>
using namespace std;
class Padre
{
public:
      virtual void Stampa();
      {
        cout<<"Io sono il Padre"<<endl;

      };


};
class Figlio:public Padre
  {

   void Stampa();
   {
         cout<<"Io sono il Figlio"<<endl;

        };
         };
int main()
{
      Padre*p; // dichiarazione di un puntatore di tipo padre
         p=newPadre; //associa il puntatore ad un area di memoria di tipo padre
          p->Stampa();
           (*p)Stampa();
       //sara utilizzato quello della classe padre
     p=new Figlio; //

        p->Stampa();
           return 0;
             }
// end of main

lunedì 3 novembre 2014

Classe Calcolatrice

Programmo sviluppato con la collaborazione della Classe
  Nel dettaglio sviluppo del metodo "+=" e "-=":

#include <iostream>

using namespace std;

class Frazione{   //classe Frazione
    public:   //metodi pubblici
        Frazione();   //costruttore senza passaggio di parametri
        Frazione(int a,int b);   //costruttore con passaggio di due parametri di tipo intero per valore
        Frazione(int c);   //costruttore con passaggio di un parametro di tipo intero per valore
        void inserimento();   //metodo per l'inserimento dei dati num e den
        void visualizza();   //metodo per la visualizzazione dei dati inseriti
        void aggiorna();   //metodo per aggiornare i dati inseriti
            Frazione operator +(Frazione a);
            Frazione operator -(Frazione a);
            Frazione operator *(Frazione a);
            Frazione operator /(Frazione a);
            void operator += (Frazione a);
    void operator -= (Frazione a);

    bool operator >(Frazione); //prototipo
   bool operator <(Frazione); //prototipo
   bool operator !=(Frazione a);
        int num;   //dichiarazione di una variabile di tipo intera
        int den;   //dichiarazione di una variabile di tipo intera

    };

Frazione::Frazione()   //costruttore senza passaggio di parametri
    {
    num=1;
    den=1;
    };

Frazione::Frazione(int a, int b)   //costruttore con passaggio di parametri dove passo i valori dal main alle variabili a e b per valore
    {
    num=a;   //associo il contenuto puntato da a alla variabile num
    den=b;   //associo il contenuto puntato da b alla variabile den
    };

Frazione::Frazione(int c)   //costruttore con passaggio di parametri dove passo i valori dal main alla variabile c per valore
    {
    num=c;
    den=1;   //trattandosi di un intero dichiaro il denominatore uguale a 1
    };


void Frazione::inserimento()   //metodo per l'inserimento dei dati
    {
        cout<<"Inserisci il numeratore: "<<endl;
        cin>>num;
        do
        {
            cout<<"Inserisci il denominatore: "<<endl;
            cin>>den;
            if(den==0)   //se il denominatore e' uguale a 0 non accetto i dati inseriti e richiedo di ripetere l'inserimento
                cout<<"Il denominatore deve essere diverso da '0'"<<endl;
        }while(den==0);
    };

void Frazione::aggiorna()   //metodo per l'inserimento dei dati
    {
        cout<<"Inserisci il numeratore: "<<endl;
        cin>>num;
        do
        {
            cout<<"Inserisci il denominatore: "<<endl;
            cin>>den;
            if(den==0)   //se il denominatore e' uguale a 0 non accetto i dati inseriti e richiedo di ripetere l'inserimento
                cout<<"Il denominatore deve essere diverso da '0'"<<endl;
        }while(den==0);
    };

void Frazione::visualizza()   //metodo per visualizzare i dati inseriti
    {
        if(den!=1)   //se a denominatre c'è un valore diverso da uno allora è una frzione e visualizzo num/den
            cout<<"La frazione inserita e': "<<num<< "/" <<den<<endl;
        else   //altrimenti è un intero e visualizzo solo num
            cout<<"La frazione inserita e': "<<num<<endl;
    };

Frazione Frazione :: operator +(Frazione a)
      {
 Frazione b;
             b.den= this->den*a.den;
             b.num= (this->den*a.num)+(this->num*a.den);
             //b.Semplifica();
           return b;

 };
  Frazione Frazione :: operator -(Frazione a)
  {
  Frazione b;
             b.den= this->den*a.den;
             b.num= (this->den*a.num)-(this->num*a.den);
             //b.Semplifica();
           return b;
  };
  Frazione Frazione :: operator / (Frazione a)
  {
  Frazione b;

                b.den=this->den*a.num;
                b.num=this->num*a.den;
               // b.Semplifica();
                return b;
  };
      Frazione Frazione :: operator * (Frazione a)
      {
      Frazione b;

                b.den=this->den*a.den;
                b.num=this->num*a.num;
                //b.Semplifica();
                return b;

      };
void Frazione :: operator += (Frazione a)   //metodo per la somma tra frazioni con passaggio di oggetto a parametri (passeremo le due frazioni da sommare)
    {
        *this=a+*this;
    };
void Frazione :: operator -= (Frazione a)   //metodo per la somma tra frazioni con passaggio di oggetto a parametri (passeremo le due frazioni da sommare)
    {
        *this=a-*this;
        if(num==0)   //if per la visualizzazione del solo numeratore in caso di risultato uguale a 0
            {
                num=0;
                den=1;
            }
};

bool Frazione::operator >(Frazione a){

  bool ris=false;

  Frazione appoggio; //istanzio l'oggetto appoggio di classe frazione
  int fraz1=this->num*a.den;   // numeratore fraz1 * den fraz2
  int fraz2=this->den*a.num;   //numeratore fraz2 * den fraz1

  if(fraz1>fraz2)
      ris=true;

   return ris;

};
    bool Frazione::operator <(Frazione a){



    bool ris=false;

    Frazione appoggio;
    int fraz1=this->num*a.den;
    int fraz2=this->den*a.num;

     if(fraz1<fraz2)
      ris=true;

          return ris;


    };

bool Frazione::operator !=(Frazione a)
{
    bool x;
    if((a.num==num)&&(a.den==den))
    {
        x=0;
    }
    else
    {
        x=1;
    }
    return x;
}

main()
{
    int *scelta;
    int *modfraz;
    char mod;
    char *input;
    Frazione obj1;   //istanza oggetto obj1
    Frazione obj2;   //istanza oggetto obj2
    Frazione ris;
    cout<<"CALCOLATRICE PER FRAZIONI:"<<endl;
    scelta=new int;


        cout<<"Quale operazione vuoi eseguire? "<<endl;
        cout<<"1)Somma\n2)Sottrazione\n3)Moltiplicazione\n4)Divisione\n5)'+='\n6)'-='\n7)'>' o '<'\n8)'=' o '!='"<<endl;
        cout<<"Scegli 1-2-3-4-5-6-7-8: ";
        cin>>*scelta;
        cout<<endl;
        obj1.inserimento();   //metodo per inserimento in oggetto obj1
        obj2.inserimento();   //metodo per inserimento in oggetto obj2
        cout<<"Dati inseriti: "<<endl;
        obj1.visualizza();   //metodo per visualizzare dati inseriti in obj1
        obj2.visualizza();   //metodo per visualizzare dati inseriti in obj2
        Frazione risultato;   //istanza oggetto risultato

        input=new char;
        do
        {
            cout<<"Vuoi modificare i dati inseriti? (s/n)";
            cin>>*input;
        }while(((*input=='S')&&(*input=='s'))&&((*input!='n')&&(*input!='N')));
        if((*input=='s')||(*input=='S'))
        {
            modfraz=new int;
            do{
                cout<<endl<<"Quale frazione vuoi modificare? (1/2)";
                cin>>*modfraz;
                if(*modfraz==1)
                    obj1.aggiorna();
                else
                    if(*modfraz==2)
                        obj2.aggiorna();
                    else
                        cout<<endl<<"Scelta non valida"<<endl;
            }while((*modfraz!=1)&&(*modfraz!=2));
            delete modfraz;
        }
        else
            if((*input!='n')&&(*input!='N'))
                cout<<"Scelta non valida"<<endl;
        delete input;

        switch (*scelta)
            {
                case 1: ris=obj1+obj2;   //metodo per somma
                        ris.visualizza();
                        break;
                case 2: ris=obj1-obj2;   //metodo per somma
                        ris.visualizza();
                        break;
                case 3: ris=obj1*obj2;   //metodo per somma
                        ris.visualizza();
                        break;
                case 4: ris=obj1/obj2;   //metodo per somma
                        ris.visualizza();
                        break;
                case 5: obj1+=obj2;   //metodo per somma
                        obj1.visualizza();
                        break;
                case 6: obj1-=obj2;   //metodo per somma
                        obj1.visualizza();
                        break;

                case 7: bool ris;
                        if(ris=obj1>obj2)cout<<endl<<"La prima frazione e' maggiore della seconda"<<endl;
                        if(ris=obj1<obj2)cout<<endl<<"La prima frazione e' minore della seconda"<<endl;
                        break;
                case 8: bool x;
                        ris=obj1!=obj2;
                        if(x==0)
                            cout<<"Le due Frazioni sono uguali"<<endl;
                        else
                            cout<<"Le due frazioni sono diverse"<<endl;
                        break;
                }
        delete scelta;
}

giovedì 23 ottobre 2014

Esercizio:su Classe Frazione

Creare una Classe Frazione che esegua le operazioni di frazioni,aggiorna, e visualizza

# include<iostream>
using namespace std;

          class calcola {// classe calcola
   
        public://metodi pubblico
     

void input();//metodo per l'input dei dati N e D
void visualizza();//metodo ti tipo void per visualizza
void aggiorna();//metodo per aggiornare

int numeratore;//dichiarazione di una variabile di tipo intera
int denominatore;//dichiarazione di una variabile di tipo intera

    private: //proprietà private

};

void calcola::input() //costruttore senza passaggi
{
    float risultato; //dichiarazione di una variabile di tipo float
         cout<<"inserisci il numeratore"<<endl;
    do
    {    cin>>numeratore;
          if(numeratore==0)//controlla se N ==0
          {
         
          }
            }while(numeratore==0); //finche ==0 chiede l' input
               cout<<"inserisci il denominatore"<<endl;
               do
                {
                  cin>>denominatore;
                    if(denominatore==0) //controlla di D
                 { // se ==0
                     cout<<"il numero inserito e =0"<<endl;
                      cout<<"inserisci di nuovo"<<endl;//chieda un input
          }
                }while(denominatore==0);
                  risultato=(float)numeratore/denominatore;
                  //(float) e il casting = forza il risultato in float
                    cout<<"il risultato della divisione e "<<risultato<<endl<<endl;
                    }
 void calcola::visualizza()//metodo per visualizzare i numeri inseriti inseriti
    {
        if(denominatore!=1)
        //se nel denominatre c'è un valore diverso da uno allora è una frzione e visualizzo n/d
            cout<<"La Frazione Inserita e': "<<denominatore<< "/" <<numeratore<<endl;
        else   //altrimenti visualizzo solo N
            cout<<"La Frazione Inserita e': "<<denominatore<<endl;
    };
  
   void calcola::aggiorna()//metodo per aggiornare
     {
      float risultato;

           cout<<"inserisci il numeratore"<<endl;
     do
      {
          cin>>numeratore;
            if(numeratore==0)
   {
 
   }
     cout<<"il numero inserito e =0"<<endl;
       cout<<"inserisci di nuovo"<<endl;
 
         }while(numeratore==0);
           cout<<"inserisci il denominatore"<<endl;
    do
    {
            cin>>denominatore;
              if(denominatore==0)
                {
                  cout<<"il numero inserito e =0"<<endl;
                      cout<<"inserisci di nuovo"<<endl;
                } 
        }while(denominatore==0);
                risultato=(float)numeratore/denominatore;
                  cout<<"il risultato della divisione e "<<risultato<<endl<<endl;
}
int main()
{
char c; //dichiarazione di un variabile da tipo char
int ripeti=0;// dichirazione di un variabile intero
calcola d1;//Istanza oggetto d1
calcola n1;//Istanza oggetto n1
d1.input();
n1.input();

  cout<<"Numero inseriti: "<<endl;
        d1.visualizza();//metodo per input oggetto d1 
        n1.visualizza();//metodo per input oggetto n1
     do
        {
            cout<<"Per modificare i dati inseriti? [S|N]"<<endl;
            cin>>c;
            /*parte controllo se il carattere Inserito è
            miuscola o minuscola ? o diversa da quella richiesta*/
         }while(((c=='S')&&(c=='s'))&&((c!='n')&&(c!='N')));
        if((c=='s')||(c=='S'))
       
         {
            int d;//dichiarazione di un variabile di tipo intero
                 do{
                cout<<endl<<"Quale frazione vuoi modificare? [1/2]"<<endl;
                 cin>>d;
                if(d==1)// se ==1
                    d1.aggiorna();//aggiorna il den
                else
                    if(d==2)//se ==2
                        n1.aggiorna();//aggiorna il num
                    else
                        cout<<endl<<"Scelta Errata"<<endl;
                   
            }while((d!=1)&&(d!=2));    //se diverso output scelta non valida
                }
           {
           cout<<"vuoi ripetere l'operazione? si/1 no/0"<<endl;
             cin>>ripeti;
 
             } while(ripeti!=0);
 
             return 0;
          }

giovedì 16 ottobre 2014

L' istruzione typedef di un array di puntatore

EXERCISE:

Definire l'istruzione typedef di nome dipendente, creare un array di puntatore di elemente  dipendente con N scelto dall'utente.

Codice eseguibile:

#include <iostream>
using namespace std;
// Mohammad Rahime Esercizio 13/10/2014
typedef struct persona {/* con l' istruzion typedef possiamo gestire insiemi di dati non
omogenei e possiamo difinire anche un nuovo tipo ti dati int float ecc*/
                    char Nome[10];
                    char Cognome[10];
                    float Stipendio;
                       }dipendente;//creo un nuovo tipo di dato "dipendente"

dipendente *punta; // variabile di tipo puntatore dipendente
main()
{  
    int i=0; // indice i=0
    int dim; // dimensione non reale
    cout<<"Quanti dipendente vorresti calcolare?"<<endl;
    cin>>dim; // dimension scelta dal utente
    punta=new dipendente[dim];// crea un array a dimensione scelta dall' utente
   
        for(i=0;i<dim;i++)
         {
// acquisizione dai dati inseriti dal utente
            cout<<"Inserisci il Nome: ";
              cin>>punta[i].Nome;
                cout<<"Inserisci il Cognome: ";
                  cin>>punta[i].Cognome;
                    cout<<"Inserisci lo stupendio: ";
                      cin>>punta[i]. Stipendio;
                      }
                        for(int i=0;i<dim;i++)
                            {
        // per stampa i numeri delle persone che sono stati calcolati
    cout<<endl<<"Numero dalle persone scelta dal utente "<<i<<endl;
      //visualizzazioni dai dati inseriti dal utente
      
         cout<<"Nome:\n " << punta[i].Nome;  
           cout<<endl<<"Nome: " << punta[i].Cognome;  
            cout<<endl<<"Nome: " << punta[i]. Stipendio;  
              cout << endl << endl; //per tornare a capo
          }
            return 0;
               }

Le caratteristiche base dei puntatori

Le caratteristiche alla base dei puntatori,tracciato con " CMAP "