Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    [C++] dimensione oggetto di una classe modificabile dall'utente

    ciao a tutti.
    sto preparando un progetto per un esame e mi ritrovo a non risolvere un problema.
    ho dichiarato un oggetto di una classe con una dimensione, solo che questa dimensione all'inizio l'ho definita come costante, ma devo farla inserire dall'utente.
    purtroppo non ho molta padronanza con le classi e gli oggetti quindi ogni mia modifica non risolve nulla. qualcuno può darmi un consiglio per favore?

    il codice in parte è questo:
    #include <iostream>
    #include <cstring>
    #include <fstream>
    int const n=20;
    using namespace std;


    class archivio
    {
    public:
    archivio ();
    char nome[20];
    int voto;
    void caricamento();
    void stampa();
    int ordina(int );
    void ordina();
    void maxmin();
    void media();
    };archivio persona[n];


    int main()
    {
    ofstream out1("archivio laureati.xls", ios:ut);
    int scelta;
    do
    {


    cout<<"scegli l'operazione da effettuare: \n"<<endl;
    cout<<"1=caricamento"<<endl;
    cout<<"2=stampa"<<endl;
    cout<<"3=ordina in modo crescente in base al voto ottenuto"<<endl;
    cout<<"4=ordina in modo alfabetico in base al nome"<<endl;
    cout<<"5=visualizza il voto massimo e il voto minimo"<<endl;
    cout<<"6=media dei voti"<<endl;
    cout<<"7=nessuno \n"<<endl;
    cin>>scelta;
    cout<<"\n"<<endl;
    switch(scelta)
    {
    case 1: persona[n].caricamento();
    break;
    case 2: persona[n].stampa();
    cout<<endl;
    break;
    case 3: persona[n].ordina(persona[n].voto);
    out1<<"ordine in base al voto: \n"<<endl;
    for(int z=0; z<n; z++)
    {
    cout<<"\t"<<persona[z].nome<<"\t"<<persona[z].voto<<endl;
    out1<<persona[z].nome<<"\t"<<persona[z].voto<<endl;
    }
    out1.close();
    cout<<"\n"<<endl;
    break;
    case 4: persona[n].ordina();
    cout<<endl;
    break;
    case 5: persona[n].maxmin();
    cout<<endl;
    break;
    case 6: persona[n].media();
    cout<<endl;
    break;
    }
    }
    while(scelta!=7);
    out1.close();
    return 0;
    }
    grazie per l'attenzione.
    Ultima modifica di Raffaelee; 30-10-2017 a 19:34

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Devi usare i tag CODE e non i tag QUOTE per il codice altrimenti non si capisce.

    E poi devi chiarire a cosa ti riferisci perché non è chiaro.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3

    corretto il tag scusatemi! comunque il problema è che vorrei far inserire n dall'utente ma provando nel main con un semplice cin mi da errore in tutte le parti che ho usato n. questo è ovvio poichè n non è più una variabile globale

    codice:
    #include <iostream>#include <cstring>
    #include <fstream>
    int const n=100;
    using namespace std;
    
    
    class archivio
    {
        public:
        archivio ();
        char nome[20];
        int voto;
        void caricamento();
        void stampa();
        int ordina(int );
        void ordina();
        void maxmin();
        void media();
    };archivio persona[n];
    
    int main()
    {
        ofstream out1("archivio laureati.xls", ios::out);
        int scelta;
        do
        {
            
    
    
            cout<<"scegli l'operazione da effettuare: \n"<<endl;
            cout<<"1=caricamento"<<endl;
            cout<<"2=stampa"<<endl;
            cout<<"3=ordina in modo crescente in base al voto ottenuto"<<endl;
            cout<<"4=ordina in modo alfabetico in base al nome"<<endl;
            cout<<"5=visualizza il voto massimo e il voto minimo"<<endl;
            cout<<"6=media dei voti"<<endl;
            cout<<"7=nessuno \n"<<endl;
            cin>>scelta;
            cout<<"\n"<<endl;
            switch(scelta)
                {
                    
                    case 1:persona[n].caricamento();
                    break;
                    case 2:persona[n].stampa();
                    cout<<endl;
                    break;
                    case 3:persona[n].ordina(persona[n].voto);
                    out1<<"ordine in base al voto: \n"<<endl;
                    for(int z=0; z<n; z++)
                      {
                           cout<<"\t"<<persona[z].nome<<"\t"<<persona[z].voto<<endl;
                           out1<<persona[z].nome<<"\t"<<persona[z].voto<<endl;
                      }
                      out1.close();
                    cout<<"\n"<<endl;
                    break;
                    case 4:persona[n].ordina();
                    cout<<endl;
                    break;
                    case 5:persona[n].maxmin();
                    cout<<endl;
                    break;
                    case 6:persona[n].media();
                    cout<<endl;
                    break;
                }
            }
        while(scelta!=7);
        out1.close();
        return 0;
    }

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Usa la new e la delete
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  5. #5
    si ci sto provando solo che non so usarli molto bene e mi da molti errori perché dovrei fare molte modifiche al programma che non riesco a fare.. speravo in una soluzione un pò brutta da vedere ma funzionale..

  6. #6

    ho usato il comando new in qualche modo... spero stia bene

    ho fatto in questo modo, solo che ho due problemi:
    1- non mantiene i dati inseriti ma solo l'ultimo
    2- nel case 3 devo passare la variabile voto in modo da poter fare l'overloading della funzione ordina.. non so come passarlo ora.(se riuscissi a risolvere il primo problema non ci perdo molto la testa e tolgo l'overloading, ho l'esame di informatica la settimana prossima)

    codice:
    #include <iostream>#include <cstring>
    #include <fstream>
    
    
    using namespace std;
    class persona
    {
        public:
        char nome[20];
        int voto;
    };
    class archivio
    {
        public: archivio(int n)
        {
            p=new persona[n]();
        };
        persona *p;
        void caricamento(int );
        void stampa(int);
        int ordina(int );
        void ordina();
        void maxmin();
        void media();
    };
    
    
    int main()
    {
        int n;
        archivio *a=new archivio(n);
        cout<<"inserisci il numero di persone: \n"<<endl;
        cin>>n;
        ofstream out1("archivio laureati.xls", ios::out);
        int scelta;
        do
        {
            cout<<"scegli l'operazione da effettuare: \n"<<endl;
            cout<<"1=caricamento"<<endl;
            cout<<"2=stampa"<<endl;
            cout<<"3=ordina in modo crescente in base al voto ottenuto"<<endl;
            cout<<"4=ordina in modo alfabetico in base al nome"<<endl;
            cout<<"5=visualizza il voto massimo e il voto minimo"<<endl;
            cout<<"6=media dei voti"<<endl;
            cout<<"7=nessuno \n"<<endl;
            cin>>scelta;
            cout<<"\n"<<endl;
            switch(scelta)
                {
                    case 1:(*a).caricamento(n);
                    break;
                    case 2:(*a).stampa(n);
                    cout<<endl;
                    break;
                    /*case 3:(*a).ordina(a->p[n].voto);
                    out1<<"ordine in base al voto: \n"<<endl;
                    for(int z=0; z<n; z++)
                      {
                           cout<<"\t"<<a->p[n].nome<<"\t"<<a->p[n].voto<<endl;*/
                           /*out1<<persona[z].nome<<"\t"<<persona[z].voto<<endl;*/
                      /*}
                      out1.close();
                    cout<<"\n"<<endl;
                    break;
                    case 4:(*a).ordina();
                    cout<<endl;
                    break;
                    case 5: (*a).maxmin();
                    cout<<endl;
                    break;
                    case 6:(*a).media();
                    cout<<endl;
                    break;*/
                }
            }
        while(scelta!=7);
        out1.close();
        return 0;
    }
    
    
    
    
    void archivio::caricamento(int n)
    {
        ofstream out1("archivio laureati.xls", ios::app);
        out1<<"i dati inseriti sono: \n"<<endl;
        for(int i=0; i<n; i++)
        {
            cout<<"inserisci il nome: \n";
            cin>>p[n].nome;
            cout<<"inserisci il voto \n";
            cin>>p[n].voto;
            /*out1<<persona[i].nome<<"\t"<<persona[i].voto<<endl;*/
        }
    
    
        out1.close();
    }
    
    
    void archivio::stampa(int n)
    {
        cout<<"i dati inseriti sono: \n"<<endl;
        for(int i=0; i<n; i++)
        {
            cout<<i<<"\t..."<<p[n].nome<<"\t"<<p[n].voto<<endl;
        }
    }

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Ho visto il codice un po' di fretta ma noto che fai la new prima di chiedere il valore di n. Che senso ha?

    Prima chiedi quanti sono gli studenti e poi lo passi alla classe ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  8. #8
    è vero, ma il problema persiste anche cambiando l'ordine.. se inserisco per esempio 3 dati (nome, voto) quando vado a stamparli mi stampa tutti e tre i campi creati con l'ultimo dato inserito.

  9. #9
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,466
    Quote Originariamente inviata da Raffaelee Visualizza il messaggio
    è vero, ma il problema persiste anche cambiando l'ordine.. se inserisco per esempio 3 dati (nome, voto) quando vado a stamparli mi stampa tutti e tre i campi creati con l'ultimo dato inserito.
    Se nei cicli usi p[n] al posto di p[i] è ovvio ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  10. #10
    caspitaaa è verooo.... l'avrò modificato per provare alcune cose e non l'ho più notato!!!
    che bello funziona perfettamente!!
    ora cerco di risolvere l'overloading...
    grazie mille, se passo l'esame è grazie a te

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.