Informatica 2 Liceo Scientifico Scienze Applicate/Esercizi2
Esercizi
scambiare 2 righe matrice
modificaEsercizio n.8 Sviluppare una procedura che scambi i valori della riga i di una matrice con i valori della riga j (con i e j parametri della procedura). Sviluppare un programma principale che chiami la procedura.
#include <cstdlib>
#include <iostream>
/*Esercizio 10 Sviluppare una procedura che scambi i valori della riga i
di una matrice con i valori della riga j
(con i e j parametri della procedura).
Sviluppare un programma principale che chiami la procedura
*/
using namespace std;
void inserisci_matrice( int *mt, int m, int n);
void stampa_matrice( int *mt, int m, int n);
void scambia_riga_i_con_riga_j( int *mt, int m, int n, int i, int j );
int main(int argc, char *argv[])
{ int m,n,ri,rj;
cout<<" di quante righe e' composta la matrice ?";
cin >>m;
cout<<" di quante colonne e' composta la matrice ?";
cin >>n;
int mat[m][n];
inserisci_matrice((int*)mat,m,n);
cout<<"la matrice inserita' e':"<<endl;
stampa_matrice((int*)mat,m,n);
cout<<" seleziona una riga della matrice ?";
cin >>ri;
cout<<" seleziona una seconda riga della matrice ?";
cin >>rj;
scambia_riga_i_con_riga_j((int *)mat,m,n,ri,rj);
cout<<"la matrice con le righe scambiate e':"<<endl;
stampa_matrice((int*)mat,m,n);
system("PAUSE");
return EXIT_SUCCESS;
}
void inserisci_matrice( int *mt, int m, int n)
{ int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{cout<<"inserisci l'elemento di indice ["<<i<<","<<j<<"] ";
cin>>*(mt+i*n+j);
}
}
void stampa_matrice( int *mt, int m, int n)
{ int i,j;
for(i=0;i<m;i++)
{for(j=0;j<n;j++)
cout<<*(mt+i*n+j)<<"\t";
cout<<endl;
}
}
void scambia_riga_i_con_riga_j( int *mt, int m, int n, int i, int j )
{int k,temp;
for(k=0;k<n;k++)
{ temp=*(mt+i*n+k);
*(mt+i*n+k)=*(mt+j*n+k);
*(mt+j*n+k)=temp;
}
}
Soluzione breve
#include <cstdlib>
#include <iostream>
using namespace std;
void scambiorighe(int *mat,int nrig, int ncol,int x, int y);
void scambiorighe(int *mat,int nrig, int ncol,int x, int y)
{ int k;int temp;
for(k=0;k<ncol;k++)
{temp=*(mat+x*ncol+k);
*(mat+x*ncol+k)=*(mat+y*ncol+k);
*(mat+y*ncol+k)=temp;
}
}
int main(int argc, char *argv[])
{
int nr,nc;
cout<<"dimensione matrice"<<endl<<"righe: ";
cin>>nr;
cout<<"colonne: ";
cin>>nc;
int matrice[nr][nc];
int i,j;
for(i=0;i<nr;i++)
for(j=0;j<nc;j++)
matrice[i][j]=rand()%10;
for(i=0;i<nr;i++)
{for(j=0;j<nc;j++)
cout<<matrice[i][j]<<" ";
cout<<endl;
}
int rigax,rigay;
cout<<"che righe vuoi scambiare?";
cin>>rigax;
cin>>rigay;
scambiorighe((int*)matrice,nr,nc,rigax,rigay);
for(i=0;i<nr;i++)
{for(j=0;j<nc;j++)
cout<<matrice[i][j]<<" ";
cout<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
ricerca sottomatrici
modificaEsercizio n.9
Scrivere un programma atto ad identificare nell'interno di una matrice generica se ci sono delle sottomatrici 2x2 di soli valori nulli.
#include <cstdlib>
#include <iostream>
/* Esercizio 11 Scrivere un programma atto ad identificare nell'interno di una
matrice generica se ci sono delle sottomatrici 2x2 di soli valori nulli.
*/
using namespace std;
int main(int argc, char *argv[])
{ int m,n,i,j,conta;
cout<<" di quante righe e' composta la matrice ?";
cin >>m;
cout<<" di quante colonne e' composta la matrice ?";
cin >>n;
int mat[m][n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{cout<<"inserisci l'elemento di indice ["<<i<<","<<j<<"] ";
cin>>mat[i][j];
}
cout<<"la matrice inserita e'"<<endl;
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
cout<<mat[i][j]<<"\t";
cout<<endl;
}
for(i=0;i<=m-2;i++)
for(j=0;j<=n-2;j++)
if(mat[i][j]==0 &&mat[i+1][j]==0 &&mat[i][j+1]==0 &&mat[i+1][j+1]==0 )
cout<<"trovata sottomatrice 2*2 nulla con vertice il alto a sx di coord ["
<<i<<","<<j<<"]"<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Soluzione con l'uso delle funzioni
#include <cstdlib>
#include <iostream>
/* Esercizio 11 Scrivere un programma atto ad identificare nell'interno di una
matrice generica se ci sono delle sottomatrici 2x2 di soli valori nulli.
*/
using namespace std;
void inserisci_matrice( int *mt, int m, int n);
void stampa_matrice( int *mt, int m, int n);
void posizioni_sottomatrici2x2_nulle( int *mt, int m, int n, int posizioni[][2]
, int *quante );
int main(int argc, char *argv[])
{ int m,n,i,j,conta;
cout<<" di quante righe e' composta la matrice ?";
cin >>m;
cout<<" di quante colonne e' composta la matrice ?";
cin >>n;
int mat[m][n];
inserisci_matrice((int*)mat,m,n);
cout<<"la matrice inserita' e':"<<endl;
stampa_matrice((int*)mat,m,n);
int soluz[m*n][2];
int contaquante;
posizioni_sottomatrici2x2_nulle((int*)mat,m,n,soluz,&contaquante);
for(i=0;i<contaquante;i++)
cout<<"trovata sottomatrice 2*2 nulla con vertice il alto a sx di coord ["
<<soluz[i][0]<<","<<soluz[i][1]<<"]"<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
void inserisci_matrice( int *mt, int m, int n)
{ int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{cout<<"inserisci l'elemento di indice ["<<i<<","<<j<<"] ";
cin>>*(mt+i*n+j);
}
}
void stampa_matrice( int *mt, int m, int n)
{ int i,j;
for(i=0;i<m;i++)
{for(j=0;j<n;j++)
cout<<*(mt+i*n+j)<<"\t";
cout<<endl;
}
}
void posizioni_sottomatrici2x2_nulle( int *mt, int m, int n, int posizioni[][2]
, int *quante )
{int i,j;
*quante=0;
for(i=0;i<=m-2;i++)
for(j=0;j<=n-2;j++)
if(*(mt+i*n+j)==0 && *(mt+(i+1)*n+j)==0 && *(mt+i*n+j+1)==0
&& *(mt+(i+1)*n+j+1)==0 )
{ posizioni[*quante][0]=i;
posizioni[*quante][1]=j;
(*quante)++;
}
}
ricerca riga matrice max e min
modificaEsercizio n.10
Per un'assegnata matrice determinare la riga con la somma di elementi massima e quella con la somma minima. Effettuare lo scambio tra le righe precedentemente determinate.
#include <cstdlib>
#include <iostream>
/* Esercizio 12 Per un'assegnata matrice determinare la riga con la somma di
elementi massima e quella con la somma minima.
Effettuare lo scambio tra le righe precedentemente determinate.
*/
using namespace std;
int main(int argc, char *argv[])
{ int m,n,i,j,conta;
cout<<" di quante righe e' composta la matrice ?";
cin >>m;
cout<<" di quante colonne e' composta la matrice ?";
cin >>n;
int mat[m][n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{cout<<"inserisci l'elemento di indice ["<<i<<","<<j<<"] ";
cin>>mat[i][j];
}
cout<<"la matrice inserita e'"<<endl;
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
cout<<mat[i][j]<<"\t";
cout<<endl;
}
int rigamax=0;
int somma=0;
int sommamax = 0;
for(j=0;j<n;j++)sommamax=sommamax+mat[0][j];
for(i=1;i<m;i++)
{somma=0;
for(j=0;j<n;j++) somma=somma+mat[i][j];
if(somma>sommamax)
{ sommamax=somma;
rigamax=i;
}
}
cout<<"rigamax"<<rigamax<<endl;
int rigamin=0;
int sommamin = 0;
for(j=0;j<n;j++)sommamin=sommamin+mat[0][j];
for(i=1;i<m;i++)
{somma=0;
for(j=0;j<n;j++) somma=somma+mat[i][j];
if(somma<sommamin)
{ sommamin=somma;
rigamin=i;
}
}
cout<<"rigamin"<<rigamin<<endl;
int k,temp;
for(k=0;k<n;k++)
{ temp=mat[rigamax][k];
mat[rigamax][k]=mat[rigamin][k];
mat[rigamin][k]=temp;
}
cout<<"la matrice con le righe dalla somma max e min scambiate fra loro e'"<<endl;
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
cout<<mat[i][j]<<"\t";
cout<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
soluzione con l'uso delle funzioni
#include <cstdlib>
#include <iostream>
/* Esercizio 12 Per un'assegnata matrice determinare la riga con la somma di
elementi massima e quella con la somma minima.
Effettuare lo scambio tra le righe precedentemente determinate.
*/
using namespace std;
void inserisci_matrice( int *mt, int m, int n);
void stampa_matrice( int *mt, int m, int n);
void scambia_riga_min_con_riga_max( int *mt, int m, int n);
int main(int argc, char *argv[])
{ int m,n,i,j,conta;
cout<<" di quante righe e' composta la matrice ?";
cin >>m;
cout<<" di quante colonne e' composta la matrice ?";
cin >>n;
int mat[m][n];
inserisci_matrice((int*)mat,m,n);
cout<<"la matrice inserita' e':"<<endl;
stampa_matrice((int*)mat,m,n);
scambia_riga_min_con_riga_max((int *)mat,m,n);
cout<<"la matrice con le righe scambiate e':"<<endl;
stampa_matrice((int*)mat,m,n);
system("PAUSE");
return EXIT_SUCCESS;
}
void inserisci_matrice( int *mt, int m, int n)
{ int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{cout<<"inserisci l'elemento di indice ["<<i<<","<<j<<"] ";
cin>>*(mt+i*n+j);
}
}
void stampa_matrice( int *mt, int m, int n)
{ int i,j;
for(i=0;i<m;i++)
{for(j=0;j<n;j++)
cout<<*(mt+i*n+j)<<"\t";
cout<<endl;
}
}
void scambia_riga_min_con_riga_max( int *mt, int m, int n )
{int i,j;
int rigamax=0;
int somma=0;
int sommamax = 0;
for(j=0;j<n;j++)sommamax=sommamax+*(mt+0*n+j);
for(i=1;i<m;i++)
{somma=0;
for(j=0;j<n;j++) somma=somma+*(mt+i*n+j);
if(somma>sommamax)
{ sommamax=somma;
rigamax=i;
}
}
int rigamin=0;
int sommamin = 0;
for(j=0;j<n;j++)sommamin=sommamin+*(mt+0*n+j);
for(i=1;i<m;i++)
{somma=0;
for(j=0;j<n;j++) somma=somma+*(mt+i*n+j);
if(somma<sommamin)
{ sommamin=somma;
rigamin=i;
}
}
int k,temp;
for(k=0;k<n;k++)
{ temp=*(mt+rigamin*n+k);
*(mt+rigamin*n+k)=*(mt+rigamax*n+k);
*(mt+rigamax*n+k)=temp;
}
}
Incornicia la matrice
modificaEsercizio 11
Considerando una matrice bidimensionale come rappresentativa dei punti della superficie di un quadrato, scrivere un programma per porre a 0 tutti i valori del perimetro del quadrato o di un quadrato in esso contenuto.
#include <cstdlib>
#include <iostream>
/* Esercizio 13 Considerando una matrice bidimensionale come rappresentativa
dei punti della superficie di un quadrato, scrivere un programma per porre
a 0 tutti i valori del perimetro del quadrato o di un quadrato in esso
contenuto.
*/
using namespace std;
int main(int argc, char *argv[])
{int m,n,i,j,conta;
cout<<" di quante righe e' composta la matrice ?";
cin >>m;
cout<<" di quante colonne e' composta la matrice ?";
cin >>n;
int mat[m][n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
mat[i][j]=0;
int rq,cq,lq;
cout<<"inserisci le coordinate del quadrato vertice sx in alto "<<endl;
cout<<"riga?";
cin>>rq;
cout<<"colonna?";
cin>>cq;
cout<<"dimensione lato ?";
cin>>lq;
for(i=rq;i<m && i<rq+lq;i++)
{ mat[i][cq]=1;
mat[i][cq+lq-1]=1;
}
for(j=cq;j<n && j<cq+lq;j++)
{ mat[rq][j]=1;
mat[rq+lq-1][j]=1;
}
cout<<"la matrice inserita e'"<<endl;
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
cout<<mat[i][j];
cout<<endl;
}
system("PAUSE");
return EXIT_SUCCESS;
}
Soluzione con l'uso delle funzioni
#include <cstdlib>
#include <iostream>
/* Esercizio 13 Considerando una matrice bidimensionale come rappresentativa
dei punti della superficie di un quadrato, scrivere un programma per porre
a 0 tutti i valori del perimetro del quadrato o di un quadrato in esso
contenuto.
*/
using namespace std;
void stampa_matrice( int *mt, int m, int n);
void disegnaquadrato( int *mt, int m, int n, int rq, int cq,int lq );
int main(int argc, char *argv[])
{int m,n,i,j,conta;
cout<<" di quante righe e' composta la matrice ?";
cin >>m;
cout<<" di quante colonne e' composta la matrice ?";
cin >>n;
int mat[m][n];
int rq,cq,lq;
cout<<"inserisci le coordinate del quadrato vertice sx in alto "<<endl;
cout<<"riga?";
cin>>rq;
cout<<"colonna?";
cin>>cq;
cout<<"dimensione lato ?";
cin>>lq;
disegnaquadrato((int *) mat,m,n,rq,cq,lq);
cout<<"la matrice inserita e'"<<endl;
stampa_matrice((int*)mat,m,n);
system("PAUSE");
return EXIT_SUCCESS;
}
void disegnaquadrato( int *mt, int m, int n, int rq, int cq,int lq )
{int i,j;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
*(mt+i*n+j)=0;
for(i=rq;i<m && i<rq+lq;i++)
{ *(mt+i*n+cq)=1;
*(mt+i*n+cq+lq-1)=1;
}
for(j=cq;j<n && j<cq+lq;j++)
{ *(mt+rq*n+j)=1;
*(mt+(rq+lq-1)*n+j)=1;
}
}
void stampa_matrice( int *mt, int m, int n)
{ int i,j;
for(i=0;i<m;i++)
{for(j=0;j<n;j++)
cout<<*(mt+i*n+j);
cout<<endl;
}
}
ordinare un vettore
modificaEsercizio 12
Ordinamento di un vettore in modo crescente e decrescente.
Soluzione con l'uso delle funzioni
fusione di 2 vettori
modificaEsercizio 13
Fusione di due vettori.( cioè dati due vettori ordinati creare un terzo vettore con dimensione pari alla somma dei 2 vettori precedenti e che contenga gli stessi dati dei due vettori precedenti e che siano ordinati, non usare bubblesort perché la tecnica della fusione è O(n1+n2), per fare questo devi usare due indici i e j che puntino inizialmente alla posizione 0 di entrambi i 2 vettori iniziali identificare l'elemento più piccolo e scriverlo nel terzo vettore poi devi avanzare nel vettore da cui hai letto l'elemento quindi i++ o j++ e cercare nuovamente l'elemento più piccolo dei due puntati da i e j etc, se uno dei 2 vettori termina trascrivi la parte finale dell'altro sul terzo vettore.
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int i,n1;
cout<<"inserisci la dimensione del primo vettore";
cin>>n1;
int v1[n1];
cout<<"inserisci gli elementi del 1^ vettore, il vettore e'ordinato"<<endl;
for(i=0;i<n1;i++)
{cout<<"inserisci l'elemento di posizione ["<<i<<"]";
cin>>v1[i];
}
int n2;
cout<<"inserisci la dimensione del secondo vettore";
cin>>n2;
int v2[n2];
cout<<"inserisci gli elementi del 2^ vettore, il vettore e'ordinato"<<endl;
for(i=0;i<n2;i++)
{cout<<"inserisci l'elemento di posizione ["<<i<<"]";
cin>>v2[i];
}
int v3[n1+n2];
int pv1=0;
int pv2=0;
while(pv1<n1 && pv2<n2)
{ if(v1[pv1]<=v2[pv2])
{v3[pv1+pv2]=v1[pv1];
pv1++;
}
else
{v3[pv1+pv2]=v2[pv2];
pv2++;
}
}
while(pv1<n1)
{ v3[pv1+pv2]=v1[pv1];
pv1++;
}
while(pv2<n2)
{ v3[pv1+pv2]=v2[pv2];
pv2++;
}
cout<<"la fusione dei 2 vettori ha dato luogo a questo vettore"<<endl;
for(i=0;i<n1+n2;i++)
cout<<v3[i]<<",";
cout<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Soluzione con l'uso delle funzioni
#include <cstdlib>
#include <iostream>
/*Fusione di due vettori.( cioè dati due vettori ordinati creare un terzo
vettore con dimensione pari alla somma dei 2 vettori precedenti e che contenga
gli stessi dati dei due vettori precedenti e che siano ordinati, non usare
bubblesort perché la tecnica della fusione è O(n1+n2), per fare questo devi
usare due indici i e j che puntino inizialmente alla posizione 0 di entrambi
i 2 vettori iniziali identificare l'elemento più piccolo e scriverlo nel terzo
vettore poi devi avanzare nel vettore da cui hai letto l'elemento quindi i++
o j++ e cercare nuovamente l'elemento più piccolo dei due puntati da i e j
etc, se uno dei 2 vettori termina trascrivi la parte finale dell'altro sul
terzo vettore.
*/
using namespace std;
void inseriscivettore(int v[],int n);
void stampavettore(int v[],int n);
void fusionevettore(int a[],int na, int b[],int nb, int c[]);
int main(int argc, char *argv[])
{
int i,n1;
cout<<"inserisci la dimensione del primo vettore";
cin>>n1;
int v1[n1];
cout<<"inserisci gli elementi del 1^ vettore, il vettore e'ordinato"<<endl;
inseriscivettore(v1,n1);
int n2;
cout<<"inserisci la dimensione del secondo vettore";
cin>>n2;
int v2[n2];
cout<<"inserisci gli elementi del 2^ vettore, il vettore e'ordinato"<<endl;
inseriscivettore(v2,n2);
int v3[n1+n2];
fusionevettore(v1,n1,v2,n2,v3);
cout<<"la fusione dei 2 vettori ha dato luogo a questo vettore"<<endl;
stampavettore(v3,n1+n2);
system("PAUSE");
return EXIT_SUCCESS;
}
void inseriscivettore(int v[],int n)
{int i;
for(i=0;i<n;i++)
{cout<<"inserisci l'elemento del vettore di posizione ["<<i<<"]";
cin>>v[i];
}
}
void fusionevettore(int a[],int na, int b[],int nb, int c[])
{int i;
int pa=0;
int pb=0;
while(pa<na && pb<nb)
{ if(a[pa]<=b[pb])
{c[pa+pb]=a[pa];
pa++;
}
else
{c[pa+pb]=b[pb];
pb++;
}
}
while(pa<na)
{ c[pa+pb]=a[pa];
pa++;
}
while(pb<nb)
{ c[pa+pb]=b[pb];
pb++;
}
}
void stampavettore(int v[],int n)
{ int i;
for(i=0;i<n;i++)
cout<<v[i]<<",";
cout<<endl;
}
occorrenze matrice
modificaEsercizio n.13 Scrivere un programma per la ricerca di un elemento in una matrice assegnata e visualizzare a video la sua frequenza. Inoltre determinare il numero di volte che si ripete ogni numero
#include <cstdlib>
#include <iostream>
/*Esercizio 17 Scrivere un programma per la ricerca di un elemento in una
matrice assegnata e visualizzare a video la sua frequenza. Inoltre determinare
il numero di volte che si ripete ogni numero.
*/
using namespace std;
int main(int argc, char *argv[])
{ int m,n,i,j,x,y,numero,conta;
cout<<" di quante righe e' composta la matrice ?";
cin >>m;
cout<<" di quante colonne e' composta la matrice ?";
cin >>n;
int mat[m][n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
mat[i][j]=rand()%10;
cout<<"la matrice inserita e'"<<endl;
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
cout<<mat[i][j]<<"\t";
cout<<endl;
}
cout<<"inserisci il numero di cui vuoi calcolare la freq ";
cin>>numero;
conta=0;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
if (mat[i][j]==numero) conta++;
cout<<"la frequenza del numero"<<numero<<" e' di "<<conta<<" volte"<<endl;
int frequenze[m*n][2];
for(i=0;i<m*n;i++) {frequenze[i][0]=0; frequenze[i][1]=0;}
int k;
for(i=0;i<m;i++)
for(j=0;j<n;j++)
{ k=0;
while( frequenze[k][1]!=0 && mat[i][j]!= frequenze[k][0] ) k++;
if( frequenze[k][1] == 0) frequenze[k][0]=mat[i][j];
frequenze[k][1]++;
}
k=0;
while( frequenze[k][1] != 0)
{ cout<<"la frequenza del numero"<<frequenze[k][0]<<" e' di "
<<frequenze[k][1]<<" volte"<<endl;
k++;
}
system("PAUSE");
return EXIT_SUCCESS;
}
Soluzione con l'uso delle funzioni
#include <cstdlib>
#include <iostream>
/*Esercizio 17 Scrivere un programma per la ricerca di un elemento in una
matrice assegnata e visualizzare a video la sua frequenza. Inoltre determinare
il numero di volte che si ripete ogni numero.
*/
using namespace std;
int frequenza(int *m, int nc,int nr, int numeroricercare);
void frequenza2(int *m, int nc,int nr, int soluzioni[][2]);
int main(int argc, char *argv[])
{ int m,n,i,j,x,y,numero,conta;
cout<<" di quante righe e' composta la matrice ?";
cin >>m;
cout<<" di quante colonne e' composta la matrice ?";
cin >>n;
int mat[m][n];
for(i=0;i<m;i++)
for(j=0;j<n;j++)
mat[i][j]=rand()%10;
cout<<"la matrice inserita e'"<<endl;
for(i=0;i<m;i++)
{ for(j=0;j<n;j++)
cout<<mat[i][j]<<"\t";
cout<<endl;
}
cout<<"inserisci il numero di cui vuoi calcolare la freq ";
cin>>numero;
conta=frequenza((int *)mat,m,n,numero);
cout<<"la frequenza del numero"<<numero<<" e' di "<<conta<<" volte"<<endl;
int frequenze[m*n][2];
frequenza2((int *)mat, m, n, frequenze );
int k=0;
while( frequenze[k][1] != 0)
{ cout<<"la frequenza del numero"<<frequenze[k][0]<<" e' di "
<<frequenze[k][1]<<" volte"<<endl;
k++;
}
system("PAUSE");
return EXIT_SUCCESS;
}
int frequenza(int *m, int nc,int nr, int numeroricercare)
{int i,j,conta=0;
for(i=0;i<nr;i++)
for(j=0;j<nc;j++)
if (*(m+i*nc+j)==numeroricercare) conta++;
return conta;
}
void frequenza2(int *m, int nc,int nr, int soluzioni[][2])
{int i,j;
for(i=0;i<nc*nr;i++) {soluzioni[i][0]=0; soluzioni[i][1]=0;}
int k;
for(i=0;i<nr;i++)
for(j=0;j<nc;j++)
{ k=0;
while( soluzioni[k][1]!=0 && *(m+i*nc+j)!= soluzioni[k][0] ) k++;
if( soluzioni[k][1] == 0) soluzioni[k][0]=*(m+i*nc+j);
soluzioni[k][1]++;
}
}