Calcola valore righe matrice
salve a tutti
avrei bisogno di un chiarimento su questo esercizio
deve restituire 1 nel caso in cui la somma degli elementi di ciascuna riga della matrice è pari allo stesso valore costante , per tutte le righe della matrice
avrei bisogno di un chiarimento su questo esercizio
deve restituire 1 nel caso in cui la somma degli elementi di ciascuna riga della matrice è pari allo stesso valore costante , per tutte le righe della matrice
#include<iostream> using namespace std; const int N=4; int calcola_val_riga(int [N][N],int); bool ripetizione(int [N][N]); int main() { int a[N][N]={{7,1,1,0},{9,0,0,0},{6,1,1,1},{5,4,0,0}}; if(ripetizione(a)) return 1; else return 0; } int calcola_val_riga(int a[N][N],int r) { int somma=0; for(int j=0;j<N;j++) somma+=a[r][j]; return somma; } bool ripetizione(int a[N][N]) { int s=0; int i=0; while(i<N) { int j=0; while(j<N) { s+=a[i][j]; if(s!=calcola_val_riga(a,i)) return false; else j++; } i++; } return true; }
Risposte
Prima di tutto non capisco la scelta di scrivere il seguente:
Il valore di ritorno del main ha un significato particolare per il sistema operativo e non credo che fosse questa la richiesta del tuo professore. Immagino che il main debba semplicemente stampare il risultato e che la funzione debba invece restituire un int uguale a 0 o 1 a seconda che la matrice rispetti la condizione.
Il ciclo in ripetizione è comunque totalmente sbagliato. Stai confrontato la somma degli elementi della riga con s N volte, ma s continua a crescere ad ogni iterazione del ciclo e alla fine è uguale alla somma degli elementi della matrice. Il codice era in realtà molto più semplice, con un solo ciclo (quello esterno). Devi infatti semplicemente ottenere la somma degli elementi della prima riga e confrontarla con la somma delle altre righe. Qualcosa come il seguente (ho anche fatto le altre modifiche al codice):
if(ripetizione(a)) return 1; else return 0;
Il valore di ritorno del main ha un significato particolare per il sistema operativo e non credo che fosse questa la richiesta del tuo professore. Immagino che il main debba semplicemente stampare il risultato e che la funzione debba invece restituire un int uguale a 0 o 1 a seconda che la matrice rispetti la condizione.
Il ciclo in ripetizione è comunque totalmente sbagliato. Stai confrontato la somma degli elementi della riga con s N volte, ma s continua a crescere ad ogni iterazione del ciclo e alla fine è uguale alla somma degli elementi della matrice. Il codice era in realtà molto più semplice, con un solo ciclo (quello esterno). Devi infatti semplicemente ottenere la somma degli elementi della prima riga e confrontarla con la somma delle altre righe. Qualcosa come il seguente (ho anche fatto le altre modifiche al codice):
#include<iostream> using namespace std; const int N=4; int calcola_val_riga(int [N][N],int); int ripetizione(int [N][N]); int main() { int a[N][N]={{7,1,1,0},{9,0,0,0},{6,1,1,1},{5,4,0,0}}; cout << "ripetizione(a) = " << ripetizione(a) << endl << endl; return 0; } int calcola_val_riga(int a[N][N],int r) { int somma=0; for(int j=0;j<N;j++) somma+=a[r][j]; return somma; } int ripetizione(int a[N][N]) { int s=0; int i=0; if (N > 0) { s = calcola_val_riga(a, 0); i++; } while(i < N) { if(s != calcola_val_riga(a, i)) return 0; else i++; } return 1; }
ti ringrazio
ora ho capito dove avevo sbagliato
grazie ancora
ora ho capito dove avevo sbagliato
grazie ancora
Salve maschulillo,
in C la cosa è molto più semplice, utilizzando il concetto basilare del flag (o bandiera tecnica) che non sarebbe altro che una variabile ausiliare alla quale si ricorre.
Cordiali saluti
in C la cosa è molto più semplice, utilizzando il concetto basilare del flag (o bandiera tecnica) che non sarebbe altro che una variabile ausiliare alla quale si ricorre.
Cordiali saluti