[C++] errore codice
Praticamente dopo aver letto una matrice da file quadrata di interi ho creato una funzione che cerca il minimo in un vettore di interi e restituisce l'indice del valore minimo e con l'aiuto di un'altra funzione devo sommare agli elementi della matrice con indice dato dall'altra funzione una costante.
#include <cstdlib> #include <iostream> #include <fstream> using namespace std; typedef int matrice [50][50]; typedef int vettore [50]; void leggi_mat( matrice , int&); void leggi_mat( matrice mat, int&riemp) { ifstream input; int i,j; input.open( "mat.txt"); if(input.fail()) exit(1); input>>riemp; for(i=0;i<riemp;i++) for(j=0;j<riemp;j++) input>>mat[i][j]; input.close (); } int calc_ind_min( vettore v,int riemp) { int i; int pos_min; int min=v[0]; for(i=0;i<riemp;i++) if( v[i]<min){ min=v[i]; pos_min=i; } return pos_min; } void somma( matrice mat, int riemp, int t){ t=4; int i,j; for(i=0;i<riemp;i++) for(j=0;j<riemp;j++) if( j==calc_ind_min( mat[i],riemp)){ mat[i][j]= mat[i][j]+t;} } int main(int argc, char *argv[]) { matrice m; int r,k,t; leggi_mat( m , r) ; somma(m, r, t); system("PAUSE"); return EXIT_SUCCESS; }
Risposte
Ho sistemato l'indentazione del codice, cosi è più leggibile.
Il codice compila con due warning, tutti e due per variabile non inizializzata (r e t)
Ho due domande:
1) come mai nella funzione leggi_mat metti l'input in int &riemp?
2) come mai hai t=4 nella funzione somma e non viene passato come argomento? Se non viene mai inizializzato viene dato warning.
puoi mettere un esempio di file mat.txt cosi vedo come si comporta a runtime?
(A te che errore da?)
Il codice compila con due warning, tutti e due per variabile non inizializzata (r e t)
Ho due domande:
1) come mai nella funzione leggi_mat metti l'input in int &riemp?
2) come mai hai t=4 nella funzione somma e non viene passato come argomento? Se non viene mai inizializzato viene dato warning.
puoi mettere un esempio di file mat.txt cosi vedo come si comporta a runtime?
(A te che errore da?)
#include <cstdlib> #include <iostream> #include <fstream> using namespace std; typedef int matrice [50][50]; typedef int vettore [50]; void leggi_mat( matrice , int&); void leggi_mat( matrice mat, int &riemp) { ifstream input; input.open( "mat.txt"); if (input.fail()) { exit(1); } input >> riemp; for (int i = 0; i < riemp; i++) { for (int j = 0; j < riemp; j++) { input >> mat[i][j]; input.close (); } } } int calc_ind_min ( vettore v, int riemp) { int pos_min; int min = v[0]; for (int i = 0; i < riemp; i++) { if ( v[i] < min ){ min = v[i]; pos_min = i; } } return pos_min; } void somma ( matrice mat, int riemp, int t) { t = 4; for (int i = 0; i < riemp; i++) { for (int j = 0; j < riemp; j++) { if ( j == (calc_ind_min( mat[i], riemp)) ) { mat[i][j] = mat[i][j] + t; } } } } int main (int argc, char *argv[]) { matrice m; int r,k,t; leggi_mat( m , r) ; somma(m, r, t); system("PAUSE"); return EXIT_SUCCESS; }
A me va bene, compila tutto . Solo che se provo a stampare la nuova matrice mi da uno 0 a video.. Cmq il mio file di testo è
2
1 2
3 4
Per le tue domande, sono miei errori scusa...
2
1 2
3 4
Per le tue domande, sono miei errori scusa...
Riguardo a riemp lo scopo è che il valore di riemp sia visto nel main. Puoi o far così o far ritornare il valore. Dovresti comunque controllare che riemp non si troppo grande.
Per quanto riguarda t=4 direi che non ha alcun senso, dovrebbe essere inializzata nel main.
Comunque
Per quanto riguarda t=4 direi che non ha alcun senso, dovrebbe essere inializzata nel main.
Comunque
(calc_ind_min( mat[i], riemp))è indipendente da \(\displaystyle j \), quindi dovresti spostarlo al di fuori del secondo for. Insomma lo stai trasformando da un algoritmo \(\displaystyle 2n^2 \) in uno \(\displaystyle n^3 \).