In questa lezione risolveremo un semplice esercizio sui vettori in C++, al fine di capire meglio gli argomenti trattati finora.


Dati due vettori A e B di dimensione 10:

a) Inserire gli elementi da tastiera nei due vettori.

b) Moltiplicare gli elementi di indice pari del primo vettore per gli elementi di indice pari del secondo vettore e memorizzarli in un altro vettore C di 5 elementi. Visualizzare il vettore C in ordine decrescente.

c) Sommare gli elementi a due a due del vettore A e memorizzarli in un altro vettore D di 5 elementi. 
In questo modo: D[0] = A[0] + A[1]    poi D[1] = A[2] + A[3]

d) Visualizzare il vettore D in ordine crescente.

Banner Pubblicitario

e) Fare lo stesso per il vettore B e memorizzare le somme in un altro vettore E.

f) Visualizzare il vettore E ottenuto.

g) Unire i due vettori in un unico vettore F e visualizzarlo.


Procedimento esercizio sui vettori in C++

Innanzitutto dichiariamo i vettori necessari per il nostro algoritmo.

Quindi chiediamo all’utente di inserire gli elementi del primo vettore e poi quelli del secondo.

Dopo utilizziamo un ciclo for che scorre i vettori A e B e se l’indice è pari sommiamo i valori in un vettore C.

Utilizziamo un indice j che parte da 0 e arriva a 4, infatti lo incrementeremo di volta in volta solo se i è pari.

Banner pubblicitario

Dunque, considerando che gli elementi di indice pari sono: 0, 2, 4, 6, 8.

In tutto il vettore C avrà 5 elementi.

j = 0;
for (int i = 0; i < N; i++) {
	if (i % 2 == 0){
		C[j] = A[i] * B[i];
		j++;
	}
}

Attenzione, quanto sopra descritto si può scrivere anche in maniera più elegante ed efficiente, evitando di utilizzare un if, incrementando la i ogni volta di 2. In questo modo:

j = 0;
for (int i = 0; i < N; i += 2) {
	C[j] = A[i] * B[i];
	j++;
}

Dopo visualizziamo gli elementi del vettore C in ordine decrescente, partendo dall’indice 4 e dunque da N/2-1 fino ad arrivare a 0 compreso.

cout << "Visualizzo gli elementi di c!\n";
	for (int i = (N/2 - 1); i >= 0; i--) {
		cout << "indice: " << i << " elemento " << c[i] << endl;
}

Poi analizziamo gli elementi di indice pari del vettore A e sommiamo gli elementi memorizzandoli in un altro vettore D.

Utilizziamo un indice j che va da 0 a 4, pertanto dobbiamo inizializzare nuovamente a 0 l’indice j.

Quindi possiamo scrivere:

j = 0
for (int i = 0; i < N; i += 2) {
	D[j] = A[i] + A[i+1];
	j++;	
}

Ripetiamo poi lo stesso procedimento sommando gli elementi del vettore B e memorizzandoli in un vettore E.

Infine dobbiamo unire i due vettori.

Per farlo utilizziamo un ciclo for e se l’indice i è minore di N/2, cioè esattamente la metà, inseriremo nel vettore F gli elementi di D, altrimenti gli elementi di E. Notate che ho inserito l’istruzione:

F[j] = E[i - N/2];

Perché in questo modo riporto l’indice a 0, difatti deve aggiungere gli elementi del vettore E partendo dall’indice 0, invece nel punto in cui siamo la i vale 5.

j = 0;
	for (int i = 0; i < N; i++) {
		if(i < N / 2){
			F[j] = D[i];
		}
		else {
			F[j] = E[i - N / 2];
		}
		j++;
	}

Ecco dunque il codice completo:

#include <iostream>
using namespace std;
#define N 10

int main() {
    int j;
    
    int A[N], B[N], C[N/2], D[N/2], E[N/2], F[N];

    // Inserimento degli elementi nei vettori A e B
    for (int i = 0; i < N; i++) {
        cout << "Vettore a: ";
        cin >> A[i];
    }
    
    for (int i = 0; i < N; i++) {
        cout << "Vettore b: ";
        cin >> B[i];
    }

    // Calcolo degli elementi del vettore C
    j = 0;
    for (int i = 0; i < N; i += 2) {
        C[j] = A[i] * B[i];
        j++;
    }

    // Visualizzazione del vettore C in ordine decrescente
    cout << "Visualizzo gli elementi di c!\n";
    for (int i = N/2 - 1; i >= 0; i--) {
        cout << "indice: " << i << " elemento " << C[i] << endl;
    }
    
    // Calcolo degli elementi del vettore D
    j = 0;
    for (int i = 0; i < N; i += 2) {
        D[j] = A[i] + A[i + 1];
        j++;
    }
    
    // Visualizzazione del vettore D in ordine crescente
    cout << "Visualizzo gli elementi di d!\n";
    for (int i = 0; i < N/2; i++) {
        cout << "Elemento in posizione: " << i << " valore: " << D[i] << endl;
    }
    
    // Calcolo degli elementi del vettore E
    j = 0;
    for (int i = 0; i < N; i += 2) {
        E[j] = B[i] + B[i + 1];
        j++;
    }
    
    // Visualizzazione del vettore E
    cout << "Visualizzo gli elementi di e!\n";
    for (int i = 0; i < N/2; i++) {
        cout << "Elemento in posizione: " << i << " valore: " << E[i] << endl;
    }

    // Unione dei vettori D ed E in un unico vettore F    
    for (int i = 0; i < N/2; i++) {
        F[i] = D[i];
        F[N/2 + i] = E[i];
    }
    
    cout << "Visualizzo gli elementi di f!\n";
    for (int i = 0; i < N; i++) {
        cout << "Elemento in posizione: " << i << " valore: " << F[i] << endl;
    }
    
    return 0;
}

Questa è solo una possibile soluzione all’esercizio sui vettori in C++, proponete pure la vostra.

Alcuni link utili

Indice argomenti linguaggio C++

Array o vettori in C++

Approfondimento vettori in C++

Esercitazione sugli array in C++

Massimo elemento di un vettore

Esercizi con gli array

Ricerca sequenziale in C++

Ricerca in un array ordinato

Array con numeri random

Ricerca binaria