Elementi comuni tra due array

di il
2 risposte

Elementi comuni tra due array

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

2 Risposte

  • Re: Elementi comuni tra due array

    Secondo me il problema è che non ti sei salvato da nessuna parte il numero di caratteri caricati in y[]; sempre secondo me risolveresti facilmente da solo inserendo qualche cout all'interno del penultimo ciclo.
    Il punto è che se hai un problema sull'ultimo ciclo perchè ci posti tutto il tuo programma e non ne fai invece una versione "semplificata" in cui vai subito al punto, caricando da codice i vettori a[] e b[] (li carichi già ordinati) e rimanendo quindi solo con gli ultimi due cicli; aiuteresti chi ti vuole aiutare!
  • Re: Elementi comuni tra due array

    Il programma non funziona perchè hai fatto alcuni errori.
    primo errore
    for (i=0;i<n;i++)
        {
           for(h=0,k=0;h<n;h++)
           {
              if (a[i]==b[h])
              {
                y[k]=a[i];
                 k++;
              }
           }
        }
    la variabile k ti serve per il conteggio dei numeri uguali giusto ?
    se metti la sua inizializzazione all' interno del secondo ciclo essa verrà sempre azzerata ad ogni cambio di i.
    quindi per risolvere il primo problema basta che metti l'inizializzazione prima del ciclo di i.
    secondo errore
    
     for (k=0;k<n;k++)
          {
             cout<<y[k]<<"   "<<endl;
          }
    adesso come avevamo detto k contiene il numero dei numeri uguali tra i due vettori
    non puoi utilizzare questa variabile come variabile di ciclo perchè altrimenti perdi il dato che avevi calcolato.
    quindi per risolverlo basta che scrivi :
    
     for (i=0;i<k;i++)
          {
             cout<<y[i]<<"   "<<endl;
          }
    spero di esserti stato di aiuto
Devi accedere o registrarti per scrivere nel forum
2 risposte