Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [C++] Programma che trovi la media dei valori sulle colonne e li sommi

  1. #1
    Utente di HTML.it L'avatar di francesco.ricca
    Registrato dal
    Feb 2018
    residenza
    Napoli
    Messaggi
    13

    [C++] Programma che trovi la media dei valori sulle colonne e li sommi

    Ciao a tutti, eccomi di nuovo!

    Sto implementando un programma la cui traccia richiede (Data una matrice N*N) chiesta dall'utente, di calcolare la somma della media dei valori di ogni colonna.

    il codice che ho scritto è il seguente:
    codice:
    //data una matrice N*N, calcolare la somma della media dei valori di ogni colonna
    
    
    
    using namespace std;
    #include <iostream>
    #include <stdlib.h>
    
    
    int sommaColonne(int mat[20][20], int N){
    	
    	int somma=0;
    	int sum[100];
    	int j;
    	
    	for(int j=0;j<N;j++){
    		for (int i=0;i<N;i++){
    			somma=somma+mat[i][j];
    		
    		}
    			sum[j]=somma;
    	}
    	
    	return sum[j];
    }
    
    
    
    
    
    
    
    
    int main(){
    	
    	int i,j,N;
    	int mat[20][20];
    	float media=0;
    	int somma=0;
    	cout<<"inserire il numero di righe(=colonne):";
    	cin>>N;
    	
    	for(i=0;i<N;i++){
    		for(j=0;j<N;j++){
    			cout<<"inserire i valori della matrice:";
    			cin>>mat[i][j];
    		}
    	}
    	
    		for(j=0;j<N;j++){
    			cout<<"la media della colonna"<<" "<<j+1<<" "<<"e':";
    			
    			cout<<sommaColonne(mat,N)/N;
    			cout<<endl;
    		}
    		
    		
    		for (j=0;j<1;j++){
    			somma=somma+sommaColonne(mat,N)/N;
    		}
    	
    	
    	cout<<"la somma delle medie e':"<<somma;
    	
    	
    	return 0;
    }
    andando a compilare però, mi ritorna sempre il valore 4, immagino ci sia un problema nella funzione, qualcuno può aiutarmi?
    grazie in anticipo
    "Chi dice che è impossibile non dovrebbe disturbare chi c'è la sta facendo."
    -Albert Einstein

  2. #2
    Utente di HTML.it L'avatar di francesco.ricca
    Registrato dal
    Feb 2018
    residenza
    Napoli
    Messaggi
    13
    per favore aiuto!

    ho notato qualche errore nel finale del codice, anche se ancora non va.
    codice:
    using namespace std;
    #include <iostream>
    #include <stdlib.h>
    
    
    int sommaColonne(int mat[20][20], int N){
    	
    	int somma=0;
    	int sum[100];
    	int i;
    	
    	for(int j=0;j<N;j++){
    		for (int i=0;i<N;i++){
    			somma=somma+mat[i][j];
    		sum[i]=somma;
    		}
    			
    	}
    	
    	return sum[i];
    }
    
    
    
    
    
    
    
    
    int main(){
    	
    	int i,j,N;
    	int mat[20][20];
    	float media=0;
    	int somma=0;
    	cout<<"inserire il numero di righe(=colonne):";
    	cin>>N;
    	
    	for(i=0;i<N;i++){
    		for(j=0;j<N;j++){
    			cout<<"inserire i valori della matrice:";
    			cin>>mat[i][j];
    		}
    	}
    	
    		for(j=0;j<N;j++){
    			cout<<"la media della colonna"<<" "<<j+1<<" "<<"e':";
    			
    			cout<<sommaColonne(mat,N)/N-1;
    			cout<<endl;
    		}
    		
    		
    		for (j=0;j<N;j++){
    			somma=somma+sommaColonne(mat,N)/N-1;
    		}
    	
    	
    	cout<<"la somma delle medie e':"<<somma;
    	
    	
    	return 0;
    }
    Ultima modifica di francesco.ricca; 09-02-2018 a 10:13 Motivo: miglioramento del codice
    "Chi dice che è impossibile non dovrebbe disturbare chi c'è la sta facendo."
    -Albert Einstein

  3. #3
    Perchè N-1? N andava benissimo. Non c'entra che C/C++ indicizzino gli array partendo da zero e quindi l'ultimo elemento ha indice N-1. Per ottenere la media non devi dividere per quest'indice ma per il numero di totale di valori, che appunto è N.

    Detto questo, perchè ci sono due for nella funzione se vuoi sommare una singola colonna?

    Ho visto quello che intendevi fare, dato che c'è

    codice:
    sum[j]=somma;
    ma C++ non funziona mica così. In quella funzione tu calcoli la somma della prima colonna, poi la assegni a sum[j], intanto però non hai riazzerato somma, per cui alla seconda iterazione somma conterrà la somma precedente più la somma dei valori della seconda colonna

    Alla fine scorri tutte le colonne della matrice e ritorna e solo l'ultima sum[j], cioè la somma dell'ultima colonna ( che poi non è nemmeno così perchè non riazzeri somma ad ogni iterazione del for esterno ).

    Quella funzione o calcola le somme per ogni colonna, mettendole in un vettore, ma poi deve ritornare il vettore.

    Oppure la chiama per ogni colonna, gli passi l'indice della colonna in questione e la funzione calcolerà esclusivamente la somma della colonna interessata. Poi chi riceve tale somma farà la media e la sommerà alle medie delle colonne precedenti.

  4. #4
    Utente di HTML.it L'avatar di francesco.ricca
    Registrato dal
    Feb 2018
    residenza
    Napoli
    Messaggi
    13
    Quote Originariamente inviata da paolino_delta_t Visualizza il messaggio
    Quella funzione o calcola le somme per ogni colonna, mettendole in un vettore, ma poi deve ritornare il vettore.

    Oppure la chiama per ogni colonna, gli passi l'indice della colonna in questione e la funzione calcolerà esclusivamente la somma della colonna interessata. Poi chi riceve tale somma farà la media e la sommerà alle medie delle colonne precedenti.
    è questo il punto, il compito vuole la somma della media dei valori di ogni colonna, la mia idea qual'era quindi, creare una funzione somma, in cui pongo in un vettore il valore somma colonna 1; somma colonna 2, somma colonna3, etc.

    in modo che, ponendo poi il tutto in un ciclo for, e dividendo il valore per N, riottenevo la media di ogni singola colonna ed infine, sommavo i valori di questo vettore.

    Spiegami meglio come lo vedi tu perfavore
    "Chi dice che è impossibile non dovrebbe disturbare chi c'è la sta facendo."
    -Albert Einstein

  5. #5
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,072
    La funzione che fa la somma deve prevedere una sola for. Con quella devi fare la scansione di tutta la colonna, dalla prima all'ultima riga. La colonna resta fissa e indicata dal secondo parametro passato che non deve essere int N ma int col. La chiamata sarà

    media = sommaColonne(mat, j)/N;
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  6. #6
    Quote Originariamente inviata da francesco.ricca Visualizza il messaggio
    è questo il punto, il compito vuole la somma della media dei valori di ogni colonna, la mia idea qual'era quindi, creare una funzione somma, in cui pongo in un vettore il valore somma colonna 1; somma colonna 2, somma colonna3, etc.

    in modo che, ponendo poi il tutto in un ciclo for, e dividendo il valore per N, riottenevo la media di ogni singola colonna ed infine, sommavo i valori di questo vettore.

    Spiegami meglio come lo vedi tu perfavore
    Ho capito cosa volevi fare. Sommare tutti gli elementi della matrice per poi dividere. Si può fare, ma ovviamente va diviso tutto per N*N.

    Cioè tu hai per ogni colonna una somma Cn che normalmente divideresti per N per ottenere la media della colonna, quindi Cn/N.

    Poi sommi i vari Cn/N, cioè C1/N + C2/N + ... + Cn/N, ovvero c'hai la somma dei valori in tutte le colonne ma poi devi fare N divisioni per N, cioè dividere per N*N.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2018 vBulletin Solutions, Inc. All rights reserved.