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);
}