[C++] Lettura interi da file

di il
23 risposte

23 Risposte - Pagina 2

  • Re: [C++] Lettura interi da file

    Hai usato = invece che == in alcuni punti ... prova a cambiare
    Comunque è sbagliato dichiarare la matrice in quel modo e non la stai stampando in quel modo
  • Re: [C++] Lettura interi da file

    Ho sostituito gli == con = dove serviva, e adesso mi da il risultato sperato. Come mai dici che la dichiarazione e la stampa sono errate? Sul mio libro (che mi convince sempre meno ) dice di fare così
  • Re: [C++] Lettura interi da file

    domecervo ha scritto:


    cout << mat[0][0] << endl;
    A te stampa la matrice così?
    
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    
    
    int main()
    {
        int i, limit, stop, n;
        int j, k, somma, resto;
        int coeff;
        int Vett[100];
    
    
    
        ifstream input("file1.in");
        if(input.is_open())
        {
    
            i=0;
            if(input.peek()!=EOF)
            {
                while(!input.eof())
                {
                    input >> Vett[i];
                    i++;
                }
                input.close();
    
            }
            else
                cout<<"Il file e' vuoto";
        }
        else
            cout<<"Errore nell'apertura del file";
    
    
    
        cout << "Inserisci un numero intero";
        cin >> n;
        int mat[n][n];
        j = 0;
        k = 0;
        coeff = n - 1;
        if (n>0)
        {
            resto = n % 2;
            if (resto == 0)
            {
                for (k=0; k<n; k++)
                {
                    for (j=0; j<n; j++)
                    {
                    mat[j][k]=0;
                    }
                }
                for (k=0; k<n; k++)
                {
                    for (j=0; j<n; j++)
                    {
                        if (j=k)
                            mat[j][k]=1;
                        somma = j + k -1;
                        if (somma=coeff)
                            mat[j][k]=1;
    
                    }
                }
            }
            cout << mat[0][0] << endl;
         
        }
        else
            cout << "Numero inserito errato";
    }
    
    Se vuoi dichiarare la matrice dinamicamente devi farlo in un altro modo ... almeno per quello che so io farlo così è sbagliato , dovresti usare il puntatore a matrice e allocarla
  • Re: [C++] Lettura interi da file

    Si, così mi da il risultato che volevo. Conta come dichiarazione dinamica anche int mat[n][n] con n dato? Non sarebbe dinamica se fosse int mat[][]?
  • Re: [C++] Lettura interi da file

    Io farei cosi per allocarla
    
     int **mat = new int * [n];
            for (int p = 0; p < n; p++)
                mat[p] = new int [n];
    
    e per liberare la memoria così
    
    for (int p = 0; p < n; p++)
                delete[] mat[p];
    delete[] mat;
    mat = NULL;
    
    Non credo proprio che il semplice cout<<mat[0][0] <<endl; stampi tutta la matrice formattata...
    
    #include <iostream>
    #include <fstream>
    using namespace std;
    
    
    
    int main()
    {
        int i, n;
        int j, k, somma, resto;
        int coeff;
        int Vett[100];
    
    
    
        ifstream input("file1.in");
        if(input.is_open())
        {
    
            i=0;
            if(input.peek()!=EOF)
            {
                while(!input.eof())
                {
                    input >> Vett[i];
                    i++;
                }
                input.close();
    
            }
            else
                cout<<"Il file e' vuoto\n";
        }
        else
            cout<<"Errore nell'apertura del file\n";
    
    
    
        cout << "Inserisci un numero intero\n";
        cin >> n;
    
        j = 0;
        k = 0;
        coeff = n-1;
        if (n>0)
        {
    
            int **mat = new int * [n];
            for (int p = 0; p < n; p++)
                mat[p] = new int [n];
    
    
            resto = n % 2;
            for (k=0; k<n; k++)
            {
                for (j=0; j<n; j++)
                {
                    mat[j][k]=0;
                }
            }
            if (resto == 0)
            {
                for (k=0; k<n; k++)
                {
                    for (j=0; j<n; j++)
                    {
                        if (j==k)
                            mat[j][k]=1;
                        somma = j + k;
                        if (somma==coeff)
                            mat[j][k]=1;
    
                    }
                }
            }
            for(i=0; i<n; i++)
            {
                for(j=0; j<n; j++)
                    cout << mat[i][j];
                cout<<endl;
            }
    
    
            for (int p = 0; p < n; p++)
                delete[] mat[p];
            delete[] mat;
            mat = NULL;
        }
    
        else
            cout << "Numero inserito errato\n";
    
    }
    
  • Re: [C++] Lettura interi da file

    Altrimente senza allocare nulla dichiari una matrice abbastanza grossa mat[100][100] e usi quella normalmente
    Ma mettere una dichiarazione in quel modo secondo me è sbagliato
  • Re: [C++] Lettura interi da file

    Sono tornato adesso a casa, domani provo la tua soluzione e vedo se ci capisco qualcosa. In effetti l'esercizio comanda di stampare la matrice diciamo come si disegnerebbe su un foglio, con gli elementi del file a riempire via via le colonne e, una volta finiti gli interi prelevati dal file, impostare a 0 e stampare tutti gli altri elementi.
  • Re: [C++] Lettura interi da file

    La matrice la puoi stampare così:
    
    for(i=0; i<n; i++)
            {
                for(j=0; j<n; j++)
                    cout << mat[i][j]<<" ";
                cout<<endl;
            }
    
  • Re: [C++] Lettura interi da file

    Ah, ho capito cosa volevi dire! Certo, lo so che con il mio codice venivano stampati solo 4 elementi, l'ho fatto per controllare se l'inizializzazione della matrice effettuata sopra era corretta
Devi accedere o registrarti per scrivere nel forum
23 risposte