Salve. Devo fare un programma che dati in input due array di n numeri interi prima li ordini e poi scriva a video gli elementi comuni. Il codice è questo:
#include <iostream>
#include <stdlib.h>
void crea_vett(int [],int);
void ordina(int [],int,int,int);
void scrivi_vett(int [],int,int);
using namespace std;
int main()
{
int a[50],b[50],n,i,x,c,m,y[50],h,k;
do
{
cout<<"Quanti numeri vuoi inserire?Massimo 50-Minimo 2 "<<endl;
cin>>n;
}while(n<2 || n>50);
cout<<"Questo e\' il primo vettore."<<endl;
crea_vett(a,n);
cout<<"Questo e\' il secondo vettore."<<endl;
crea_vett(b,n);
cout<<"Il primo vettore in ordine crescente e\' : ";
ordina(a,i,n,c);
scrivi_vett(a,i,n);
cout<<endl;
cout<<"Il secondo vettore in ordine crescente e\' : ";
ordina(b,i,n,c);
scrivi_vett(b,i,n);
cout<<endl;
for (i=0;i<n;i++)
{
for(h=0,k=0;h<n;h++)
{
if (a[i]==b[h])
{
y[k]=a[i];
k++;
}
}
}
cout<<"Gli elementi comuni sono:"<<endl;
for (k=0;k<n;k++)
{
cout<<y[k]<<" "<<endl;
}
system("pause");
return 0;
}
void crea_vett(int a[50],int y)
{
int h;
for(h=0;h<y;h++)
{
cout<<"Inserisci numero : ";
cin>>a[h];
}
}
void ordina(int a[50],int h,int f,int g)
{
int x,m;
for(h=0,m=1;h<f;h++,m++)
{
for (g=m;g<f;g++)
{
if (a[h]>a[g])
{
x=a[h];
a[h]=a[g];
a[g]=x;
}
}
}
}
void scrivi_vett(int a[50],int l,int n)
{
for(l=0;l<n;l++)
{
cout<<a[l]<<" ";
}
}
L'ordinamento funziona, e a video stampa solo un elemento in comune e dei numeri casuali quando però ce ne sono di più di elementi comuni. Non riesco proprio a capire l'errore. Spero possiate aiutarmi. Grazie in anticipo. Ciao