Oppure

Loading
10/02/12 15:41
Daviducci0
Sono riuscito in parte a modificare tutto il codice iniziale con i sottoprogrammi ma continua ad esserci un errore in fase di run causandomi un force closed:
(Mi sa che sbaglio nel creare "int *vet e il char *path nel main";)
#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

void carica_vet(char*, int*, int &);
void stampa_vet(int*, int &);
void ricerca_max(int*, int &, int &, int &);


int main()
{
    char *path[256];  //Dichiaro variabili
    int *vet[100];
    int riemp = 1;
    int max;
    int contatore = 0;

    carica_vet(path[256], vet[100], riemp);
    stampa_vet(vet[100], riemp);
    ricerca_max(vet[100], riemp, max, contatore);

    system("pause");
    return 0;

}


void carica_vet(char path[], int vet[], int &riemp)
{
    //Inserimento da tastiera del percorso del file da aprire
    cout <<"Inserire nome del file da aprire:" << endl;
    cin >> path;

    // Apro il file

    fstream f;
    f.open(path, ios::in);
    if (!f)                                                     // Controllo file
    {
        cout << "Errore nell'apertura del file" << endl;;
        exit(-1);
    }


    //Inserisco elementi dal file nel vettore
    f >> vet[0];

    while (!f.eof())              //Continua finché non trovi l'end of file
        f >> vet[riemp++];        //Inserisci elementi nel vettore
    riemp--;


    f.close();             //Chiudo File
}

void stampa_vet(int vet[], int &riemp)
{
    cout <<"Il vettore inserito e':" << endl;

    for(int i = 0; i < riemp; i++)
    {
        cout << vet[i] << endl;
    }

}


void ricerca_max(int vet[], int &riemp, int &max, int &contatore)
{//Ricerca del Massimo

    max=vet[0];

    for(int i = 0; i < riemp; i++)
    {
        if (vet[i] > max)
            max = vet[i];
    }


    //Calcolo ripetizione del massimo

    for (int i=0;i<riemp;i++)
    {
        if (vet[i] == max)
        contatore++;
    }

    // Stampa valore massimo trovato e della sua ripetizione
    cout <<"Il valore massimo e':" << max << " ed e' ripetuto " <<contatore << "volte." << endl;
}
Ultima modifica effettuata da Daviducci0 10/02/12 15:43
aaa
10/02/12 18:16
pierotofy
    char *path[256];  //Dichiaro variabili
    int *vet[100];


Dovrebbe essere invece:

char path[256];
int vet[100];


Path e vet sono gia' definiti come puntatori (siccome sono degli array).
Il mio blog: piero.dev
10/02/12 18:55
Daviducci0
Già ho provato a fare così ma mi da questo errore:
(grazie per la pazienza, con te sono riuscito a capire meglio come funziona il tutto)

/home/davide/C++/Esame.cpp||In function ‘int main()’:|
/home/davide/C++/Esame.cpp|20|error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]|
/home/davide/C++/Esame.cpp|7|error:   initializing argument 2 of ‘void carica_vet(char*, int*, int&)’ [-fpermissive]|
/home/davide/C++/Esame.cpp|21|error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]|
/home/davide/C++/Esame.cpp|8|error:   initializing argument 1 of ‘void stampa_vet(int*, int&)’ [-fpermissive]|
/home/davide/C++/Esame.cpp|22|error: invalid conversion from ‘int’ to ‘int*’ [-fpermissive]|
/home/davide/C++/Esame.cpp|9|error:   initializing argument 1 of ‘void ricerca_max(int*, int&, int&, int&)’ [-fpermissive]|
||=== Build finished: 6 errors, 0 warnings ===|
aaa
10/02/12 20:55
pierotofy
Come mai chiami le funzioni in questa maniera?

carica_vet(path[256], vet[100], riemp);


Se passi l'intero array, devi passare solamente path... path[256] fa riferimento al 257esimo elemento di path. Stesso discorso per vet.

carica_vet(path, vet, riemp);

Ultima modifica effettuata da pierotofy 11/02/12 16:31
Il mio blog: piero.dev
11/02/12 9:33
Daviducci0
Finalmente ho capito come funziona!!! Grazie mille!!!
aaa