Pagina 1 di 6 1 2 3 ... ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 60
  1. #1

    C++: Compilazione separata, aiuto !!

    Buonasera a tutti. Vi prego aiutatemi perchè sto impazzendo.
    So fare bene ogni programma e non ho alcun problema, però all'esame bisogna fare un programma con più file, ossia header file (.h) oppure object file (.o).
    Prendiamo ad esempio questo programma:

    #include <cstdlib>
    #include <iostream>
    #define max 100

    using namespace std;

    int main(int argc, char *argv[])
    {
    FILE * pf;
    int n,m,i,j;
    int a[max][max],b[max][max];
    cout<<"Programma che calcola la trasposta di una matrice nxm."<<endl;
    cout<<"Qual e' la dimensione di n?";
    cin>>n;
    cout<<"Qual e' la dimensione di m?";
    cin>>m;
    cout<<"Inserire gli elementi della matrice."<<endl;
    for (i=0;i<n;i++)
    {
    for(j=0;j<m;j++)
    {
    cout<<"Inserire l'elemento a["<<i<<"]["<<j<<"]: ";
    cin>>a[i][j];
    }
    }
    for(i=0;i<n;i++)
    {
    for (j=0;j<m;j++)
    {
    b[i][j]=a[j][i];
    }
    }
    cout<<"La matrice iniziale e': "<<endl;
    for (i=0;i<n;i++)
    {
    for (j=0;j<m;j++)
    {
    cout<<a[i][j];
    }
    cout<<endl;
    }
    cout<<"Mentre la matrice trasposta e':"<<endl;
    for (i=0;i<n;i++)
    {
    for(j=0;j<m;j++)
    {
    cout<<b[i][j];
    }
    cout<<endl;
    }

    pf=fopen("trasposta.txt","wt");
    if(pf != NULL)
    {
    for(i=0;i<n;i++)
    {
    for(j=0;j<m;j++)
    {
    fprintf(pf,"%d",b[i][j]);
    }
    }
    fclose(pf);
    }
    system("PAUSE");
    return EXIT_SUCCESS;
    }


    Come posso dividerlo in più file ?
    Tipo per la lettura della matrice ho un file .h.
    Per la stampa in un file della matrice trasposta ho un altro file .h.

    Potete postarmi i passaggi precisi? anche il prof non me l'ha spiegato molto chiaramente.

  2. #2
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    con più file, ossia header file (.h) oppure object file (.o).
    Gli object file non li crea il programmatore, ma il compilatore. Un programma in C++ generalmente può essere suddiviso in più file con estensione .cpp (o simili) che contengono il main e le altre funzioni che costituiscono il programma, e in più file con estensione .h (header file) che contengono invece prototipi di funzioni, direttive al precompilatore, definizioni di tipi di dato (e di classi) ed eventualmente altro.

    Nel caso del codice che hai postato (la prossima volta fallo utilizzando i tag code come previsto dal punto 6 del regolamento) in realtà non c'è molto da fare perché hai solo la funzione main(), quindi non c'è nulla da suddividere. Potresti però definire delle funzioni per eseguire le varie operazioni del programma, ad esempio con una potresti leggere l'input da tastiera, con un'altra fare la trasposizione e con un'altra ancora la stampa del risultato; avresti così tre funzioni di cui potresti scrivere il codice in un file .cpp separato, lasciando solo il main in quello originale, e poi definire un header file con i prototipi delle funzioni.
    every day above ground is a good one

  3. #3
    Originariamente inviato da YuYevon
    Gli object file non li crea il programmatore, ma il compilatore. Un programma in C++ generalmente può essere suddiviso in più file con estensione .cpp (o simili) che contengono il main e le altre funzioni che costituiscono il programma, e in più file con estensione .h (header file) che contengono invece prototipi di funzioni, direttive al precompilatore, definizioni di tipi di dato (e di classi) ed eventualmente altro.

    Nel caso del codice che hai postato (la prossima volta fallo utilizzando i tag code come previsto dal punto 6 del regolamento) in realtà non c'è molto da fare perché hai solo la funzione main(), quindi non c'è nulla da suddividere. Potresti però definire delle funzioni per eseguire le varie operazioni del programma, ad esempio con una potresti leggere l'input da tastiera, con un'altra fare la trasposizione e con un'altra ancora la stampa del risultato; avresti così tre funzioni di cui potresti scrivere il codice in un file .cpp separato, lasciando solo il main in quello originale, e poi definire un header file con i prototipi delle funzioni.
    Scusa se non ho messo i tag.. è abbastanza semplice come programma, non immaginavo di poter causare qualche problema.
    Comunque mi va benissimo la spiegazione. Mi fai vedere come potrei fare per definire delle funzioni per i 3 header file? Un esempio funzionante. E' proprio quello che mi serve per l'esame. Ti ringrazio anticipatamente !

  4. #4
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Originariamente inviato da dibussolo
    per definire delle funzioni per i 3 header file
    No le funzioni sono 3 (secondo l'esempio che ti facevo io), l'header file è uno solo.
    Comunque inizia tu a realizzare le funzioni di cui ti dicevo (ed eventualmente altro se ti viene in mente) e metti tutto in un unico file, poi vediamo come suddividerlo... in ogni caso guarda che sul web sicuramente trovi un po' di esempi.
    every day above ground is a good one

  5. #5
    Originariamente inviato da YuYevon
    No le funzioni sono 3 (secondo l'esempio che ti facevo io), l'header file è uno solo.
    Comunque inizia tu a realizzare le funzioni di cui ti dicevo (ed eventualmente altro se ti viene in mente) e metti tutto in un unico file, poi vediamo come suddividerlo... in ogni caso guarda che sul web sicuramente trovi un po' di esempi.
    Buongiorno. Stavo in attesa di una tua risposta.
    Comunque il problema è che non so proprio come partire, non riesco a trovare nessun esempio funzionante, non so proprio mettere le mani. Se sai come si fa puoi farlo tu per me ? mi basta un solo esempio.. per favore !

  6. #6
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,481
    Originariamente inviato da dibussolo
    Buongiorno. Stavo in attesa di una tua risposta.
    Ma la risposta l'hai avuta ...

    Lascia stare la divisione in più file. Scrivi, nello stesso sorgente che hai postato, una funzione che il tuo codice possa utilizzare.

    Ad esempio, scrivi una funzione che visualizzi una matrice generica e utilizzala quando devi visualizzare la matrice iniziale e quella trasposta.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  7. #7
    Originariamente inviato da oregon
    Ma la risposta l'hai avuta ...

    Lascia stare la divisione in più file. Scrivi, nello stesso sorgente che hai postato, una funzione che il tuo codice possa utilizzare.

    Ad esempio, scrivi una funzione che visualizzi una matrice generica e utilizzala quando devi visualizzare la matrice iniziale e quella trasposta.
    Allora:

    PROTOTIPI

    Secondo lo standart ANSI (American National Standard Institute), tutte le funzioni devono avere un corrispondente prototipo. E' buona norma far risiedere il prototipo in un file d'intestazione (file header, con estensione .h) anche se questa non è una regola obbligatoria. Un prototipo di funzione ha la seguente forma:

    tipo_restituito nome_funzione
    (tipo_argomento1 nome_argomento1, ......);


    Una funzione può essere di tipo void, int, float ecc.. Il tipo restituito indica appunto il tipo del valore restituito dalla funzione. Il nome_funzione può essere un nome qualunque scelto per descriere lo scopo della funzione. Se la funzione riceve parametri, sarà necessario specificare il tipo_argomento seguito da un nome_argomento. Anche il tipo degli argomenti può essere void, int, float, ecc.. Se a una funzione si passano più argomenti, questi dovranno essere separati da una virgola.
    La scrittura della funzione vera e propria è essa stessa una porzione di codice C++ che normalmente segue la definizione delle funzione main(). Una funzione può quindi assumere la seguente forma:

    tipo_restituito nome_funzione(tipo e nome_argomenti)
    {
    dichiarazione dei dati e corpo della funzione
    return();
    }


    Si noti che la prima riga della funzione è identica al prototipo inserito nel file header, ma con un'importante differenza: manca il punto e virgola finale. Vediamo ora un esempio che mostra un prototipo e una funzione in un programma:

    /*
    *Un semplice programma che illustra l'uso dei prototipi
    *di funzioni. La funzione, esegue la moltiplicazione tra
    *due interi e restituisce il risultato
    * /

    #include <iostream.h>

    int moltiplica(int x, int y);
    // Definizione del prototipo

    main()
    {
    int a = 5;
    int b = 6;
    int risultato;

    risultato = moltiplica(a,b);
    cout << Il risultato della moltiplicazione è:
    << risultato <<endl;

    return (0);
    }

    int moltiplica(int x, int y)
    // Dichiarazione della funzione
    {
    int ris;

    ris = x * y;
    return ris;
    // Valore restituito dalla funzione.
    }


    Già questo programmino mi da molti errori..risistemandoli e togliendoli tutti, alla fine mi trovo un errore di linker.
    Come posso ad esempio definire una funzione per la lettura di una matrice nxm?

  8. #8
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Dove l'hai trovata quella roba? Comunque

    codice:
    #include <iostream>
    
    using namespace std;
    
    int moltiplica(int x, int y);
    // Definizione del prototipo
    
    int main()
    {
        int a = 5;
        int b = 6;
        int risultato;
    
        risultato = moltiplica(a,b);
        cout << "Il risultato della moltiplicazione è: " << risultato << endl;
    
        return (0);
    }
    
    int moltiplica(int x, int y)
    // Dichiarazione della funzione
    {
        int ris;
    
        ris = x * y;
        return ris;
        // Valore restituito dalla funzione.
    }
    ma non capisco perché hai riportato tutto questo... è forse la prima volta che senti parlare di funzioni e prototipi di funzioni?
    every day above ground is a good one

  9. #9
    Originariamente inviato da YuYevon
    Dove l'hai trovata quella roba? Comunque..

    ma non capisco perché hai riportato tutto questo... è forse la prima volta che senti parlare di funzioni e prototipi di funzioni?
    No no..l'ho preso stesso dalla guida c++ sul sito html. Ho letto su 4-5 libri differenti queste funzioni e prototipi, me l'ha spiegato anche il prof a ricevimento.
    E' per farvi capire che la teoria mi è chiarissima, è la pratica che mi blocca.

  10. #10
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Sì ma per ora non devi fare altro che scrivere delle funzioni per svolgere le operazioni eseguite nel tuo programma. Ad esempio questo ciclo di lettura dei dati

    codice:
    for (i=0;i<n;i++)
    {
            for(j=0;j<m;j++)
            {
                    cout<<"Inserire l'elemento a["<<i<<"]["<<j<<"]: ";
                    cin>>a[i][j];
            }
    }
    non lo sai scrivere in una funzione, togliendolo da main()?
    every day above ground is a good one

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 © 2026 vBulletin Solutions, Inc. All rights reserved.