Swalve come da titolo ripropongo per intero il messaggio di errore che mi genera dev nel main principale quando richiamo tutte le funzioni cui passo la matrice 2d A:
In function 'int main()':
67 [Error] cannot convert 'int** (*)[4]' to 'int**' for argument '1' to 'void input(int**)'
68 [Error] cannot convert 'int** (*)[4]' to 'int**' for argument '1' to 'void stampa(int**)'
69 [Error] cannot convert 'int** (*)[4]' to 'int**' for argument '1' to 'void creaid(int**, idelemento*)'
Sia data una matrice M di numeri reali memorizzata in un file di testo, che contiene nella prima riga i riempimenti di riga e di colonna, e nelle successive gli elementi di M (come illustrato negli esempi che seguono).
Si progettino tre funzioni:
- leggi_mat, che riceve in ingresso il nome di un file, e legge da quel file i riempimenti di riga e colonna ed i valori di una matrice di numeri reali;
- calc_vett_struct, che riceve in ingresso una matrice M ed i suoi riempimenti, e restituisce come parametro di uscita un vettore di strutture (VS) avente un numero di elementi al più pari al numero di righe della matrice. Ciascuna struttura deve infatti contenere tre campi: un campo reale (val) in cui va memorizzato il valore del primo elemento di ciascuna riga della matrice maggiore di quello immediatamente precedente, e due campi di tipo intero (rig e col) che contengono l'indice di riga e di colonna di tale valore: qualora su una riga non vi sia nessun elemento maggiore di quello immediatamente precedente non dovrà essere inserito nessun valore nel vettore di strutture (si vedano gli esempi che seguono);
- stampa_struct, che riceve in ingresso un vettore di strutture (ciascuna con un campo di tipo reale e due campi di tipo intero) e stampa a video gli elementi della struttura;
e si scriva un programma che, utilizzando queste funzioni, legga M da file, costruisca il vettore di strutture come sopra specificato e lo stampi nel caso in cui esso sia composto da almeno un elemento. Nel caso in cui il vettore di strutture non contenga elementi si stampi un opportuno messaggio di errore.
Il programma dovrà essere suddiviso in moduli, uno contenente prototipi e dichiarazioni, uno contenente le funzioni leggi_mat, calc_vett_struct, stampa_struct ed un terzo contenente il main.
#include<iostream>
#include<string.h>
#define R 5
#define C 4
using std::cin;
using std::cout;
typedef struct idelemento{
int valore,riga,colonna;
}idelemento;
void input (int **A)
{int i,j;
cout<<"\n inserire gli elementi della matrice \n";
for(i=0;i<R;i++)
{ cout<<" \n riga "<<i+1<<" : \n";
for(j=0;j<C;j++)
{ cout<<"\n colonna :"<<j+1<<" \n";
cin>>A[i][j];
}
}
}
void stampa (int **A)
{int h,k;
cout<<" \n la matrice inserita corrisponde a: \n";
for(h=0;h<R;h++)
{ cout<<"\n";
for(k=0;k<C;k++)
{ cout<<" "<<A[h][k]<<" ";
}
cout<<"\n";
}}
void creaid(int **A,idelemento *id)
{int x,y,p;
for(x=0;x<R;x++)
{ for(y=0;y<C;y++)
{
id[y].valore=A[x][y];
id[y].colonna=y;
id[y].riga=x;
}
}
}
void stampaid(idelemento *id)
{ int a;
cout<<"\n di seguito si stampa l'identificatori che individuano l'elemento univocamente nella matrice \n";
for(a=0;a<R*C;a++)
{ cout<<"\n il valore dell'elemento è: "<<id[a].valore<<" \n";
cout<<"\n posizionato alla : riga "<<id[a].riga<<" colonna "<<id[a].colonna<<" \n ";
}
}
int main()
{int A[R][C];
idelemento id[R*C];
input(A);
stampa(A);
creaid(A,id);
stampaid(id);
}
cosa significa e come posso risolvere?