Matrice 8x8 che stampa un vettore con la somma delle colonne

di il
8 risposte

Matrice 8x8 che stampa un vettore con la somma delle colonne

Devo scrivere questo programma:

Scrivere un programma C++ che legga da tastiera una matrice 8×8 di interi
• Il programma dovrà stampare a video la matrice
• Calcoli e memorizzi in un vettore di 8 elementi la somma degli elementi di
ciascuna colonna della matrice: la somma degli elementi della prima colonna,
nel primo elemento del vettore, la somma degli elementi della seconda
colonna nel secondo elemento del vettore, etc.
• Stampi a video il vettore calcolato nel punto precedente
• Verifichi se esistono esattamente due colonne la cui somma degli elementi è
uguale a 100. In caso affermativo il programma deve stampi “somma uguale a
100”; in caso negativo “condizione non soddisfatta”

ma trovo problemi nella parte in cui devo fare la somma degli elementi di ogni colonna, il sottoprogramma per quella istruzione l'ho scritto in questo modo:
 void calcolaSommaColonna(int m[N][N]){
int i, j;
int somma; 
    for(i=0 ; i<N ; i++){
        for(j=0 ; j<N ; j++){
            somma[j] = 0; 
            somma[j] += somma[j]+m[i][j];
        }
    }
return;
}

int memorizzaInVettore(int m[N][N]){
int i,j, somma;
int v[N];

    for(i=0 ; i<N ; i++){
        for(j=0; j<N ; j++){
            v[N] = somma ;
        }
    }
    return v[N];
Il programma mi da errore gia nel caso in cui dichiaro "somma" , ma non capisco per quale motivo. Oltretutto non saprei in che altro modo scrivere questo sottoprogramma. Potreste aiutarmi? Grazie

8 Risposte

  • Re: Matrice 8x8 che stampa un vettore con la somma delle colonne

    "mi da errore" non vuol dire niente ...

    Come sempre, se non si è precisi nell'esporre il problema, non si può avere una risposta ...In ogni caso, somma deve essere un vettore, dato che lo usi come vettore ... quindi non

    int somma;

    ma

    int somma[N];

    Inoltre non lo devi azzerare con

    somma[j] = 0;

    subito prima che accumuli i valori altrimenti avrai sempre valori sbagliati. L'azzeramento va prima ...
  • Re: Matrice 8x8 che stampa un vettore con la somma delle colonne

    Ok perfetto, grazie
  • Re: Matrice 8x8 che stampa un vettore con la somma delle colonne

    Ho riscritto il programma in questo modo:
    #include <iostream>
    using namespace std;
    
    const int N = 2;
    
    void leggiMatrice(int m[N][N]){
    int i, j;
        cout << " leggi matrice " << endl;
        for (i=0 ; i<N ; i++){
            for (j=0 ; j<N ; j++){
                cin >> m[i][j];
            }
        }
    return;
    }
    void stampaMatrice(int m[N][N]){
    int i, j;
        for (i=0 ; i<N ; i++){
            for (j=0 ; j<N ; j++){
                cout << m[i][j] << "\t";
            }
            cout << endl; 
        }
    return;
    }
    
    int sommaColonna(int m[N][N]){
    int i,j;
    int somma[j];
    
        for (i=0 ; i<N ; i++){
            for (j=0 ; j<N ; j++){
                somma[j] = 0; 
                somma[j] += m[i][j]; 
            }
        } 
        return somma[j];
    }
    
    
    
    int main () {
    int m[N][N];
    
        leggiMatrice(m);
        stampaMatrice(m);
        cout << " vettore con somme " << sommaColonna(m) << endl; 
        
    system ("pause");
    }
    
    però non funziona lo stesso; nel momento in cui devo visualizzare la somma delle colonne nel vettore, mi da "vettore con somma = 2 ". In pratica legge come vettore somma la costante N che dichiaro a inizio programma...
  • Re: Matrice 8x8 che stampa un vettore con la somma delle colonne

    Dimmi un attimo ... ma tu segui un libro o qualcosa perché quello che scrivi indica che hai parecchie lacune di base ...

    1) nella somma dimensioni un vettore così

    int somma[j];

    e non ha senso dato che j è una variabile neanche inizializzata. Quanti elementi ti servono per quel vettore? Pensaci

    2) ti avevo già detto di rivedere questa parte

    somma[j] = 0;
    somma[j] += m[j];

    di codice perché non ha senso, ma non l'hai fatto ...

    3) la funzione sommaColonne restituisce un solo valore intero, addirittura scrivi

    return somma[j];

    che non ha assolutamente senso ...
  • Re: Matrice 8x8 che stampa un vettore con la somma delle colonne

    Allora ti spiego: io ho un problema con questa programmazione in c++ da moltissimo tempo. Fino alla parte del programma in cui non ci sono gli array bidimensionali, capisco perfettamente sempre cosa fare, nel momento in cui comincio la parte su questo tipo di array ci sono cose delle quali non trovo spiegazioni sufficienti a farmi capire, ne sui libri, ne su internet, per cui l'ultima spiaggia è stato questo forum per cercare di trovare una soluzione alternativa. Non riesco a trovare un modo per capire questi array.

    Per quanto riguarda il programma:
    1) credo di aver sbagliato a copiare il codice, perchè avevo scritto "int somma[N]"
    2) rivedere questa parte:
    somma[j] = 0;
    avevo letto male il commento sul "non" inizializzarla.
    somma[j] += m[j];
    non ho idea del perchè non abbia senso, non saprei come rivederla ne cosa modificare.
    3) non ha senso ciò che ho scritto, hai perfettamente ragione, devo correggerlo!

    in realta non so cosa andare a modificare nei programmi sugli array quando sbaglio, cioè faccio qualche cambio al programma finche non trovo magicamente la soluzione giusta...
  • Re: Matrice 8x8 che stampa un vettore con la somma delle colonne

    AliceInWonderland ha scritto:


    Non riesco a trovare un modo per capire questi array.
    Purtroppo il forum non potrà farti capire a forza. L'unico metodo è studiare, esercitarti ....
    1)
    Ok, cerca di fornire sempre il codice corretto che usi altrimenti facciamo confusione ...
    2) non ha senso ...
    Non ha senso fare delle somme se *subito prima* il risultato lo azzeri con

    somma[j] = 0;

    E qui, scusa, gli array non c'entrano nulla. E' solo una questione di logica ... se ad ogni giro azzeri e sommi, azzeri e sommi, azzeri e sommi ... cosa avrai alla fine?
    3)
    Se la funzione restituirà un solo valore int, vedrai solamente un solo valore.
    Ma le somme sono tante, in particolare sono N ... quindi dovrai restituire N valori.
    La cosa migliore è passare tra gli argomenti anche il vettore delle somme e modificare i suoi N valori. La funzione sarà di tipo void e sarà chiamata dal main. In seguito, nel main userai un ciclo per visualizzare tutti i valori del vettore somma.
    finche non trovo magicamente la soluzione giusta...
    No, così non funziona, se non rifletti su quello che fai non arriverai mai a soluzione
  • Re: Matrice 8x8 che stampa un vettore con la somma delle colonne

    Ho riscritto il codice in questo modo ma il problema ora è che le somme che fa sono sbagliate e non riesco a capire perchè...
    
    #include <iostream>
    using namespace std;
    
    const int N = 2;
    
    void leggiMatrice (int m[N][N]){
    int i, j;
        cout << " inserisci matrice " << endl;
        for (i=0 ; i<N ; i++){
            for(j=0 ; j<N ; j++){
                cin >> m[i][j];
            }
        } 
    return;
    }
    
    
    void stampaMatrice (int m[N][N]){
    int i, j;
    
        for (i=0 ; i<N ; i++){
            for(j=0 ; j<N ; j++){
                cout << m[i][j] << "\t";
            }
            cout << endl;
        } 
    return;
    }
    
    
    int memorizzaSommaColonne(int m[N][N], int v[N]){
    int i, j;
    int somma = 0;
        
        for (i=0 ; i<N ; i++){
            for (j=0; j<N ; j++){
            somma += m[i][j];
            v[j] = somma;
            }
        }
        return somma;
    }
    
    void stampaVettore (int v[N]){
    int j;
        for (j=0 ; j<N ; j++){
        cout << v[j] << endl; 
        } 
        return; 
    }
    
    int verifica(int v[N]){
    int i;
    int conta = 0;
        for (i=0 ; i<N ; i++){
           if (v[i] == 100){
               conta++;
           }
        }
        return conta;
    }
    
    int main () {
    int m[N][N], v[N];
    
        leggiMatrice(m);
        stampaMatrice(m);
        memorizzaSommaColonne(m,v);
        cout << endl;
        stampaVettore(v); 
        if (verifica(v) == 2){
        cout << "condizione soddisfatta " << endl;
        }else{
        cout << " condizione non soddisfatta " << endl; 
        }
    system("pause");
    }
    
    
  • Re: Matrice 8x8 che stampa un vettore con la somma delle colonne

    
    void memorizzaSommaColonne(int m[N][N], int v[N]){
    int i, j;
    
        for (j=0 ; j<N ; j++)
    	{
    		v[j]=0;
    
    		for (i=0; i<N ; i++)
    			v[j] += m[i][j];
        }
    }
    
Devi accedere o registrarti per scrivere nel forum
8 risposte