Ciao ho svolto questo esercizio di file in c e mi da i seguenti errori:
too few arguments to function `bool crea_vett_ind(int, const int (*)[20], int&, coordinate*, int&)'
at this point in file
Premetto che programmo da poco e mi scuso per errori grossolani
Questo è il testo dell'esrecizio:
Sia data una matrice quadrata di interi M memorizzata in un file di testo (mat.txt), che contiene nella prima riga il valore del riempimento di riga e colonna (riemp) e nelle successive gli elementi della matrice (come illustrato negli esempi che seguono).
Si progettino tre funzioni:
- leggi_mat, che legge da file il riempimento ed i valori di una matrice quadrata di interi;
- crea_vett_ind che riceve in ingresso il riempimento (riemp) ed i valori di una matrice quadrata di interi M ed un ulteriore valore intero K, e costruisce un vettore di strutture, vett_ind. Ciascuna struttura è composta da due campi entrambi di tipo intero, rig e col; ciascun elemento del vettore di strutture conterrà allora gli indici di riga e di colonna degli elementi di M il cui valore è maggiore di K. La funzione crea_vett_ind dovrà anche restituire un valore di ritorno booleano, che sarà pari a true se il vettore di strutture contiene almeno un elemento e false altrimenti (questo caso si verifica se non ci sono elementi di M maggiori di K);
- salva_vett_ind, con la quale stampare su file di testo un vettore di strutture;
e si scriva un programma che, utilizzando queste tre funzioni, legga riemp, M (dal file mat.txt) e K (da tastiera), provveda a costruire il vettore vett_ind e, usando opportunamente il valore booleano restituito dalla funzione crea_vett_ind, stampi il vettore vett_ind su file (output.txt) oppure stampi un opportuno messaggio di errore a video se il vettore vett_ind non contiene nessun elemento.
Il programma dovrà essere suddiviso in moduli, uno contenente prototipi e dichiarazioni, uno contenente le funzioni leggi_mat, crea_vett_ind e salva_vett_ind ed un terzo contenente il main
Il codice da me steso è il seguente
codice:const int max=20; typedef int matrice[max][max]; struct coordinate { int rig; int col; }; typedef coordinate vettore[max]; void leggi_mat(const matrice, int &, const char*); bool crea_vett_ind(int, const matrice, int &, vettore, int&); void salva_vett_ind(vettore, int, const char*);codice:#include <iostream> #include "lib.h" using namespace std; int main() { matrice mat; int riemp, riemp_vs, k; vettore vs; bool trovato; leggi_mat(mat, riemp, "input.txt"); crea_vett_ind(riemp, mat, k, vs, riemp_vs); if(crea_vett_ind()==true) { cout<<"esiste almeno un valore in vs"<<endl; salva_vett_ind(vs, riemp_vs, "output.txt"); } else cout<<"non esiste alcun elemento di vs maggiore di k da te inserito"<<endl; system("PAUSE"); return 0; }codice:#include <iostream> #include "lib.h" using namespace std; void leggi_mat(const matrice mat, int &riemp, const char *nomefile) { int i,j; FILE* fp_in=fopen("input.txt", "r"); if(!fp_in) { cout<<"file non trovato"<<endl; system("PAUSE"); exit(1); } fscanf(fp_in, "%d", &riemp); for(i=0;i<riemp;i++) for(j=0;j<riemp;j++) fscanf(fp_in, "%d", &riemp); fclose(fp_in); } bool crea_vett_ind(int riemp, const matrice mat, int &k, vettore vs, int &riemp_vs) { int i,j; bool trovato=false; cout<<"inserire valore di confronto per gli elementi della matrice"<<endl; cin>>k; for(i=0;i<riemp;i++) { for(j=0;j<riemp;j++) { if(k == mat[i][j]) { vs[riemp_vs].rig=i; vs[riemp_vs].col=j; trovato=true; riemp_vs++; } } } return trovato; } void salva_vett_ind(vettore vs, int riemp_vs, const char *filename) { int i; FILE* fp_out=fopen("output.txt", "w"); if(!fp_out) { cout<<"file non trovato"<<endl; system("PAUSE"); exit(1); } for(i=0;i<riemp_vs;i++) { fprintf(fp_out, "%d", vs[i].rig); fprintf(fp_out, "%d", vs[i].col); } fclose(fp_out); }

Rispondi quotando
