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.
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.
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++
Approfondimento vettori in C++
Esercitazione sugli array in C++
Massimo elemento di un vettore