/* Testo della prova Siano assegnati da tastiera due vettori di interi vett1 e vett2 (max 50 elementi). Si progetti una funzione ALTERNA che riceva in ingresso i due vettori e restituisca un vettore vett3 costituito alternando gli elementi di vett1 e vett2 (vedi esempi). La funzione ALTERNA deve anche restituire come valore di ritorno la somma di tutti gli elementi del vettore vett3. Progettare un programma principale (main) nel quale si stampa il vettore vett3 e il valore restituito dalla funzione ALTERNA. Per la lettura e la stampa dei vettori utilizzare due procedure STAMPA e LEGGI. ------------------------------------- Esempi INPUT: vett1 = 2 3 5 1 vett2 = 4 3 8 7 OUTPUT: vett3 = 2 4 3 3 5 8 1 7 Somma: 33 ------------------------------------- INPUT: vett1 = 3 5 1 vett2 = 1 2 5 5 6 3 3 OUTPUT: vett3 = 3 1 5 2 1 5 5 6 3 3 Somma: 34 ------------------------------------- INPUT: vett1 = 1 4 4 2 1 1 4 3 vett2 = 5 3 2 1 OUTPUT: vett3 = 1 5 4 3 4 2 2 1 1 1 4 3 Somma: 31 */ #include #include const int nMax=50; typedef int TElemento; typedef TElemento TVettore[nMax*2]; //dimensiona i vettori in modo da contemplare //anche il caso peggiore void Leggi(TVettore v, int& n, const int nmax); void Stampa(const TVettore v, const int n); TElemento Alterna(const TVettore vett1, const int n1, const TVettore vett2, const int n2, TVettore vett3, int& n3); TElemento Alterna2(const TVettore vett1, const int n1, const TVettore vett2, const int n2, TVettore vett3, int& n3); int main() { TVettore vett1, vett2, vett3; int n; //riempimento del vettore vett1 int m; //riempimento del vettore vett2 int k; //riempimento del vettore vett3 int sum; //valore restituito dalla funzione Alterna() cout << "Lettura vettore #1:\n"; Leggi(vett1, n, nMax); cout << "Lettura vettore #2:\n"; Leggi(vett2, m, nMax); sum = Alterna(vett1, n, vett2, m, vett3, k); cout << "Il vettore #3 e':\n "; Stampa(vett3, k); cout << "La somma dei suoi elementi e': " << sum << endl; system("PAUSE"); return 0; } void Leggi(TVettore vettore, int& n_elems, const int nMaxElem) { do { cout << "Inserisci il numero di elementi (max " << nMaxElem <<"): "; cin >> n_elems; } while ( (n_elems < 0) || (n_elems > nMaxElem) ); for (int i = 0; i < n_elems; i++) { cout << "Inserisci l'elemento #" << i << ": "; cin >> vettore[i]; } } void Stampa(const TVettore v, const int n) { cout << " "; for (int i = 0; i < n; i++) cout << v[i] << " "; cout << endl; } TElemento SommaElems(const TVettore v, const int n) { int s = 0; for (int i = 0; i < n; i++) s = s + v[i]; return s; } TElemento Alterna(const TVettore vett1, const int n1, const TVettore vett2, const int n2, TVettore vett3, int& n3) { int i = 0; int j = 0; n3 = 0; while (n3 < n1 + n2) { if (i < n1) { vett3[n3] = vett1[i]; i++; n3++; } if (j < n2) { vett3[n3] = vett2[j]; j++; n3++; } } return SommaElems(vett3, n3); } TElemento Alterna2(const TVettore vett1, const int n1, const TVettore vett2, const int n2, TVettore vett3, int& n3) { int minlen = (n1 < n2 ? n1 : n2); //e' lo stesso di: if (ni < n2) minlen = n1 else minlen = n2; n3 = 0; //preleva alternativamente gli elementi fino alla fine del vettore pił corto (di lunghezza minlen) for (int i = 0; i < minlen; i++) { vett3[n3] = vett1[i]; n3++; vett3[n3] = vett2[i]; n3++; } //scarica, eventualmente, il primo vettore for (int i = minlen; i < n1; i++) { //questo ciclo viene eseguito (almeno una volta) solo se n1 > n2 vett3[n3] = vett1[i]; n3++; } //scarica, eventualmente, il secondo vettore for (int i = minlen; i < n2; i++) { //questo ciclo viene eseguito (almeno una volta) solo se n2 > n1 vett3[n3] = vett2[i]; n3++; } return SommaElems(vett3, n3); }