Cerca nel blog

mercoledì 22 ottobre 2014

Compito a casa operazioni con frazioni

#include<iostream>
using namespace std;
class Frazione{
            public:
                Frazione();
                ~Frazione();
                Frazione(int in);
                void visualizza();
                void aggiorna();
                int* num;
                int* den;
            private:
                int in;
            };
class Calcolatrice{
                public:
                    void somma(Frazione* b, int* dim);
                    void sottrazione(Frazione* b, int* dim);
                    void moltiplicazione(Frazione* b, int* dim);
                    void divisione(Frazione* b, int* dim);
                    void semplificazione(Frazione* b);
                  };
void Calcolatrice::semplificazione(Frazione *b)
{

    int* i;
    i= new int;
    int* dim;
    dim=new int;
    if(*b->num<*b->den)
    {
        *dim=*b->den;
    }
    else
    {
        *dim=*b->num;
    }
    for(*i=1;*i<*dim;*i=*i+1)
    {
        if((*b->num%*i==0)&&(*b->den%*i==0))
        {
            *b->num=*b->num/ *i;
            *b->den=*b->den/ *i;
        }
    }
    cout<<endl<<"frazione semplificata= "<<*b->num<<"/"<<*b->den;
}
void Calcolatrice::divisione(Frazione* b, int* dim)
{
    int i;
    i=0;
    Frazione* ris;
    ris=new Frazione(i);
    *ris->num=(*b[0].num * *b[1].den);
    *ris->den=(*b[0].den * *b[1].den);
    for(i=2;i<*dim;i++)
    {
        *ris->num=(*ris->num * *b[i].den);
        *ris->den=(*ris->den * *b[i].num);
    }
    cout<<"il risultato è="<<*ris->num<<"/"<<*ris->den;
    semplificazione(ris);
    delete ris;
}
void Calcolatrice::moltiplicazione(Frazione* b, int* dim)
{
    int i;
    i=0;
    Frazione* ris;
    ris=new Frazione(i);
    *ris->num=(*b[0].num * *b[1].num);
    *ris->den=(*b[0].den * *b[1].den);
    for(i=2;i<*dim;i++)
    {
        *ris->num=(*b[i].num * *ris->num);
        *ris->den=(*b[i].den * *ris->den);
    }
    cout<<"il risultato è="<<*ris->num<<"/"<<*ris->den;
    semplificazione(ris);
    delete ris;
}
void Calcolatrice:: sottrazione(Frazione* b, int* dim)
{
    int i;
    i=0;
    Frazione *ris;
    ris=new Frazione(i);
    //cout<<*dim<<b;
    *ris->num=((*b[0].num * *b[1].den)-(*b[1].num * *b[0].den));
    *ris->den=(*b[0].den * *b[1].den);
    for(i=2;i<*dim;i++)
    {
       *ris->num=(*ris->num * *b[i].den)-(*b[i].num * *ris->den);
       *ris->den=(*ris->den * *b[i].den);
    }
    cout<<"il risultato è="<<*ris->num<<"/"<<*ris->den;
    semplificazione(ris);
    delete ris;
}
Frazione::~Frazione()
{
    delete num;
    delete den;
}
void Calcolatrice::somma(Frazione* b, int* dim)
{
    int i;
    i=0;
    Frazione *ris;
    ris=new Frazione(i);
    //cout<<*dim<<b;
    *ris->num=((*b[0].num * *b[1].den)+(*b[1].num * *b[0].den));
    *ris->den=(*b[0].den * *b[1].den);
    for(i=2;i<*dim;i++)
    {
       *ris->num=(*ris->num * *b[i].den)+(*b[i].num * *ris->den);
       *ris->den=(*ris->den * *b[i].den);
    }
    cout<<"il risultato è="<<*ris->num<<"/"<<*ris->den;
    semplificazione(ris);
    delete ris;
    //return 0;
}
Frazione::Frazione(int in)
{
    num=new int;
    den=new int;
    *num=in;
    *den=in;
}
Frazione::Frazione ()
{
    num=new int;
    den=new int;
    cout<<"inserire il numeratore: ";
    cin>>*num;
    cout<<"inserire il denoinatore: ";
    cin>>*den;
}
void Frazione::visualizza()
{
    char*scelta;
    scelta=new char;
    cout<<"la frazione inserita è: "<<*num<<"/"<<*den<<" ";
   /* cout<<"si vuole modificare un elemento della frazione?";
    cin>>*scelta;
    if(*scelta=='s')
        aggiorna();*/
}
void Frazione::aggiorna()
{
    char*scelta;
    char* c;
    c=new char;
    scelta=new char;
    cout<<endl<<"si desidera cambiare un elemento?s-n";
    cin>>*c;
    while(*c=='s')
    {
    cout<<"Si desidera cambiare il numeratore(n) o il denominatore (d)? ";
    cin>>*scelta;
    if(*scelta=='n')
    {
        cout<<"inserisci il numeratore: ";
        cin>>*num;
    }
    else
    {
        cout<<"inserisci il denominatore: ";
        cin>>*den;
    }
    visualizza();
    cout<<endl<<"si desidera cambiare un altro elemento?s-n ";
    cin>>*c;
    }
    *c='n';
    delete scelta;
    delete c;
}
main()
{
    int* dim;
    int *i;
    char *oper;
    oper=new char;
    dim=new int;
    i=new int;
    cout<<"quante frazioni vuoi inserire?";
    cin>>*dim;
    Frazione* a;
    a=new Frazione[*dim];
    //cout<<endl<<a;
    for(*i=0;*i<*dim;*i=*i+1)
    {
        a[*i].visualizza();
        a[*i].aggiorna();
    }
    cout<<"quale operazione si vuole eseguire?(+ - x /)";
    cin>>*oper;
    Calcolatrice* calc;
    calc= new Calcolatrice;
    switch(*oper)
    {
        case '+': calc->somma( a, dim);
                    break;
        case '-': calc->sottrazione(a, dim);
                    break;
        case 'x': calc->moltiplicazione(a, dim);
                    break;
        case '/': calc->divisione(a, dim);
                    break;
    }
    //cout<<"fine programma";
    delete []  a;
   // a.visualizza();
    //a.aggiorna();
}

martedì 14 ottobre 2014

Compito a casa

#include<iostream>
using namespace std;
typedef struct persona{
                            char nome [15];
                            char cognome[15];
                            float stipendio;
                      }dipendente;
main()
{
    dipendente *a;
    a=new dipendente;
    cout<<"inserire nome: ";
    cin>>a->nome;
    cout<<endl<<"inserire cognome: ";
    cin>>(*a).cognome;
    cout<<endl<<"inserire lo stipendio: ";
    cin>>a->stipendio;

    cout<<endl<<"dati inseriti";
    cout<<endl<<"nome: "<<a->nome;
    cout<<endl<<"cognome: "<<a->cognome;
    cout<<endl<<"stipendio: "<<a->stipendio;
    delete a;
}

Puntatori: array e struct

#include<iostream>
using namespace std;
typedef struct Punto{
                        int ascissa;
                        int ordinata;
                    }punto;
main()
{
    int i, dim;
    cout<<"inserire a dimensione";
    cin>>dim;
    int *a;
    a=new int[dim];
    for(i=0;i<dim;i++)
    {
        //a[i]=i; metodo di assegnazione più semplice
        *(a+i)=i;
    }
    for(i=0;i<dim;i++)
    {
        cout<<a[i]<<" ";
    }
    delete a; //liberiamo la memoria
    cout<<endl;
    punto*insieme;
    insieme= new punto[10];
    for(i=0;i<10;i++)
    {
        insieme[i].ascissa=i; //notazione puntata per raggiungere i singoli campi
        insieme[i].ordinata=i+1;
    }
    for(i=0;i<10;i++)
    {
        cout<<"ascissa: "<<insieme[i].ascissa<<" ";
        cout<<"ordinata: "<<insieme[i].ordinata;
        cout<<endl;
    }
}
in questo esempio notiamo che la new può essere usata per creare array e array di struct. questo è rso possibile dai puntatori poichè la new crea 10 indirizzi contigui e restituisce al puntatore quello di partenza. Per riempire l' array il compilatore somma all' indirizzo di partenza l' indice( *(a+i)=i ), così si posiziona nell area di memoria da riempire con il valore. lo stesso procedimento viene effettuato per l' array di struct. 

Puntatori: new e delete

La funzione new ha due scopi il primo trovare un indirizzo vailido da asseganare al puntatore la seconda è restituirlo al puntatore; gli indirizzi validi sono contenuti nell' heap, è molto importante poichè se non viene usato un indirizzo valido c' è il rischio di sovrascrivere aree di memoria utilizzate da altri programmi ( compreso il sistema operativo) portanto ad errori che possono anche bloccare l' intero sistema, l' heap ha un limitato numero di indirizzi e nel caso finiscano si incorre nell' overflow, per evitare quest' ultimo alla new,che crea, è associata la delete che libererà l' area di memoria.
es:
main()
{
        int*p;
        cout<<p;
        p= new int;
        cout<<p;
        delete p;
}
provand ad eseguire l' esempio si noterà che l' indirizzo contenuto in p dopo la new sarà diverso dal primo.

mercoledì 8 ottobre 2014

Compito a casa

# include <iostream>
using namespace std;

class persona{
public:
        persona();//il costruttore vine messo di default
        void visualizza();
        void aggiorna();
private:
    char nome[15];
    char cognome[15];
    char data[15];
    char citta[15];

};
class studente:public persona{
    public:
        studente();//il costruttore vine messo di default
        void visualizza1();
        void aggiorna1();
    private:
        char classe[15];
        char sezione[15];
        char indirizzo[15];
};


class dipendente:public persona{
    public:
        dipendente();//il costruttore vine messo di default
        void visualizza2();
        void aggiorna2();
    private:
    char mansione[15];
    char stipendio[15];
};
persona::persona()
{
    cout<<" Inserire i dati"<<endl;
    cout<<"inserire nome: ";
    cin>>nome;
    cout<<endl<<"inserire cognome: ";
    cin>>cognome;
    cout<<endl<<"inserire data di nascita: ";
    cin>>data;
    cout<<"inserisci città: ";
    cin>>citta;
    cout<<endl;
}
studente::studente()
{
    cout<<"inserire la classe: ";
    cin>>classe;
    cout<<endl<<"inserire la sezione: ";
    cin>>sezione;
    cout<<endl<<"inserire l' indirizzo: ";
    cin>>indirizzo;
    cout<<endl;
}
dipendente::dipendente()
{
    cout<<"inserire la mansione: ";
    cin>>mansione;
    cout<<endl<<"inserire lo stipendio: ";
    cin>>stipendio;
    cout<<endl;
}
void persona::visualizza()
{
    cout<<"questi sono i dati inseriti"<<endl;
    cout<<"nome: "<<nome<<endl;
    cout<<"cognome: "<<cognome<<endl;
    cout<<"data di nascita: "<<data<<endl;
    cout<<"citta: "<<citta<<endl;
}
void studente::visualizza1()
{
    cout<<"classe: "<<classe<<endl;
    cout<<"sezione: "<<sezione<<endl;
    cout<<"indirizzo: "<<indirizzo<<endl;
}
void dipendente::visualizza2()
{
    cout<<"mansione: "<<mansione<<endl;
    cout<<"stipendio: "<<stipendio<<endl;
}
void persona::aggiorna()
{
    char a;
    char x;
    do
    {
    cout<<"quali campi si desidera modificare? n nome, c cognome, d data di nascita,r citta,"<<endl;
    cin>>a;
    switch(a)
    {
        case 'n': cout<<"inserire nuovo nome: ";
                  cin>>nome;
                  break;
        case 'c': cout<<endl<<"inserire nuovo cognome: ";
                  cin>>cognome;
                  break;
        case 'd': cout<<endl<<"inserire nuova data di nasscita: ";
                  cin>>data;
                  break;
        case 'r': cout<<endl<<"inserire nuova citta: ";
                  cin>>citta;
                  break;
    }
    cout<<"vuoi modificare altri campi? s si, n no";
    cin>>x;
    }while(x=='s');
}
void studente::aggiorna1()
{
    char a;
    char x;
    do
    {
    cout<<"quali campi si desidera modificare? c classe, s sezione,i indirizzo,"<<endl;
    cin>>a;
    switch(a)
    {
        case 'i': cout<<"inserire nuovo indirizzo: ";
                  cin>>indirizzo;
                  break;
        case 'c': cout<<endl<<"inserire nuovo classe: ";
                  cin>>classe;
                  break;
        case 's': cout<<endl<<"inserire nuova sezione: ";
                  cin>>sezione;
                  break;
    }
    cout<<"vuoi modificare altri campi? s si, n no";
    cin>>x;
    }while(x=='s');
}
void dipendente::aggiorna2()
{
    char a;
    char x;
    do
    {
    cout<<"quali campi si desidera modificare? m mansione, s stipedio"<<endl;
    cin>>a;
    switch(a)
    {
        case 'm': cout<<"inserire nuova mansione: ";
                  cin>>mansione;
                  break;
        case 's': cout<<endl<<"inserire nuova stipendio: ";
                  cin>>stipendio;
                  break;
    }
    cout<<"vuoi modificare altri campi? s si, n no";
    cin>>x;
    }while(x=='s');
}

main()
{

    char scelta;
    char x,y;
    cout<<"vuoi inserire uno studente (s) o un dipendente (d)?";
    cin>>scelta;
    if(scelta=='s')
    {
        //persona p;
        studente s;
        s.visualizza();
        s.visualizza1();
        cout<<"si desidera modificare i campi?"<<endl;
        cin>>x;
        if(x=='s')
        {
            s.aggiorna();
            s.aggiorna1();
        }
    }
    else
    {
        //persona p;
        dipendente d;
        d.visualizza();
        d.visualizza2();
        cout<<"si desidera modificare i campi?"<<endl;
        cin>>x;
        if(x=='s')
        {
            d.aggiorna();
            d.aggiorna2();
        }
    }
}

lunedì 6 ottobre 2014

Puntatori

I puntatori sono tipi di variabili contraddistinti con il segno * dopo il tipo (int*, float*, double*,etc...), esse non contengono il valore, ma l' indirizzo in cui è allocato.
Un semplice esempio di prova coi puntatori
#include<iostream>
using namespace std;

main()
{
    int* a;
    int b;
    b=5;
    cout<<a<<" questo è l' indirizzo"<<endl;
    cout<<b<<" questo è l' intero"<<endl;
    //a=b; erorrore
    a=&b;
    cout<<a<<" indirizzo dell' intero"<<endl;
    cout<<*a<<"questo è l intero"<<endl;
}

lunedì 29 settembre 2014

Ereditarietà

L ereditarietà è un concetto importante per tutti i linguaggi di programmazione orientati agli oggetti, serve per aggiornare un vecchio codice aggiungendo nuove funzionalità conservando quelle vecchie. Per effettuare l aggiornamento si usano delle regole di passaggio (o modificatori) e sono 3:
PUBLIC: con questo modificatore solo la parte pubblica e protetta verrà ereditata dalla nuova classe, gli attributi e i metodi che erano pubblici rimarrano pubblici e quelli protetti resteranno protetti.
PROTECTED: usando questo moificatore la parte pubblica e protetta verrà ereditata dalla nuova classe, ma gli attributi e i metodi diventeranno tutti protetti.
PRIVATE:usando questo modificatore la parte pubblica e privata verrà ereditata dalla nuova classe, ma i metodi e gli attributi saranno tutti privati.
Di seguito un semplice esempio di uso dell' ereditarietà:
#include <iostream.h>

class Nonna 
{
private: int n1;
protected: int n2;
public: int n3;
  Nonna() : n1(0),n2(0), n3(0) {}
  void scrivi_Nonna() const;
} ;

class Mamma : protected  Nonna
{
private: int m1;
protected: int m2;
public: int m3;
  Mamma() : m1(0),m2(0), m3(0) {}
  void scrivi_Mamma() const;
} ;

class Figlia : Mamma    // accesso private di default
{
private: int f1;
protected: int f2;
public: int f3;
  Figlia() : f1(0),f2(0), f3(0) {}
  void scrivi_Figlia() const;
};

void Nonna::scrivi_Nonna() const
{
 cout << "\nFunzione-membro scrivi_Nonna:\n";
 cout << "n1 = " << n1 << '\n';
 cout << "n2 = " << n2 << '\n';
 cout << "n3 = " << n3 << '\n';
}

void Mamma::scrivi_Mamma() const
{
 cout << "\nFunzione-membro scrivi_Mamma:\n";
// cout << "n1 = " << n1 << '\n';  // errore
 cout << "n1 e' privato: non si eredita\n";
 cout << "n2 = " << n2 << '\n';
 cout << "n3 = " << n3 << '\n';
 cout << "m1 = " << m1 << '\n';
 cout << "m2 = " << m2 << '\n';
 cout << "m3 = " << m3 << '\n';
}

void Figlia::scrivi_Figlia() const
{
 cout << "\nFunzione-membro scrivi_Figlia:\n";
// cout << "n1 = " << n1 << '\n';  // errore
 cout << "n1 e' privato: non si eredita\n";
 cout << "n2 = " << n2 << '\n';
 cout << "n3 = " << n3 << '\n';
// cout << "m1 = " << m1 << '\n';  // errore
 cout << "m1 e' privato: non si eredita\n";
 cout << "m2 = " << m2 << '\n';
 cout << "m3 = " << m3 << '\n';
 cout << "f1 = " << f1 << '\n';
 cout << "f2 = " << f2 << '\n';
 cout << "f3 = " << f3 << '\n';
}

void scrivi_Figlia(const Figlia& f)
{
 cout << "\nFunzione globale scrivi_Figlia:\n";
// cout << "n1 = " << f.n1 << '\n';  // errore
 cout << "n1 e' privato: inaccessibile\n";
// cout << "n2 = " << f.n2 << '\n';  // errore
 cout << "n2 e' protetto: inaccessibile\n";
// cout << "n3 = " << f.n3 << '\n';  // errore
 cout << "n3 e' protetto (in Mamma): inaccessibile\n";
// cout << "m1 = " << f.m1 << '\n';  // errore
 cout << "m1 e' privato: inaccessibile\n";
// cout << "m2 = " << f.m2 << '\n';  // errore
 cout << "m2 e' protetto: inaccessibile\n";
// cout << "m3 = " << f.m3 << '\n';  // errore
 cout << "m3 e' privato (in Figlia): inaccessibile\n";
// cout << "f1 = " << f.f1 << '\n';  // errore
 cout << "f1 e' privato: inaccessibile\n";
// cout << "f2 = " << f.f2 << '\n';  // errore
 cout << "f2 e' protetto: inaccessibile\n";
 cout << "f3 = " << f.f3 << '\n';
}

int main()
{
 {
  Nonna n;
  n.scrivi_Nonna();
 }
 {
  Mamma m;
  m.scrivi_Mamma();
 }
 cout << "\nPremi return per visualizzare il secondo blocco ";
 char c;
 cin.get(c);
 Figlia f;
 f.scrivi_Figlia();
 scrivi_Figlia(f);
 return 0; 
}