giovedì 12 febbraio 2015

Modifica di un file di testo iscritto in C attraverso dalla line di commando DOS

/*Il programma sviluppata in C  Usando la line di comando ( argc e argv)
Il primo parametro argc di tipo int `e il contatore del numero di “argomenti” o “opzioni” passati al programma quando questo viene invocato sia dalla linea di comando che da un altro programma. Questi argomenti sono chiamati argomenti di linea (command line arguments) perch´e sono dati di seguito al nome dell’eseguibile del programma sulla stessa linea di comando. Il secondo parametro argv `e un array di puntatori a stringhe contenenti gli argomenti di linea passati al programma. La prima stringa argv[0] contiene il nome del programma o, se questo non `e disponibile, la stringa vuota.*/
---------------------------------------------------------------------------------------------------------------
Il contiene la stringa --> sotto quando viene esecuito dalla line di comando la stringa dovrebbe essere trasformata quello indica in basso con colori bule .

QUEL RAMO del lago di Como, che volge a mezzogiorno, tra due CATENE non interrotte di MONTI, tutto a seni e a golfi, a seconda dello sporgere E DEL RIENTRARE di quelli, vien, quasi

scambia TESTO.TXT MODIF.TXT ae
 ed il file TESTO.TXT
 contenesse i seguenti dati:
allora il programma dovrebbe produrre il seguente file MODIF.TXT perché dovrebbe sostituire tutte le lettere A (a) con E (e) e tutte le lettere E (e) con A (a):

QUAL REMO dal lego di Como, cha volga e mazzogiorno, tre dua CETANA non intarrotta di MONTI, tutto e sani a e golfi, e saconde dallo sporgara A DAL RIANTRERE di qualli, vian, quesi

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
using namespace std;
int main( int argc, char *argv[] )
{
const int MAX=200; /* Variabile costante di ti po intero dimensione MAX=200 per che indica
il massimo di numero di carattere di usare*/
char frase[200+1];// array di caratteri con dimensione 200+1
char c[200+1];  // secondo array di caratteri dimensione 200+1 che raccoglia il contenuto
//di senconda file chiamata modif

FILE *scambia; // apri il canale di file di scambia
FILE*modif;    // la seconda canale se modif che contine stringa modificata

        if ( argc != 2 && argc != 3 )
{
printf("ERRORE di parametri\n") ;
exit(1) ;
}
 /* apertura del file  in modalita lettura*/
scambia= fopen(argv[1], "r") ;

if (scambia==NULL ) // nel caso dalla mancanza di parametri stampa ERRORI
{
printf("impossibile aprire il file %s\n", argv[1]) ;
exit(1) ;
}
if (argc==2) // Se il argc ugule a 2 procede
{
/*La funzione fgets ha tre argomenti: il primo è un vettore di
caratteri in cui va memorizzata la linea del file di testo;
il secondo è il numero massimo di caratteri che si vogliono
mettere in questa stringa; il terzo è un descrittore di file,
 e indica da quale file si vuole leggere la stringa*/

while ( fgets(frase,MAX,scambia)!= NULL)

{
           
/* ciclo iterazione for per fare scorrere la stringa
usand la funzione La funzione strlen() calcola la lunghezza della stringa frase,
(inteso come il numero di caratteri dell'array puntato da frase*/  
           
        for(int i=0;i<strlen(frase);i++)

{
/* if concatenata per controlli l' indice di for se la stringa
 contine caratteri miuscola e maiuscol(A-a)(e-E) scambiarle tra di loro*/
if(frase[i]=='a')
frase[i]='e';
else if(frase[i]=='A')
frase[i]='E';
else if(frase[i]=='e')
frase[i]='a';
else if(frase[i]=='E')
frase[i]='A';

   }
 printf("%s\n",frase);
// una volta che elaborato la stringa, aper il secondo file per copiarle
     {
             modif=fopen("modif.txt","w"); // apre il secondo file in modalita scrittura
                     fscanf(modif,"%s\t",c); /*Le funzioni fscanf() e fprintf() vengono utilizzate per la
lettura e la scrittura su file. Il loro comportamento
                                              è lo stesso delle funzioni scanf() */
                       fprintf(modif,"%s ",frase);
                          fclose(modif);  // chiusura dal primo file
                           // printf("%s",frase); // stampa la stringa elaborata
                              fclose(scambia); // chiusura dal secondo FILE
  }
          }
                       system("pause");
}
}

La modifica di un file di testo in C

/*Si desidera sviluppare un programma in linguaggio C per la modifica di un file di testo. La modifica consiste nel sostituire – scambiandoli tra loro – due caratteri alfabetici dati. In particolare, tutte le occorrenze del primo carattere dovranno essere sostituite dal secondo e viceversa. La sostituzione deve avvenire mantenendo la forma (maiuscola o minuscola) della lettera originaria. Il programma riceve sulla linea di comando tre parametri: il nome del file di testo da elaborare, il nome di un secondo file di testo nel quale salvare il risultato ed una stringa di 2 caratteri che specifica i caratteri da scambiare.
*/



#include<stdlib.h>
#include<stdio.h>
#include <string.h>


int main() /* Difinizione dal Faile
Un file e un insieme di dati omogenee,memmorizzata in modo permanente su
memoria di massa in modo equenziale */
{
  FILE *scambia; //  puntatore al PRIMO file canale (il FILE originale dove contiena le frase)
  FILE*seco;     // il secondo FILE dove viene salvato le frase una volta modificata
  const int MAX=200;  /* Variabile costante di ti po intero dimensione MAX=200 per che indica
                       il massimo di numero di carattere di usare*/
  char frase[200+1];    // array di caratteri con dimensione 200
  char c[200+1];
     /* secondo array di caratteri dimensione 200+1 che raccoglia
  salva il contenuto di secondo FILE una volta modificata*/




/* apre il file da leggere (L'apertura di un file viene realizzata mediante la
funzione fopen */
  if(!(scambia=fopen("primo.txt","r")))

      {    
         printf("Errore in apertura del file da leggere");
         exit(1);  // nel caso di errori di apertura
            }
/*La funzione fgets ha tre argomenti: il primo è un vettore di
 caratteri in cui va memorizzata la linea del file di testo;
il secondo è il numero massimo di caratteri che si vogliono
mettere in questa stringa; il terzo è un descrittore di file,
 e indica da quale file si vuole leggere la stringa*/      
       while ( fgets(frase,MAX,scambia)!= NULL )

{
/* ciclo iterazione for per fare scorrere la stringa
  usand la funzione La funzione strlen() calcola la lunghezza della stringa frase,
(inteso come il numero di caratteri dell'array puntato da frase*/

    for(int i=0;i<strlen(frase);i++)

    {
/* if concatenata per controlli l' indice di for se la stringa
 contine caratteri miuscola e maiuscol(A-a)(e-E) scambiarle tra di loro*/
  if(frase[i]=='a')
      frase[i]='e';
  else if(frase[i]=='A')
      frase[i]='E';
  else if(frase[i]=='e')
      frase[i]='a';
  else if(frase[i]=='E')
      frase[i]='A';
        }
            seco=fopen("secondo.txt","w"); // apre il secondo file in modalita scrittura
                     fscanf(seco,"%s\t",c); /*Le funzioni fscanf() e fprintf() vengono utilizzate per la
lettura e la scrittura su file. Il loro comportamento
                                              è lo stesso delle funzioni scanf() */
                       fprintf(seco,"%s ",frase);
                          fclose(seco);  // chiusura dal primo file
                            printf("%s",frase); // stampa la stringa elaborata
                              fclose(scambia); // chiusura dal secondo FILE
 
                               }

                                 }

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;
          }