Vi propongo due codici dello stesso problema (specificato ma non penso sia utile come info perchè tale problema mi si presenta in ogni esercizio) :il primo codice è senza l'uso di prototipi e compila ed esegue in modo ottimale,il secondo tramite l'uso dei prototipi delle funzioni genera i seguenti errori
In function 'int main()':
17 10 [Error] invalid conversion from 'int (*)[3]' to 'int' [-fpermissive]
10 6 [Note] initializing argument 1 of 'void input(int)'
18 23 Error] invalid conversion from 'int (*)[3]' to 'int' [-fpermissive]
11 5 [Note] initializing argument 1 of 'int sommadiagprinc(int, int)'
19 22 [Error] invalid conversion from 'int (*)[3]' to 'int' [-fpermissive]
12 [Note] initializing argument 1 of 'int sommadiagsec(int, int)'
21 11 [Error] invalid conversion from 'int (*)[3]' to 'int' [-fpermissive]
13 6 [Note] initializing argument 1 of 'void stampa(int)'
ahimè l'uso dei prototipi di funzione mi è assegnato da traccia e quindi non posso esimermi dall'usarli: come posso risolvere?
codice senza prototipi:
//data una matrice quadrata acquisita da input scrivere un programma che stampi a video la somma degli elementi sulla diagonale principale e quello della diagonale secondaria
#include<iostream>
#include<math.h>
#define Q 3
using std::cin;
using std::cout;
void input (int A[Q][Q])
{ int i,j;
cout<<"\n inserire gli elementi della matrice: \n";
for(i=0;i<Q;i++)
{ for(j=0;j<Q;j++)
{ cout<<"\n elemento riga "<<i+1<<" colonna "<<j+1<<" ";
cin>>A[i][j];
}
}
}
int sommadiagprinc (int A[Q][Q], int &max)
{ int x,y;
max=0;
for(x=0;x<Q;x++)
{ for(y=0;y<Q;y++)
{ if(x==y)
{ max+=A[x][y];
}
}
}
return max;
}
int sommadiagsec(int A[Q][Q],int &max2)
{ int h,k;
max2=0;
for(h=0;h<Q;h++)
{ for(k=0;k<Q;k++)
{ if(h+k==Q-1)
{ max2+=A[h][k];
}
}
}
return max2;
}
void stampa(int A[Q][Q])
{ int v,t;
for(v=0;v<Q;v++)
{ cout<<"\n";
for(t=0;t<Q;t++)
{ cout<<" "<<A[v][t]<<" ";
}
cout<<"\n";
}
}
int main()
{ int A[Q][Q],max,max2;
input(A);
sommadiagprinc(A,max);
sommadiagsec(A,max2);
cout<<"\n la matrice inserita è: \n";
stampa(A);
cout<<"\n la somma degli elementi sulla diagonale principale è : "<<max;
cout<<"\n la somma degli elementi sulla diagonale secondaria è : "<<max2;
}
codice con prototipi:
//dtata una matrice quadrata acquisita da input scrivere un programma che stampi a video la somma degli elementi sulla diagonale principale e quello della diagonale secondaria
#include<iostream>
#include<math.h>
#define Q 3
using std::cin;
using std::cout;
void input (int);
int sommadiagprinc (int,int);
int sommadiagsec(int,int);
void stampa(int);
int main()
{ int A[Q][Q],max,max2;
input(A);
sommadiagprinc(A,max);
sommadiagsec(A,max2);
cout<<"\n la matrice inserita è: \n";
stampa(A);
cout<<"\n la somma degli elementi sulla diagonale principale è : "<<max;
cout<<"\n la somma degli elementi sulla diagonale secondaria è : "<<max2;
}
void input (int A[Q][Q])
{ int i,j;
cout<<"\n inserire gli elementi della matrice: \n";
for(i=0;i<Q;i++)
{ for(j=0;j<Q;j++)
{ cout<<"\n elemento riga "<<i+1<<" colonna "<<j+1;
cin>>A[i][j];
}
}
}
int sommadiagprinc (int A[Q][Q], int &max)
{ int x,y;
max=0;
for(x=0;x<Q;x++)
{ for(y=0;y<Q;y++)
{ if(x==y)
{ max+=A[x][y];
}
}
}
return max;
}
int sommadiagsec(int A[Q][Q],int &max2)
{ int h,k;
max2=0;
for(h=0;h<Q;h++)
{ for(k=0;k<Q;k++)
{ if(h+k==Q-1)
{ max2+=A[h][k];
}
}
}
return max2;
}
void stampa(int A[Q][Q])
{ int v,t;
for(v=0;v<Q;v++)
{ cout<<"\n";
for(t=0;t<Q;t++)
{ cout<<" "<<A[v][t]<<" ";
}
cout<<"\n";
}
}