C++ Esercizio Elimina elementi duplicati
Ciao a tutti,
è per casualità che ho scoperto questo forum e mi complimento.
Sono un laureando ma non in informatica e mi tocca fare questo penultimo esame.
L'esame si basa sul linguaccio C++ non in maniera molto dettagliato ma aimè determinate cose bisogna conoscerle.
Ho svolto un esercizio tramite l'ausilio di libri e appunti ma ho diversi dubbi.
Qualcuno, cortesemente, può inserirmi dei commenti e darmi delucidazioni in merito?
grazie
è per casualità che ho scoperto questo forum e mi complimento.
Sono un laureando ma non in informatica e mi tocca fare questo penultimo esame.
L'esame si basa sul linguaccio C++ non in maniera molto dettagliato ma aimè determinate cose bisogna conoscerle.
Ho svolto un esercizio tramite l'ausilio di libri e appunti ma ho diversi dubbi.
Qualcuno, cortesemente, può inserirmi dei commenti e darmi delucidazioni in merito?
grazie
/*Prova del 18.06.2010 Siano dati in ingresso i riempimenti n1 ed n2 ed i valori di due vettori V1 e V2 di interi. Si scriva un programma che, per ogni elemento di V1, verifichi se e' presente in V2 ed in caso positivo lo elimini da V1. Si stampi il vettore V1 risultante ed il numero di elementi eliminati o un opportuno messaggio se non ci sono elementi da eliminare. Si faccia l'ipotesi che in ognuno dei due vettori i valori siano diversi fra loro. Si strutturi il programma in opportuni sottoprogrammi. Esempi: INPUT n1 = 4 V1 = 7 5 3 4 n2 = 6 V2 = 1 3 7 6 8 2 OUTPUT Dal vettore V1 sono stati eliminati 2 elementi. Il vettore V1 risultante e': 5 4 INPUT: n1 = 7 V1 = 14 10 2 13 8 7 9 n2 = 6 V2 = 3 4 5 12 1 6 OUTPUT: Non ci sono elementi di V1 uguali ad elementi di V2.*/ #include<iostream> using namespace std; #include<cstdlib> //Prototipi delle funzioni void input(int &n,int v[]); bool ricerca(int v2[],int m,int num); int elimina_duplicati(int v1[], int & num1, int v2[], int num2); void output (int k, int v1[], int num); int main(){ int n1,n2; int v1[100], v2[100]; //chiamate delle funzioni input(n1,v1); input(n2,v2); for (int i=0;i<n1;i++) { if (ricerca(v2,n2,v1[i])) cout<<"V1[ "<<i<<"]e\' contenuto in V2"<<endl; } //elimina_duplicati(v1, int num1, int v2, int num2); if (!elimina_duplicati(v1,n1, v2, n2)) cout <<"non ci sono elementi uguali"; else output(n1,v1,n1);//n1 v1 per individuare gli elementi uguali poi n1 per il Vett_risultante // non mi è cmolto chiaro...non vorrei usare n1 per il vettore risultante ma un'altra lettera ad esemp. cout<<"\n\n"; system("PAUSE"); return 0; } void input(int&n,int v[]) { cout<<"Assegna valore intero al numero di elementi del vettore\n"; cin>>n; cout<<"Assegna\n"<<n<<"\nelementi al vettore"; cout<<"\n"; for (int i=0;i<n;i++) cin>>v[i]; } bool ricerca (int v2[], int m, int num) { bool trovato = false; for(int i=0;i<m;i++){ if (v2[i] == num )//istruzione eseguita giusto? return true; } return trovato;//istruzione non eseguita giusto? } //Funzione elimina int elimina_duplicati(int v1[], int & num1, int v2[], int num2) { int i=0; //n=i int rimossi = 0; while (i < num1) { if (ricerca(v2,num2,v1[i])) {//rimuovo l'elemento, cioè sposta 'verso il basso' gli altri elementi di vett1 int k; for (k = i+1; k<num1; k++) { v1[k-1]=v1[k]; } num1--; rimossi++; } else // non comprendo questo i=i+1 { i=i+1; } } return rimossi; } //end function elimina */ void output (int k, int v1[], int num) {//nei paramentri della funzione output se avessi usato ad esempio int z lo stesso il // programma sarebbe partito e ho controllato ...come mai?posso chiamarlo come voglio? cout<<"\nDal vettore V1 sono stati eliminati "<<num<<" elementi. \n"; cout<<"\nIl vettore V1 risultante e': \n"; for (int i=0; i<k; i++) cout<<v1[i]<<"\t"; }//end function output