RISOLTO somma colonne di una matrice

Pubblicità
Stato
Discussione chiusa ad ulteriori risposte.

Andrea :)

Nuovo Utente
Messaggi
3
Reazioni
1
Punteggio
2
Salve, sto cercando di completare un codice contente delle matrici la cui funzione sta nel:
-caricamento
-stampa
-somma delle righe
-somma delle colonne
di una matrice.
Sono riuscito a completare tutte le parti, però dopo che esegue la stampa del contenuto inserito nelle matrici, e delle somme svolte, o notato che il risultato dato a riguardo della
somma delle colonne della matrice non è coretto. Qualcuno potrebbe darmi una mano a capire quale potrebbe essere il problema?
Grazie in anticipo

CODICE IN LINGUAGGIO C
C:
#include <stdio.h>
#include <stdlib.h>
#define MAXR 10
#define MAXC 10

void Caricamento(int *nR, int *nC, int MAT[MAXR][MAXC]);
void Stampa(int nR, int nC, int MAT[MAXR][MAXC]);
void SommaR(int nR, int nC, int MAT[MAXR][MAXC]);
void SommaC(int nR, int nC, int MAT[MAXR][MAXC]);

int main()
{
    int NR,NC,Mat[MAXR][MAXC];

    Caricamento(&NR,&NC,Mat);
    Stampa(NR,NC,Mat);
    SommaR(NR,NC,Mat);
    SommaC(NR,NC,Mat);
    return 0;
}

void Caricamento(int *nR, int *nC, int MAT[MAXR][MAXC])
{
    int i,j;
    do
    {
        printf("Inserisci numero di righe:");
        scanf("%d", nR);
        if(*nR>10)
        {
            printf("ERRORE");
        }
    }while(*nR>10);
    do
    {
        printf("Inserisci numero di colonne:");
        scanf("%d", nC);
        if(*nC>10)
        {
            printf("ERRORE");
        }
    }while(*nC>10);

    for(i=0;i<*nR;i++)
    {
        for(j=0;j<*nC;j++)
        {
            printf("MATRICE(%d, %d) ",i, j);
            scanf("%d", &MAT[I][j]);
        }
    }
}

void Stampa(int nR, int nC, int MAT[MAXR][MAXC])
{
    int i,j;
     for(i=0;i<nR;i++)
    {
        for(j=0;j<nC;j++)
        {
            printf("%d\t", MAT[I][j]);
        }
        printf("\n");
    }
}

void SommaR(int nR, int nC, int MAT[MAXR][MAXC])
{
    int VR[MAXR],i,j;
    for(i=0;i<nR;i++)
    {
        VR[I]=0;
        for(j=0;j<nC;j++)
        {
            VR[I]=VR[I]+MAT[I][j];
        }
    }
    printf("SOMMA RIGHE:\n");
        for(i=0;i<nR;i++)
        {
            printf("riga %d = %d\n",i+1, VR[I]);
        }
}

void SommaC(int nR, int nC, int MAT[MAXR][MAXC])
{
    int i,j,VC[MAXC];
    for(i=0;i<nC;i++)
    {
            VC[I] = 0;

    for(j=0;j<nC;j++)
    {
        for(i=0;i<nR;i++)
            {
                VC[j]=VC[j]+MAT[I][j];
            }
    }
    }
    printf("SOMMA DELLE COLONNE:\n");
    for(i=0;i<nC;i++)
    {
        printf("colonna %d = %d\n",i+1,VC[I]);
    }

}
 
Ultima modifica da un moderatore:
Per favore usa la formattazione, leggi le regole di sezione.

Non ho letto con attenzione, ma in tutto il tuo codice usi sempre la variabile MAT specificando solo un indice (solo una coppia di parentesi quadre), ne devi usare due, uno per le righe e uno per le colonne. Il linguaggio C te lo lascia fare perché il C interpreta MAT come un puntatore (che è sia una forza che una debolezza del linguaggio)
 
Per favore usa la formattazione, leggi le regole di sezione.

Non ho letto con attenzione, ma in tutto il tuo codice usi sempre la variabile MAT specificando solo un indice (solo una coppia di parentesi quadre), ne devi usare due, uno per le righe e uno per le colonne. Il linguaggio C te lo lascia fare perché il C interpreta MAT come un puntatore (che è sia una forza che una debolezza del linguaggio)
Scusa se non ho usato la formattazione, lo farò.
Comunque non sono riuscito a trovare la variabile MAT segnata con una sola coppia di parentesi, ho controllato diverse volte e credo di averla sempre segnata con 2 parentesi (quindi come una matrice
e non come un contatore).
 
Scusa se non ho usato la formattazione, lo farò.
Comunque non sono riuscito a trovare la variabile MAT segnata con una sola coppia di parentesi, ho controllato diverse volte e credo di averla sempre segnata con 2 parentesi (quindi come una matrice
e non come un contatore).

Probabilmente è stato tratto in inganno dai problemi dovuti alla formattazione. ?

Non l'ho ancora provato, ma a occhio il tuo problema penso sia qui:
Codice:
 = 0;

    for(j=0;j<nC;j++)
    {
        for(i=0;i<nR;i++)
            {
                VC[j]=VC[j]+MAT[I][j];
            }
    }
    }

stai usando due volte la variabile i, è un errore. Il ciclo interno deve usare una variabile con un nome differente; ma oltretutto, perchè non usate C99? Dichiarando direttamente la variabile nell'inizializzazione del ciclo, non avresti avuto questo problema (il compilatore avrebbe visto la doppia inizializzazione).

Al di là di questo, puoi anche cambiare l'impostazione. Non ho capito perchè utilizzi 3 cicli innestati, ne bastano due, come giustamente fai già nelle righe.
Quindi una cosa tipo:

C:
int sumCol[MAXR] = {0}; // inizializzi MAXR elementi a 0
for(int i=0; i<nC; i++) {
    for(int j=0; j<nR; j++) {
        sumCol[i] += MAT[j][i];
    }
}

Se non puoi usare C99 come non detto, dichiara pure le variabili prima del ciclo.
 
Probabilmente è stato tratto in inganno dai problemi dovuti alla formattazione. ?

Non l'ho ancora provato, ma a occhio il tuo problema penso sia qui:
Codice:
 = 0;

    for(j=0;j<nC;j++)
    {
        for(i=0;i<nR;i++)
            {
                VC[j]=VC[j]+MAT[I][j];
            }
    }
    }

stai usando due volte la variabile i, è un errore. Il ciclo interno deve usare una variabile con un nome differente; ma oltretutto, perchè non usate C99? Dichiarando direttamente la variabile nell'inizializzazione del ciclo, non avresti avuto questo problema (il compilatore avrebbe visto la doppia inizializzazione).

Al di là di questo, puoi anche cambiare l'impostazione. Non ho capito perchè utilizzi 3 cicli innestati, ne bastano due, come giustamente fai già nelle righe.
Quindi una cosa tipo:

C:
int sumCol[MAXR] = {0}; // inizializzi MAXR elementi a 0
for(int i=0; i<nC; i++) {
    for(int j=0; j<nR; j++) {
        sumCol[i] += MAT[j][i];
    }
}

Se non puoi usare C99 come non detto, dichiara pure le variabili prima del ciclo.
Sicuramente :D
Comunque grazie mille hai notato subito il problema e dopo aver provato la tua soluzione posso
dire che ora funziona, quindi era sicuramente un problema nell'inizializzare gli elementi a 0
 
Sicuramente :D
Comunque grazie mille hai notato subito il problema e dopo aver provato la tua soluzione posso
dire che ora funziona, quindi era sicuramente un problema nell'inizializzare gli elementi a 0
Prego!
I problemi erano 2 in realtà: l'inizializzazione e il fatto che usavi la medesima variabile. Molto probabilmente c'erano anche problemi nell'accedere al ciclo più interno a causa del valore di 'i'.
 
Stato
Discussione chiusa ad ulteriori risposte.
Pubblicità
Pubblicità
Indietro
Top