PDA

Visualizza la versione completa : [C] somma in una matrice


Skass89
29-12-2009, 08:26
ragà....dovrei fare un programma che mi visualizzi la somma della colonna con valore massimo di una matrice; ad esempio:

1 2 3
4 5 6
7 8 9

deve restituirmi 24 (cioè la somma della terza colonna in questo caso).
Mi servirebbe uno spunto per un algoritmo....non so da dove cominciare....

YuYevon
29-12-2009, 09:22
Devi considerare le righe o le colonne? Hai detto entrambe le cose.

Skass89
29-12-2009, 09:23
scusa...solo colonne...

YuYevon
29-12-2009, 09:32
E non è difficile. Scorri tutte le colonne della matrice e calcoli la somma dei loro elementi, poi per ogni somma calcolata, verifichi se essa è maggiore di quella precedente: se lo è, aggiorni il massimo altrimenti procedi.

Per scorrere le colonne e per calcolare la somma dei loro elementi, in sostanza devi utilizzare un ciclo simile a quello che utilizzi per la stampa ma con i for invertiti (e chiaramente facendo una somma anziché la stampa), solo che anziché scorrere le righe con il ciclo esterno e le colonne con quello interno, devi fare esattamente l'opposto.

Skass89
29-12-2009, 09:34
all'inversione dei for ci ero appena arrivato....ma la somma? :D

YuYevon
29-12-2009, 09:39
Per ogni colonna scorri gli elementi che le appartengono e li sommi. Una volta invertiti i for, al posto di quella printf() ci devi mettere un'istruzione di somma, poi ovviamente con qualche attenzione in più come l'inizializzazione della variabile per la somma a 0 all'inizio di ogni colonna, l'aggiornamento del massimo se necessario etc, ma se ti dico tutto io... prova a scrivere il codice, almeno poi avrai qualcosa su cui ragionare :)

Skass89
29-12-2009, 09:42
e che sintatticamente non mi viene niente...poi sto pure un po fuso ho passato la notte avanti a sto schermo....ok...4° caffè e ci provo....poi semmai ti posto quello che ne uscito....

Skass89
29-12-2009, 09:50
ecco è uscito un programma che somma l'intera matrice :mame:




#include <stdio.h>
#define nR 20
#define nC 20



int main(){
int a[nR][nC];
int i, j, nRi, nCi, total;

printf("numero desiderato righe = ");
scanf("%d", &nRi);
printf("numero desiderato colonne = ");
scanf("%d", &nCi);

for(i=0;i<nRi;i++){
for(j=0;j<nCi;j++){
printf("a[%d,%d] = ", i,j);
scanf("%d", &a[i][j]);
}
}
total=0;
for(j=0;j<nCi;j++){
for(i=0;i<nRi;i++){
total+=a[i][j];
}
}

printf("%5d\n", total);

printf("\n");


system("pause");
return 0;
}




ho voluto postartelo lo stesso perchè rileggendo meglio la tua ultima risposta forse abbiamo due visuali diverse di programma per come mi sono spiegato io

YuYevon
29-12-2009, 10:02
Originariamente inviato da Skass89
ho voluto postartelo lo stesso perchè rileggendo meglio la tua ultima risposta forse abbiamo due visuali diverse di programma per come mi sono spiegato io

"Trovare la massima somma tra gli elementi delle colonne della matrice" ?

Cioè con



1 2 3
4 5 6
7 8 9


con somme pari rispettivamente a 12, 15 e 18 (dalla prima all'ultima colonna), il programma deve restituire 18?

Se è così, l'impostazione del programma che hai postato è corretta. Ora quella variabile total chiamala sum (per esempio), e anziché inizializzarla a 0 una sola volta all'inizio del doppio for innestato inizializzala a 0 prima del ciclo interno (cioè per ogni colonna). Ogni volta che esci dal ciclo interno, nella variabile sum avrai la somma degli elementi della j-esima colonna. A quel punto non devi fare altro che introdurre una variabile max...

Skass89
29-12-2009, 10:10
#include <stdio.h>
#define nR 20
#define nC 20



int main(){
int a[nR][nC];
int i, j, nRi, nCi, total, max;

printf("numero desiderato righe = ");
scanf("%d", &nRi);
printf("numero desiderato colonne = ");
scanf("%d", &nCi);

for(i=0;i<nRi;i++){
for(j=0;j<nCi;j++){
printf("a[%d,%d] = ", i,j);
scanf("%d", &a[i][j]);
}
}

max=a[0][0];
for(j=0;j<nCi;j++){
total=0;
for(i=0;i<nRi;i++){
total+=a[i][j];
if(total>max)
max=total;
}
}
printf("%5d\n", max);

printf("\n");


system("pause");
return 0;
}




grazie!!! eccolo qui bello e funzionante! grazie ancora

Loading