[C] Somma elementi colonne di una matrice

Pubblicità

e_ale92

Utente Èlite
Messaggi
17,014
Reazioni
5,013
Punteggio
228
salve ragazzi,
devo fare un programma che chieda all'utente di stabilire la dimensione di una matrice (righe e colonne) e definita la dimensione, chieda di inserire dei valori interi per riempire la matrice.
a questo punto si deve stampare in un nuovo vettore, la somma delle colonne.
se ho una matrice 2righe 3colonne, alla fine dovrò stampare un vettore contenente 3somme... tutto chiaro??

io ho scritto questo, però appena compilo mi esce "somma colonne.exe ha smesso di funzionare" :(

Codice:
#include <stdio.h>
#include <stdlib.h>


main()
{
      int r,c,v[r][c];
      int i,j;
      int n;
      int somma, sc[j];
      
      printf("Inserisci il numero di righe della matrice: ");
      scanf("%d", &r);
      printf("\n");
      printf("Inserisci il numero di colonne della matrice: ");
      scanf("%d", &c);
      printf("\n");
      scanf("&d", &v[r][c]);
      
// procedura di riempimento della matrice  
    
      for (i=0 ; i<r-1 ; i++)
          for (j=0 ; j<c-1 ; j++)
          {
              printf("Inserisci un mumero: ");
              scanf("%d", &n);
              printf("\n");             
              v[i][j] = n;
          }


// procedura di somma dei valori delle colonne


      somma = 0;       
      for (j=0 ; j<c ; j++)
      {
          for (i=0 ; i<r ; i++)
              somma = somma + v[i][j];
              sc[j] = somma;     
              }    


// stampa del vettore contenente le somme
          
      for (j=0 ; j<c ; j++);
          printf("%d", sc[j]);     
         
      system("pause");
}

cosa c'è che non va??

i = indice di riga
j = indice di colonna
r = num righe
c = nume colonne
v = matrice da riempire
sc = vettore contenente le somme

Help!
 
Butch oddio!!!!!!....

---------- Post added at 10:54 ---------- Previous post was at 10:53 ----------

for(j=0 ; j<M ; j++)
{
somma = 0;
for(i=0; i<N; i++)
somma = somma + m[j] ;
somma[j] = somma ;
}
for(j=0; j<M; j++)
printf("Somma colonna %d = %d\n",
j+1, somma[j]) ;
 
Butch oddio!!!!!!....

---------- Post added at 10:54 ---------- Previous post was at 10:53 ----------

for(j=0 ; j<M ; j++)
{
somma = 0;
for(i=0; i<N; i++)
somma = somma + m[j] ;
somma[j] = somma ;
}
for(j=0; j<M; j++)
printf("Somma colonna %d = %d\n",
j+1, somma[j]) ;


non mi pare sia diverso dal mio codice :sisi:
 
non capisco l' utilita di "scanf("&d", &v[r][c]);" nelle prime righe del programma...
poi nei cicli for le variabili righe e colonne non vanno decrementate di uno, altrimenti ti perdi dei valori
 
non capisco l' utilita di "scanf("&d", &v[r][c]);" nelle prime righe del programma...
poi nei cicli for le variabili righe e colonne non vanno decrementate di uno, altrimenti ti perdi dei valori

intanto ho notato che ho sbagliato a scrivere perchè ho fatto &d e non %d, cmq quella riga l'ho eliminata... era una prova che avevo fatto e poi non l'ho tolta nella copia che ho scritto qui.

per r-1 e c-1 io l'ho fatto solo nella procedura di riempimento perchè tu inizi a riempire dalla riga/colonna 0 e quindi se hai 3 righe, queste sono 0,1,2 e quindi r-1.
nella procedura di somma, invece, come puoi notare non c'è perchè devo sommare tutti i valori e questi corrispondono (in numero) a quelli delle righe/colonne.

federico, io non ho errori, il problema è che il programma viene terminato da windows prima dell'esecuzione.
ti ricordi quando marco chiese al prof quella cosa della scrittura involontaria di una cella usata da windows? il prof rispose che avrebbe il programma sarebbe stato terminato da windows... a me succede la stessa cosa :(
 
Secondo me c'è qualche errore tipo quello che hai evidenziato prima . Prova a mettere delle printf prima dei vari blocchi per scovarlo perché a me funziona
 
intanto ho notato che ho sbagliato a scrivere perchè ho fatto &d e non %d, cmq quella riga l'ho eliminata... era una prova che avevo fatto e poi non l'ho tolta nella copia che ho scritto qui.

per r-1 e c-1 io l'ho fatto solo nella procedura di riempimento perchè tu inizi a riempire dalla riga/colonna 0 e quindi se hai 3 righe, queste sono 0,1,2 e quindi r-1.
nella procedura di somma, invece, come puoi notare non c'è perchè devo sommare tutti i valori e questi corrispondono (in numero) a quelli delle righe/colonne.

federico, io non ho errori, il problema è che il programma viene terminato da windows prima dell'esecuzione.
ti ricordi quando marco chiese al prof quella cosa della scrittura involontaria di una cella usata da windows? il prof rispose che avrebbe il programma sarebbe stato terminato da windows... a me succede la stessa cosa :(

Si ma il numero di righe è 3, quindi facento 3-1 il ciclo lo devi eseguire con la condizione <=, altrimenti lo esegue solo per 0 e 1 e il 2 niente
 
Forse non gli piacevano i valori null della matrice...
Comunque prendi il mio programma e vedi se ti funziona, così hai un raffronto:
#include <stdio.h>
#include <stdlib.h>

int main() {


int righe, colonne, somma;
int i = 0, j = 0, k = 1;



/*richiedo numero righe e colonne con controllo*/
do {
printf("Inserire righe e colonne della matrice: ");
scanf("%d%d", &righe, &colonne);
} while(righe == 0 || colonne == 0);


int matrice[righe][colonne];


/*riempio la matrice con valori random*/
for(i = 0; i < righe; i++) {
for(j = 0; j < colonne; j++) {
matrice[j] = rand() / 50000000;
}
}


/*stampa la matrice*/
printf("\nMatrice: \n");
for(i = 0; i < righe; i++) {
for(j = 0; j < colonne; j++) {
printf("[%d]", matrice[j]);
}
printf("\n");
}


printf("\n");
for(i = 0; i < colonne; i++) {
somma = 0;
for(j = 0; j < righe; j++) {
somma = somma + matrice[j];
}
printf("Somma colonna %d: %d\n", k, somma);
k++;
}


return 0;
}

 
Pubblicità
Pubblicità
Indietro
Top