Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - esercizio sulle strutture
Forum - C/C++ - esercizio sulle strutture

Pagine: [ 1 2 3 4 5 6 ] Precedente | Prossimo
Avatar
wicca89 (Normal User)
Rookie


Messaggi: 45
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 19:27
Giovedì, 18/03/2010

fin'ora ho fatto questo:
#include <iostream>
#include <string.h>

using namespace std;

struct Tdata{
       int gg;
       int mm;
       int aa;
       };
struct Topera{
char titolo[101];
char autore[101];
Tdata data;
int prezzo;
};

struct Tgalleria{
Topera opera[100];
int numero;//numero opere nella galleria
};

void aggiungi(struct Tgalleria& ,struct Topera&);
void elimina(struct Tgalleria& ,char []);
//void ordina(struct Tgalleria& ,char );

int main() {
    struct Tdata data;
    struct Topera opera;
    struct Tgalleria galleria;
    char titolo2[100];
    int scelta;
    
    aggiungi(galleria,opera);
    cout<<"vuoi elimare qualcosa? (1. Si - 2. No): ";
    cin>>scelta;
    if(scelta==1){
    elimina(galleria,titolo2);
   // ordina(galleria,scelta);
}
system ("PAUSE");
return 0;
}

void aggiungi(Tgalleria& galleria , Topera& opera){
     int scelta,scelta2,i=0;
     char appoggio;
     galleria.numero=0;
     do{
        do{
     cout<<"Inserisci il titolo dell'opera da aggiungere nella galleria: ";
     cin>>galleria.opera.titolo;
     cout<<"Inserisci l'autore del titolo dell'opera da aggiungere nella galleria: ";
     cin>>galleria.opera.autore;
     cout<<"Inserisci la data (gg mm aa)corrente separati da uno spazio: ";
     cin>>galleria.opera.data.gg>>galleria.opera.data.mm>>galleria.opera.data.aa;
     cout<<"Inserisci il prezzo del libro: ";
     cin>>galleria.opera.prezzo;
     cout<<"I dati inseriti sono corretti: (1. si - 2 no): ";
     cin>>scelta;
     }
     while(scelta==2);
     cout<<"Vuoi inserire un'altro titolo e autore in galleria? (1. Si - 2.No): ";
     cin>>scelta2;
     i++;
     galleria.numero++;
     scelta=0;
                  }
     while (scelta2==1);  
     for(i=0;i<galleria.numero;i++){
              cout<<"Titolo:  "<<galleria.opera.titolo<<"\n";
              cout<<"Autore:  "<<galleria.opera.autore<<"\n";
              cout<<"Data: "<<galleria.opera.data.gg<<"/"<<galleria.opera.data.mm<<"/"<<galleria.opera.data.aa<<"\n";
                                     }}
                                  
void elimina(Tgalleria& galleria, char titolo2[20]){
     int i=0,n;
     int ok=0;
     cout<<n<<endl;
    
     cout<<"Scrivi il titolo da eliminare: ";
     cin>>titolo2[20];
     while(i<galleria.numero || ok==0){
               if(strcmp(galleria.opera.titolo,titolo2)==0){
                                                         ok=1;
                                                         n=i;
                                                  strcpy(galleria.opera[n].titolo,galleria.opera[galleria.numero].titolo);
                                                         galleria.numero--;
                                                         cout<<galleria.opera.titolo<<endl;
                                                               }//if chiuso    
                                                               else if(ok!=1){i++;}
                   }    //while chiuso
                  
                     for(i=0;i<galleria.numero;i++){
              cout<<"Titolo:  "<<galleria.opera.titolo<<"\n";
              cout<<"Autore:  "<<galleria.opera.autore<<"\n";
              cout<<"Data: "<<galleria.opera.data.gg<<"/"<<galleria.opera.data.mm<<"/"<<galleria.opera.data.aa<<"\n";
                                     }
                      } // void chiuso
ovviamente ho l'errore che non mi scambia i nomi in modo da eliminare quello che dico io per esempio se scrivo prima (metto solo il titolo):
ciao
e poi
gatto
e voglio elimiare ciao mi elimina gatto e mi stampa ciao....:hail::hail: help me

Ultima modifica effettuata da wicca89 il 20/03/2010 alle 12:26
PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 21:08
Giovedì, 18/03/2010
Ciao!

Ho letto il tup programma, e ho trovato alcune imprecisioni:
Nella funzione void "elimina(struct Tgalleria& ,char [])" ,quando individui il record da eliminare, sostituisci solo il campo titolo. Dovresti eliminare tutti i campi, a mio avviso, ti consiglio di implementare una funzione apposita.

PM Quote
Avatar
wicca89 (Normal User)
Rookie


Messaggi: 45
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 21:15
Giovedì, 18/03/2010
e come posso fare???
Il mio problema è che questo esercizio lo devo consegnare entro martedì o a giugno non posso sostenere l'esame e questi struct sono argomenti che il mio professore ha finito di spiegare praticamente lunedì qnd non sono ancora molto pratica di come si usano...se mi spieghi come fare ti sarei molto grada :hail::hail:

PM Quote
Avatar
wicca89 (Normal User)
Rookie


Messaggi: 45
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 21:49
Giovedì, 18/03/2010
ho provato una  cosa del genere...sbagliata ovviamente:

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <string.h>
  3.  
  4. using namespace std;
  5.  
  6. struct Tdata{
  7.        int gg;
  8.        int mm;
  9.        int aa;
  10.        };
  11. struct Topera{
  12. char titolo[101];
  13. char autore[101];
  14. Tdata data;
  15. int prezzo;
  16. };
  17.  
  18. struct Tgalleria{
  19. Topera opera[100];
  20. int numero;//numero opere nella galleria
  21. };
  22.  
  23. void aggiungi(struct Tgalleria& ,struct Topera&);
  24. void elimina(struct Tgalleria& ,char []);
  25. void scambia(struct Topera& ,struct Topera& );
  26. //void ordina(struct Tgalleria& ,char );
  27.  
  28. int main() {
  29.     struct Tdata data;
  30.     struct Topera opera;
  31.     struct Tgalleria galleria;
  32.     char titolo2[100];
  33.     int scelta;
  34.    
  35.     aggiungi(galleria,opera);
  36.     cout<<"vuoi elimare qualcosa? (1. Si - 2. No): ";
  37.     cin>>scelta;
  38.     if(scelta==1){
  39.     elimina(galleria,titolo2);
  40.    // ordina(galleria,scelta);
  41. }
  42. system ("PAUSE");
  43. return 0;
  44. }
  45.  
  46. void aggiungi(Tgalleria& galleria , Topera& opera){
  47.      int scelta,scelta2,i=0;
  48.      char appoggio;
  49.      galleria.numero=0;
  50.      do{
  51.         do{
  52.      cout<<"Inserisci il titolo dell'opera da aggiungere nella galleria: ";
  53.      cin>>galleria.opera[i].titolo;
  54.      cout<<"Inserisci l'autore del titolo dell'opera da aggiungere nella galleria: ";
  55.      cin>>galleria.opera[i].autore;
  56.      cout<<"Inserisci la data (gg mm aa)corrente separati da uno spazio: ";
  57.      cin>>galleria.opera[i].data.gg>>galleria.opera[i].data.mm>>galleria.opera[i].data.aa;
  58.      cout<<"Inserisci il prezzo del libro: ";
  59.      cin>>galleria.opera[i].prezzo;
  60.      cout<<"I dati inseriti sono corretti: (1. si - 2 no): ";
  61.      cin>>scelta;
  62.      }
  63.      while(scelta==2);
  64.      cout<<"Vuoi inserire un'altro titolo e autore in galleria? (1. Si - 2.No): ";
  65.      cin>>scelta2;
  66.      i++;
  67.      galleria.numero++;
  68.      scelta=0;
  69.                   }
  70.      while (scelta2==1);  
  71.      for(i=0;i<galleria.numero;i++){
  72.               cout<<"Titolo:  "<<galleria.opera[i].titolo<<"\n";
  73.               cout<<"Autore:  "<<galleria.opera[i].autore<<"\n";
  74.               cout<<"Data: "<<galleria.opera[i].data.gg<<"/"<<galleria.opera[i].data.mm<<"/"<<galleria.opera[i].data.aa<<"\n";
  75.                                      }}
  76.                                    
  77. void elimina(Tgalleria& galleria, char titolo2[20]){
  78.      int i=0,n,ap;
  79.      int ok=0;    
  80.      char app[101];
  81.      cout<<"Scrivi il titolo da eliminare: ";
  82.      cin>>titolo2[20];
  83.      i=0;
  84.      while(i<galleria.numero){
  85.                if(strcmp(galleria.opera[i].titolo,titolo2)==0){
  86.                                                   scambia(galleria.opera[i],galleria.opera[galleria.numero]);
  87.                                                              } i++;//if chiuso    
  88.                                  }//while chiuso
  89.                    
  90.                      for(i=0;i<galleria.numero;i++){
  91.               cout<<"Titolo:  "<<galleria.opera[i].titolo<<"\n";
  92.               cout<<"Autore:  "<<galleria.opera[i].autore<<"\n";
  93.               cout<<"Data: "<<galleria.opera[i].data.gg<<"/"<<galleria.opera[i].data.mm<<"/"<<galleria.opera[i].data.aa<<"\n";
  94.                                      }
  95.                       } // void chiuso
  96.      
  97. void scambia(Topera& x1, Topera& x2){
  98.      
  99.      Topera s;
  100.      
  101.      s=x1;
  102.      x1=x2;
  103.      x2=s;
  104.      
  105.      
  106.      }


Vi prego aiutatemiiii:hail:

PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 23:02
Giovedì, 18/03/2010
Ciao, ho messo a posto la funzione di inserimento e ho pulito un po' il tuo codice.
Non ho ancora completato le altre funzioni, ma quello che per ora trovi qui funziona.

Codice sorgente - presumibilmente C++

  1. /*
  2.  * main.cc
  3.  *
  4.  *  Created on: Mar 18, 2010
  5.  *  Author: Matthew
  6.  */
  7.  
  8. #include <iostream>
  9. #include <string.h>
  10. #include <stdio.h>
  11. #include <time.h>
  12. #include <stdlib.h>
  13.  
  14. using namespace std;
  15.  
  16. struct Tdata
  17. {
  18.        int gg;
  19.        int mm;
  20.        int aa;
  21. };
  22. struct Topera
  23. {
  24.         char titolo[101];
  25.         char autore[101];
  26.         Tdata data;
  27.         int prezzo;
  28. };
  29.  
  30. struct Tgalleria
  31. {
  32.         Topera opera[100];
  33.         int numero;
  34. };
  35.  
  36. void aggiungi(struct Tgalleria& ,struct Topera&);
  37. void elimina(struct Tgalleria& ,char*);
  38. void scambia(struct Topera& ,struct Topera& );
  39. //void ordina(struct Tgalleria& ,char );
  40. void stampa(struct Tgalleria&);
  41.  
  42. int main()
  43. {
  44.     struct Topera opera;
  45.     struct Tgalleria galleria;
  46.     galleria.numero=0;
  47.     int scelta=1;
  48.     cout<<"Cosa vuoi fare? (1 aggiungi, 2 elimina, 3 scambia, 4 ordina, 5 stampa, 6 esci)";
  49.     cin>>scelta;
  50.     int pointer=0;
  51.     while(scelta!=6)
  52.     {
  53.         switch(scelta)
  54.         {
  55.                         case 1:
  56.                         {
  57.                                 aggiungi(galleria,opera);
  58.                         }
  59.                         break;
  60.                         case 2:
  61.                         {
  62.                                 string titolo;
  63.                                 cout<<"Inserisci titolo:"<<endl;
  64.                                 cin>>titolo;
  65.                                 //elimina(galleria, titolo.c_str());
  66.                         }
  67.                         break;
  68.                         case 3:
  69.                         {
  70.                                 //scambia
  71.                         }
  72.                         break;
  73.                         case 4:
  74.                         {
  75.                                 char ch;
  76.                                 cout<<"Ordina per: titolo ('t'),autore ('a'), data di creazione ('d'), prezzo ('p')"<<endl;
  77.                                 cin>>ch;
  78.                                 if((ch=='t')|(ch=='a')|(ch=='d')|(ch=='p'))
  79.                                 {
  80.                                         //ordina(galleria, ch);
  81.                                 }
  82.                                 else
  83.                                 {
  84.                                         cout<<"Opzione inesistente"<<endl;
  85.                                 }
  86.                         }
  87.                         break;
  88.                         case 5:
  89.                         {
  90.                                 stampa(galleria);
  91.                         }
  92.                         break;
  93.                         default:
  94.                         {
  95.                                 cout<<"Opzione inesistente"<<endl;
  96.                         }
  97.         }
  98.         cout<<endl<<"Cosa vuoi fare? (1 aggiungi, 2 elimina, 3 scambia, 4 ordina, 5 stampa, 6 esci)";
  99.         cin>>scelta;
  100.     }
  101.     return 0;
  102. }
  103.  
  104. void stampa(Tgalleria& galleria)
  105. {
  106.     for(int i=0;i<galleria.numero;i++)
  107.     {
  108.              cout<<"Titolo:  "<<galleria.opera[i].titolo<<"\n";
  109.              cout<<"Autore:  "<<galleria.opera[i].autore<<"\n";
  110.              cout<<"Data: "<<galleria.opera[i].data.gg<<"/"<<galleria.opera[i].data.mm<<"/"<<galleria.opera[i].data.aa<<"\n";
  111.              cout<<"Prezzo:  "<<galleria.opera[i].prezzo<<"\n";
  112.              cout<<endl;
  113.     }
  114. }
  115.  
  116. void aggiungi(Tgalleria& galleria , Topera& opera)
  117. {
  118.      time_t rawtime;
  119.      struct tm * timeinfo;
  120.  
  121.      cout<<"Inserisci il titolo dell'opera da aggiungere nella galleria: ";
  122.      cin>>galleria.opera[galleria.numero].titolo;
  123.      cout<<"Inserisci l'autore del titolo dell'opera da aggiungere nella galleria: ";
  124.      cin>>galleria.opera[galleria.numero].autore;
  125.      time (&rawtime);
  126.      timeinfo = localtime (&rawtime);
  127.      galleria.opera[galleria.numero].data.gg=timeinfo->tm_mday;
  128.      galleria.opera[galleria.numero].data.mm=timeinfo->tm_mon;
  129.      galleria.opera[galleria.numero].data.aa=timeinfo->tm_year+1900;
  130.      cout<<"Inserisci il prezzo del libro: ";
  131.      cin>>galleria.opera[galleria.numero].prezzo;
  132.  
  133.      galleria.numero++;
  134. }


PM Quote
Avatar
Poggi Marco (Member)
Guru


Messaggi: 969
Iscritto: 05/01/2010

Segnala al moderatore
Postato alle 23:08
Giovedì, 18/03/2010
L'errore è nella funzione "void elimina(struct Tgalleria& ,char [])".

Tu dichiari  "scambia(galleria.opera,galleria.opera[galleria.numero]);" , però se ci pensi, galleria.numero, è oltre l' elenco delle opere registrate.

Posto il programma corretto:

Codice sorgente - presumibilmente C++

  1. #include <iostream>
  2. #include <string.h>
  3.  
  4. using namespace std;
  5.  
  6. struct Tdata{
  7.        int gg,mm,aa;
  8.        };
  9.  
  10. struct Topera
  11. {
  12. char titolo[101];
  13. char autore[101];
  14. Tdata data;
  15. float prezzo;
  16. };
  17.  
  18. struct Tgalleria
  19. {
  20. Topera opera[100];
  21. int numero;//numero opere nella galleria
  22. };
  23.  
  24. void aggiungi(struct Tgalleria& ,struct Topera);
  25. void elimina(struct Tgalleria& ,char []);
  26. void sostituisci(Topera &, Topera);
  27. void stampa(const struct Tgalleria & );
  28. //void ordina(struct Tgalleria& ,char );
  29.  
  30. int main()
  31. {
  32.     //struct Tdata data;
  33.     struct Topera opera;
  34.     struct Tgalleria galleria;
  35.     char titolo2[100];
  36.     int scelta=0, scelta2=0;
  37.     galleria.numero=0; // azzeramento del numero di opere
  38.     do
  39.     {
  40.       cout<<"Vuoi inserire un titolo e autore in galleria? (1. Si - 2.No): ";
  41.       cin>>scelta2;
  42.       if (scelta2==1)
  43.       {
  44.           do
  45.           {
  46.              cout<<"Inserisci il titolo dell'opera da aggiungere nella galleria: ";
  47.              cin>>opera.titolo;
  48.              cout<<"Inserisci l'autore del titolo dell'opera da aggiungere nella galleria: ";
  49.              cin>>opera.autore;
  50.              cout<<"Inserisci la data (gg mm aa)corrente separati da uno spazio: ";
  51.              cin>>opera.data.gg>>opera.data.mm>>opera.data.aa;
  52.              cout<<"Inserisci il prezzo del libro: ";
  53.              cin>>opera.prezzo;
  54.              cout<<"I dati inseriti sono corretti: (1. si - 2 no): ";
  55.              fflush(stdin);
  56.              cin>>scelta;
  57.           } while (scelta!=1);
  58.           aggiungi(galleria, opera);
  59.       }
  60.     } while (scelta2==1);
  61.     stampa(galleria);
  62.     do
  63.     {
  64.       cout<<"vuoi elimare qualcosa? (1. Si - 2. No): ";
  65.       cin>>scelta;
  66.       if(scelta==1)
  67.       {
  68.           cout<<"\nScrivi il titolo da eliminare: ";
  69.           cin>>titolo2;
  70.           elimina(galleria,titolo2);
  71.       }
  72.     } while(scelta==1);
  73.    // ordina(galleria,scelta);
  74.    stampa(galleria);
  75.  fflush(stdin);
  76.  getchar();
  77. return 0;
  78. }
  79.  
  80. void aggiungi(Tgalleria &galleria , Topera op)
  81. {
  82.      galleria.opera[galleria.numero]=op;
  83.      galleria.numero++;
  84. }
  85.  
  86. void sostituisci(Topera &a, Topera b)
  87. {
  88.     a=b;
  89. }
  90.  
  91. void elimina(Tgalleria& galleria, char titolo2[])
  92. {
  93.      int i=0;
  94.      //cout<<n<<endl;
  95.      while(i<galleria.numero)
  96.      {
  97.                if(strcmp(galleria.opera[i].titolo,titolo2)==0)
  98.                {
  99.                    sostituisci(galleria.opera[i], galleria.opera[galleria.numero-1]);
  100.                    galleria.numero--;
  101.                 }//if chiuso
  102.                 else i++;
  103.         }    //while chiuso
  104.  
  105.  
  106. } // void chiuso
  107.  
  108. void stampa(const struct Tgalleria &g)
  109. {
  110.     int i=0;
  111.     cout<<"Esistono "<<g.numero<<" opere registrate\n";
  112.     for (i=0; i<g.numero; i++)
  113.     {
  114.               cout<<"Titolo:  "<<g.opera[i].titolo<<"\n";
  115.               cout<<"Autore:  "<<g.opera[i].autore<<"\n";
  116.               cout<<"Data: "<<g.opera[i].data.gg<<"/"<<g.opera[i].data.mm<<"/"<<g.opera[i].data.aa<<"\n";
  117.               cout<<"-----------------------------------------\n";
  118.     }
  119. }


  

PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 23:25
Giovedì, 18/03/2010
La tua funzione sostituisci (poggi marco) è sbagliata, e di conseguenza anche la funzione elimina.
Non puoi scambiare i valori di due strutture in quel modo. Stai solo passando un puntatore, quando l'originale verrà sovrascritto succederà un gran pasticcio.
Devi eseguire una deep copy.
Codice sorgente - presumibilmente C++

  1. /*
  2.  * main.cc
  3.  *
  4.  *  Created on: Mar 18, 2010
  5.  *  Author: Matthew
  6.  */
  7.  
  8. #include <iostream>
  9. #include <string.h>
  10. #include <stdio.h>
  11. #include <time.h>
  12. #include <stdlib.h>
  13.  
  14. using namespace std;
  15.  
  16. struct Tdata
  17. {
  18.        int gg;
  19.        int mm;
  20.        int aa;
  21. };
  22. struct Topera
  23. {
  24.         char titolo[101];
  25.         char autore[101];
  26.         Tdata data;
  27.         int prezzo;
  28. };
  29.  
  30. struct Tgalleria
  31. {
  32.         Topera opera[100];
  33.         int numero;
  34. };
  35.  
  36. void aggiungi(struct Tgalleria& ,struct Topera&);
  37. void elimina(struct Tgalleria& ,char*);
  38. void scambia(struct Topera& ,struct Topera& );
  39. //void ordina(struct Tgalleria& ,char );
  40. void stampa(struct Tgalleria&);
  41.  
  42. int main()
  43. {
  44.     struct Topera opera;
  45.     struct Tgalleria galleria;
  46.     galleria.numero=0;
  47.     int scelta=1;
  48.     cout<<"Cosa vuoi fare? (1 aggiungi, 2 elimina, 3 ordina, 4 stampa, 5 esci) ";
  49.     cin>>scelta;
  50.     while(scelta!=5)
  51.     {
  52.         switch(scelta)
  53.         {
  54.                         case 1:
  55.                         {
  56.                                 aggiungi(galleria,opera);
  57.                         }
  58.                         break;
  59.                         case 2:
  60.                         {
  61.                                 char titolo[101];
  62.                                 cout<<"Inserisci titolo: ";
  63.                                 cin>>titolo;
  64.                                 elimina(galleria, titolo);
  65.                         }
  66.                         break;
  67.                         case 3:
  68.                         {
  69.                                 char ch;
  70.                                 cout<<"Ordina per: titolo ('t'),autore ('a'), data di creazione ('d'), prezzo ('p'): ";
  71.                                 cin>>ch;
  72.                                 if((ch=='t')|(ch=='a')|(ch=='d')|(ch=='p'))
  73.                                 {
  74.                                         //ordina(galleria, ch);
  75.                                 }
  76.                                 else
  77.                                 {
  78.                                         cout<<"Opzione inesistente"<<endl;
  79.                                 }
  80.                         }
  81.                         break;
  82.                         case 4:
  83.                         {
  84.                                 stampa(galleria);
  85.                         }
  86.                         break;
  87.                         default:
  88.                         {
  89.                                 cout<<"Opzione inesistente"<<endl;
  90.                         }
  91.         }
  92.         cout<<endl<<"Cosa vuoi fare? (1 aggiungi, 2 elimina, 3 ordina, 4 stampa, 5 esci) ";
  93.         cin>>scelta;
  94.     }
  95.     return 0;
  96. }
  97.  
  98. void stampa(Tgalleria& galleria)
  99. {
  100.     for(int i=0;i<galleria.numero;i++)
  101.     {
  102.              cout<<"Titolo:  "<<galleria.opera[i].titolo<<"\n";
  103.              cout<<"Autore:  "<<galleria.opera[i].autore<<"\n";
  104.              cout<<"Data: "<<galleria.opera[i].data.gg<<"/"<<galleria.opera[i].data.mm<<"/"<<galleria.opera[i].data.aa<<"\n";
  105.              cout<<"Prezzo:  "<<galleria.opera[i].prezzo<<"\n";
  106.              cout<<endl;
  107.     }
  108. }
  109.  
  110. void aggiungi(Tgalleria& galleria , Topera& opera)
  111. {
  112.      time_t rawtime;
  113.      struct tm * timeinfo;
  114.  
  115.      cout<<"Inserisci il titolo dell'opera da aggiungere nella galleria: ";
  116.      cin>>galleria.opera[galleria.numero].titolo;
  117.      cout<<"Inserisci l'autore del titolo dell'opera da aggiungere nella galleria: ";
  118.      cin>>galleria.opera[galleria.numero].autore;
  119.      time (&rawtime);
  120.      timeinfo = localtime (&rawtime);
  121.      galleria.opera[galleria.numero].data.gg=timeinfo->tm_mday;
  122.      galleria.opera[galleria.numero].data.mm=timeinfo->tm_mon;
  123.      galleria.opera[galleria.numero].data.aa=timeinfo->tm_year+1900;
  124.      cout<<"Inserisci il prezzo del libro: ";
  125.      cin>>galleria.opera[galleria.numero].prezzo;
  126.  
  127.      galleria.numero++;
  128. }
  129.  
  130. void elimina(Tgalleria& galleria, char *titolo)
  131. {
  132.      int i=0;
  133.  
  134.      while(i<galleria.numero)
  135.      {
  136.          if(strcmp (galleria.opera[i].titolo, titolo)==0)
  137.          {
  138.                  //NB: decrementa galleria.numero PRIMA di scambiare, o avrai un errore "fuori di uno"
  139.                  galleria.numero--;
  140.                  scambia(galleria.opera[i],galleria.opera[galleria.numero]);
  141.                  cout<<"Elemento eliminato"<<endl;
  142.                  return;
  143.          }
  144.          i++;
  145.      }
  146.      cout<<"Impossibile eliminare, elemento non esistente"<<endl;
  147. }
  148.  
  149. void scambia(Topera& x1, Topera& x2)
  150. {
  151.      Topera s;
  152.      strcpy(s.autore, x1.autore);
  153.      strcpy(s.titolo, x1.titolo);
  154.      s.data.gg=x1.data.gg;
  155.      s.data.mm=x1.data.mm;
  156.      s.data.aa=x1.data.aa;
  157.      s.prezzo=x1.prezzo;
  158.  
  159.      strcpy(x1.autore, x2.autore);
  160.      strcpy(x1.titolo, x2.titolo);
  161.      x1.data.gg=x2.data.gg;
  162.      x1.data.mm=x2.data.mm;
  163.      x1.data.aa=x2.data.aa;
  164.      x1.prezzo=x2.prezzo;
  165.  
  166.      strcpy(x2.autore, s.autore);
  167.      strcpy(x2.titolo, s.titolo);
  168.      x2.data.gg=s.data.gg;
  169.      x2.data.mm=s.data.mm;
  170.      x2.data.aa=s.data.aa;
  171.      x2.prezzo=s.prezzo;
  172. }


Ultima modifica effettuata da Matthew il 18/03/2010 alle 23:29
PM Quote
Avatar
wicca89 (Normal User)
Rookie


Messaggi: 45
Iscritto: 16/01/2009

Segnala al moderatore
Postato alle 23:32
Giovedì, 18/03/2010
Matthew grazie mi hai sconvolta con quel codice :D domani mattina lo vedo con calma
marco grazie ank a te ma continua a non funzionarmi con quel num-1.
Matthew che significa quel deep copy??? :D

Ultima modifica effettuata da wicca89 il 18/03/2010 alle 23:32
PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 23:35
Giovedì, 18/03/2010
Significa che copi interamente tutto il contenuto di una struttura in un'altra.
Se ti limiti a fare struct1=struct2 passi solo un puntatore alle seconda struttura. Quindi se modifichi la seconda struttura modifichi anche la prima (che sostanzialmente non esiste, è solo un riflesso). Siccome quando cancelli una struttura essa verrà sovrascritta la prossima volta che inserisci un titolo, abbiamo bisogno di una deep copy.

Ultima modifica effettuata da Matthew il 18/03/2010 alle 23:35
PM Quote
Pagine: [ 1 2 3 4 5 6 ] Precedente | Prossimo