Somma della colonna di una matrice

di il
7 risposte

Somma della colonna di una matrice

Salve a tutti. Sono alle prime armi con C++ e ho trovato difficolta' in questo esercizio:
"Scrivere un metodo che prenda in input un parametro formale matrice A di interi
di dimensioni nxn ed un double w, e restituisca un valore booleano true se esiste
almeno una colonna della matrice A per cui il rapporto tra la somma degli elementi
della colonna stessa e la somma degli elementi della diagonale principale di A sia
maggiore di w."
Di seguito vi allego il codice che son riuscito a fare fin ora:
#include <iostream>
#include <cstdlib>
#define n 5

using namespace std;

bool esercizio(int A[][n], double w)
{
    int colum[n];
    int diagonale=0;
    int somma_colonna=0;
    for(int i=0; i<n; i++)
        for(int j=0; j<n; j++)
        if(i==j)
        diagonale+=A[i][j];
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<n; j++)
        {
            somma_colonna+=A[j][i];
        if((somma_colonna/diagonale)>w)
            return true;
        }
    }
        return false;


}


int main()
{
    return 0;
}
Il problema e' che non riesco a sommare soltanto una colonna, perche' cosi come e' scritto somma tutte le colonne e non una alla volta.
Se qualcuno e' disposto a darmi un suggerimento lo ringrazierei molto

7 Risposte

  • Re: Somma della colonna di una matrice

    Visto che il rapporto tra somma colonna e somma diagonale è tanto più grande quanto somma colonna lo è quello che farei è cercare prima la somma colonna più grande, dopo averla trovata fare il confronto
  • Re: Somma della colonna di una matrice

    Allora:
    - perchè includi la libreria cstdlib?
    - a cosa serve l'array colum?
    - per calcolare la somma degli elementi della diagonale principale basta un solo for... è inutile usare due for per poi controllare se i==j;
    - la seguente condizione è sbagliata
    if((somma_colonna/diagonale)>w)
    conosci la differenza tra divisione intera e non?

    kevin712 ha scritto:


    Il problema e' che non riesco a sommare soltanto una colonna, perche' cosi come e' scritto somma tutte le colonne e non una alla volta.
    Mi sembra ovvio visto che non riazzeri la somma una volta terminata una colonna!
  • Re: Somma della colonna di una matrice

    Nippolo ha scritto:


    Allora:
    - perchè includi la libreria cstdlib?
    - a cosa serve l'array colum?
    - per calcolare la somma degli elementi della diagonale principale basta un solo for... è inutile usare due for per poi controllare se i==j;
    - la seguente condizione è sbagliata
    if((somma_colonna/diagonale)>w)
    conosci la differenza tra divisione intera e non?

    kevin712 ha scritto:


    Il problema e' che non riesco a sommare soltanto una colonna, perche' cosi come e' scritto somma tutte le colonne e non una alla volta.
    Mi sembra ovvio visto che non riazzeri la somma una volta terminata una colonna!
    Grazie per la risposta.
    Scusa per gli errori presenti nel mio codice ma sono alle primissime armi, per quanto riguarda la divisione devo convertire le variabili int in double
    cosi'?
    int somma;
    double som = (double) somma;
    E perche' dovrei utilizzare soltanto un ciclo for per calcolare la diagonale della matrice?
    Grazie ancora
  • Re: Somma della colonna di una matrice

    per quanto riguarda la divisione devo convertire le variabili int in double
    cosi'?
    int somma;
    double som = (double) somma;
    Certo, puoi anche utilizzare il cast esplicito direttamente nella condizione dell'if.
    E perche' dovrei utilizzare soltanto un ciclo for per calcolare la diagonale della matrice?
    for(int i=0; i<n; i++)
    {
        diagonale+=A[i][i];
    }
  • Re: Somma della colonna di una matrice

    Nippolo ha scritto:


    per quanto riguarda la divisione devo convertire le variabili int in double
    cosi'?
    int somma;
    double som = (double) somma;
    Certo, puoi anche utilizzare il cast esplicito direttamente nella condizione dell'if.
    E perche' dovrei utilizzare soltanto un ciclo for per calcolare la diagonale della matrice?
    for(int i=0; i<n; i++)
    {
        diagonale+=A[i][i];
    }
    Grazie mille
  • Re: Somma della colonna di una matrice

    Salve a tutti, io devo fare lo stesso esercizio di Kevin, ho creato un codice ma mi blocco nel momento in cui devo verificare che esista almeno una colonna la cui somma degli elementi diviso la somma degli elementi della diagonale maggiore sia maggiore del double w. Sostanzialmente come faccio a verificare che esista questa colonna? ho creato un ciclo for per la somma della colonna, ma mi somma solo la prima colonna, come faccio a controllare tutte le somme delle colonne e vedere se esiste questa colonna tale che valga quella relazione?
  • Re: Somma della colonna di una matrice

    Non scrivere nel thread di un altro utente, creane uno tuo, anche se l'esercizio è uguale. Altrimenti, con tutti quelli che hanno l'esercizio uguale, il thread diventa di mille pagine.

    E comunque posta il codice che hai scritto e indica meglio il problema.
Devi accedere o registrarti per scrivere nel forum
7 risposte