martedì 14 ottobre 2014

Esercizio 13/10/2014

Esercizio:

Definire un nuovo tipo di dato tramite l'istruzione typedef di nome dipendente, creare poi un array di puntatori di n elementi di tipo dipendente con n scelto dall'utente.

#include <iostream>
using namespace std;

typedef struct persona {
                    char Nome[15];
                    char Cognome[15];
                    float Stipendio;
                       }dipendente;   //creo un nuovo tipo di dato "dipendente"

dipendente *puntatore;   //creo una variabile di tipo puntatore (dipendente)

main()
{
    int ndip;
    cout<<"Compito del 13/10/2014";

//Input da utente per dimensione array di puntatori    
cout<<endl<<endl<<"Quanti dipendenti vuoi inserire?"<<endl;
        cin>>ndip; 
  puntatore=new dipendente[ndip];   //creo un array di puntatori della dimensione "ndip"
*!* con l'istruzione new dipendente si alloca spazio in memoria nella quantità prevista dal tipo di puntatore utilizzato e si genera l'indirizzo da assegnare al primo elemento dell'array puntatore 
//Inserimento dell'array di puntatori
for(int i=0;i<ndip;i++)
{
             cout<<endl<<"Inserisci il Nome: ";
         cin>>puntatore[i].Nome;   //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
         cout<<"Inserisci il Cognome: ";    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
         cin>>puntatore[i].Cognome;
         cout<<"Inserisci lo Stipendio: ";    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
         cin>>puntatore[i].Stipendio;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
}
        cout << endl << endl;
//Visualizzo l'array di puntatori
    for(int i=0;i<ndip;i++)
{
     cout<<"Dati Inseriti nell'elemento "<<i<<": "<<endl;
         cout<<endl<<"Nome: " << puntatore[i].Nome;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
         cout<<endl<<"Cognome: " << puntatore[i].Cognome;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
         cout<<endl<<"Stipendio: " << puntatore[i].Stipendio;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
             cout << endl << endl;
}
return 0;
}





Vediamo alcune prove svolte sull'istruzione DELETE per la deallocazione della memoria allocata in precedenza tramite NEW DIPENDENTE

#include <iostream>
using namespace std;

typedef struct persona {
                    char Nome[15];
                    char Cognome[15];
                    float Stipendio;
                       }dipendente;   //creo un nuovo tipo di dato "dipendente"

dipendente *puntatore;   //creo una variabile di tipo puntatore (dipendente)

main()
{
    int ndip;
    cout<<"Compito del 13/10/2014";

//Input da utente per dimensione array di puntatori
 cout<<endl<<endl<<"Quanti dipendenti vuoi inserire?"<<endl;
        cin>>ndip;
//Visualizzo gli indirizzi puntati dall'array di puntatori SENZA allocazione tramite "new dipendente"
    for(int i=0;i<ndip;i++)
 {
      cout<<"Indirizzi SENZA ALLOCAZIONE 'NEW PUNTATORE' puntato dall'elemento "<<i<< ": "<<endl;
      cout<<endl<<"Nome: " << &puntatore[i].Nome;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
      cout<<endl<<"Cognome: " << &puntatore[i].Cognome;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
      cout<<endl<<"Stipendio: " << &puntatore[i].Stipendio;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
      cout << endl << endl;
 }

  puntatore=new dipendente[ndip];   //creo un array di puntatori della dimensione "ndip"

//Visualizzo gli indirizzi puntati dall'array di puntatori
    for(int i=0;i<ndip;i++)
 {
      cout<<"Indirizzi CON ALLOCAZIONE 'NEW PUNTATORE' puntati dall'elemento "<<i<< ": "<<endl;
      cout<<endl<<"Nome: " << &puntatore[i].Nome;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
      cout<<endl<<"Cognome: " << &puntatore[i].Cognome;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
      cout<<endl<<"Stipendio: " << &puntatore[i].Stipendio;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
      cout << endl << endl;
 }

//Inserimento dell'array di puntatori
 for(int i=0;i<ndip;i++)
 {
    cout<<"Inserimento dell'elemento "<<i<< ": "<<endl;
    cout<<"Inserisci il Nome: ";
    cin>>puntatore[i].Nome;   //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
    cout<<"Inserisci il Cognome: ";    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
    cin>>puntatore[i].Cognome;
    cout<<"Inserisci lo Stipendio: ";    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
    cin>>puntatore[i].Stipendio;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
 }
        cout << endl;
//Visualizzo l'array di puntatori
    for(int i=0;i<ndip;i++)
 {
      cout<<"Dati Inseriti nell'elemento "<<i<<": "<<endl;
      cout<<endl<<"Nome: " << puntatore[i].Nome;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
      cout<<endl<<"Cognome: " << puntatore[i].Cognome;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
      cout<<endl<<"Stipendio: " << puntatore[i].Stipendio;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
      cout << endl;
 }
 cout<<"_____________________________________________________________"<<endl;
 cout<<endl<<"Ripetiamo ora la visualizzazione degli array dopo aver utilizzato"<<endl<<"l'istruzione 'delete' per deallocare lo spazio di memoria"<<endl<<endl;
 delete [] puntatore;

//Visualizzo l'array di puntatori
    for(int i=0;i<ndip;i++)
for(int i=0;i<ndip;i++)
 {
      cout<<"Indirizzi DOPO ISTRUZIONE 'DELETE []' puntati dall'elemento "<<i<< ": "<<endl;
      cout<<endl<<"Nome: " << &puntatore[i].Nome;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
      cout<<endl<<"Cognome: " << &puntatore[i].Cognome;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
      cout<<endl<<"Stipendio: " << &puntatore[i].Stipendio;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
      cout << endl << endl;
 }

//Visualizzo l'array di puntatori
    for(int i=0;i<ndip;i++)
 {
      cout<<"Dati presenti nell'elemento "<<i<<" dopo istruzione 'delete': "<<endl;
      cout<<endl<<"Nome: " << puntatore[i].Nome;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
      cout<<endl<<"Cognome: " << puntatore[i].Cognome;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
      cout<<endl<<"Stipendio: " << puntatore[i].Stipendio;    //notazione puntata con riferimento tramite indice "i" all'elemento dell'array di puntatori a cui si fa riferimento
      cout << endl << endl;
 }

return 0;
}



Nessun commento:

Posta un commento