Esercizi sui vettori (superiori)
I seguenti esercizi riguardano I vettori studiati nella Lezione 14 della Parte Prima. Essi sono divisi per paragrafi in modo tale da favorire la scelta degli esercizi specifici.
Es Usiamo i vettori
[modifica]Usare i vettori
[modifica]Inserimento dei dati in un vettore
[modifica]Pensiamo di dover inserire i dati in un vettore di dimensione 5, vuol dire che dobbiamo inserire dei valori nelle 5 celle del vettore numerate da 0 a 4 (valore dell'indice)
per inserire il valore nella cella 0 dovrei dare il comando cin>>vett[0]; per inserire il valore nella cella 1 dovrei dare il comando cin>>vett[1]; per inserire il valore nella cella 2 dovrei dare il comando cin>>vett[2]; per inserire il valore nella cella 3 dovrei dare il comando cin>>vett[3]; per inserire il valore nella cella 4 dovrei dare il comando cin>>vett[4];
mi accorgo che l'operazione si ripete per cinque volte, e che l'unica cosa che cambia è il numero fra parentesi quadrate, uso una istruzione for che ripete per cinque volte il comando cin>>vett[i];
e scrivo fra parentesi quadrate la variabile i che funge da contatore e che nel ciclo iniziale vale zero, in quello successivo 1 e così via fino a 4. L'uso del ciclo for diventa necessario se nel vettore ci sono molti elementi.
#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int vett[5];
int i;
for (i=0;i<5;i++)
{ cout<<"inserisci il "<<i<<" elemento ";
cin>>vett[i];
}
system ("PAUSE");
return 0;
}
Inserimento e stampa dei dati di un vettore
[modifica]#include <cstdlib>
#include <iostream>
using namespace std;
int main(int argc, char *argv[])
{
int n=4;
int vett[n];
int i;
//inserimento dati vettore
for(i=0;i<n;i++)
{ cout<<"inserisci il "<< i<<" elemento del vettore ";
cin>>vett[i];
}
//stampa dati vettore
cout<<"gli elementi inseriti nel vettore sono:"<<endl;
for(i=0;i<n;i++)
cout<<vett[i]<<" ";
cout<<endl;
system ("PAUSE");
return 0;
}
Inserimento e conteggio occorrenze del numero 3 nel vettore
[modifica]#include <cstdlib>
#include <iostream>
using namespace std;
/* ricercare il numero 3 all'interno di un vettore*/
int main(int argc, char *argv[])
{
int n;
cout<<"inserisci il num di elementi nel vett";
cin>>n;
cout<<endl;
int a[n];
int i;
int conta=0;
int elementodaricercare=3;
for(i=0;i<n;i++)
{
cout<<"Inserisci un num nel vett: ";
cin>>a[i];
cout<<endl;
}
for(i=0;i<n;i++)
{
if(a[i]== elementodaricercare)
conta++;
}
cout<<" Il num 3 si trova: "<<conta<<" volte"<<endl;
system ("PAUSE");
return 0;
}
Ricerca di un numero in un vettore disordinato
[modifica]Dopo aver inserito i dati in un vettore ricercare nel vettore se è presente un numero scelto dall'utente e visualizzarne la posizione della prima occorrenza
#include <cstdlib>
#include <iostream>
using namespace std;
/* ricerca di un numero all'interno di un vettore disordinato
obiettivo utilizzo dei vettori
*/
int main(int argc, char *argv[])
{
int vett[4];
int n=4;
int i;
int elementodaricercare;
int posizioneelemento;
bool trovato;
for (i=0;i<n;i++)
{
cout<<"inserisci l'elemento di posizione "<< i << endl;
cin>>vett[i];
}
cout<<"inserire l'elemento da cercare ";
cin>> elementodaricercare;
trovato=false;
i=0;
while((!trovato)&&( i<n))
{
if(vett[i]== elementodaricercare)
{
trovato=true;
posizioneelemento=i;
}
else
{
i++;
}
}
if(trovato)
cout<<" l'elemento si trova nella posizione: "<< posizioneelemento;
else
cout<<" l'elemento non si trova ";
system("PAUSE");
return 0;
}
Trovare in un vettore di 10 elementi il max e la pos massimo
[modifica]Dopo aver inserito i dati in un vettore ricercare nel vettore se è presente un numero scelto dall'utente e visualizzarne la posizione della prima occorrenza
#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char** argv)
{ int const n=10;
int i;
int vetta[n];
int massimo, posmassimo;
//inserire i valori da tastiera nel vetta
for(i=0;i<n;i++)
{ cout<<"inserisci l'elemento di indice "<<i<<" del vettore A ";
cin>>vetta[i];
}
//stampa gli elementi del vettore A
cout<<"questi sono gli elementi del vettore A "<<endl;
for(i=0;i<n;i++)
cout<<vetta[i]<<" ";
cout<<endl;
massimo=vetta[0];
posmassimo=0;
for(i=1;i<n;i++)
if(vetta[i]>massimo)
{ posmassimo=i;
massimo=vetta[i];
}
cout<<"il max del vett A vale" <<massimo<<endl;
cout<<" e si trova nella posizione di indice " <<posmassimo<<endl;
return 0;
}
Es2 Usiamo i vettori
[modifica]Usare i vettori
[modifica]#include <iostream>
#include <cstdlib>
using namespace std;
int main(int argc, char** argv)
{ int const n=10;
int i,conta;
float somma,media;
int vetta[n], vettb[n],vettc[n];
//inserire i valori da tastiera nel vetta
for(i=0;i<n;i++)
{ cout<<"inserisci l'elemento di indice "<<i<<" del vettore A ";
cin>>vetta[i];
}
//stampa gli elementi del vettore A
cout<<"questi sono gli elementi del vettore A "<<endl;
for(i=0;i<n;i++)
cout<<vetta[i]<<" ";
cout<<endl;
//stampa gli elementi del vettore A in ordine inverso
cout<<"vettore A visualizzato in ordine inverso"<<endl;
for(i=0;i<n;i++)
cout<<vetta[n-1-i]<<" ";
cout<<endl;
//calcolo della media degli elementi del vettore A
somma=0;
for(i=0;i<n;i++)
somma=somma+vetta[i];
media=somma/n;
cout<<"la media dei valori del vettore A vale "<<media<<endl;
//contare quanti numeri pari ci sono nel vettore A
conta=0;
for(i=0;i<n;i++)
if(vetta[i]%2==0)
conta++;
cout<<"nel vettore A ci sono "<<conta<< " numeri pari"<<endl;
//contare quanti numeri ci sono nel vettore A che appartengono all'intervallo [3,67[
conta=0;
for(i=0;i<n;i++)
if(vetta[i]>=3 && vetta[i]<67)
conta++;
cout<<"nel vettore A ci sono "<<conta<< " numeri interni all'intervallo [3,67["<<endl;
//copiare i valori del vettore A nel vettore B nello stesso ordine
for(i=0;i<n;i++)
vettb[i]=vetta[i];
//visualizzare i due vettori per verificare che la copia sia stata fatta correttamente
cout<<"vettore A =";
for(i=0;i<n;i++)
cout<<vetta[i]<<" ";
cout<<endl;
cout<<"vettore B =";
for(i=0;i<n;i++)
cout<<vettb[i]<<" ";
cout<<endl;
// copiare i valori del vettore A nel vettore C ma nell'ordine inverso
for(i=0;i<n;i++)
vettc[n-1-i]=vetta[i];
//visualizzare i due vettori A e C per verificare che la copia sia stata fatta correttamente
cout<<"vettore A =";
for(i=0;i<n;i++)
cout<<vetta[i]<<" ";
cout<<endl;
cout<<"vettore C =";
for(i=0;i<n;i++)
cout<<vettc[i]<<" ";
cout<<endl;
// calcolare il max e la posizione del max nel vettore A
int massimo;
int posmassimo;
massimo=vetta[0];
posmassimo=0;
for(i=0;i<n;i++)
if(vetta[i]>massimo)
{ posmassimo=i;
massimo=vetta[i];
}
cout<<"il max del vett A vale" <<massimo<<endl;
cout<<" e si trova nella posizione di indice " <<posmassimo<<endl;
/*stampare il minimo del vettore A e i valori dei vettori B e C
che si trovano nella stessa posizione del minimo di A
*/
int minimo;
int posminimo;
minimo=vetta[0];
posminimo=0;
for(i=0;i<n;i++)
if(vetta[i]<minimo)
{ posminimo=i;
minimo=vetta[i];
}
cout<<"il min del vett A vale" <<minimo<<endl;
cout<<" e si trova nella posizione di indice " <<posminimo<<endl;
cout<<"nella stessa posizione nel vettore B c'e' il numero"<<vettb[posminimo]<<endl;
cout<<" e nel vettore C c'e' il numero " <<vettc[posminimo] <<endl;
//carichiamo nel vettore b dei numeri interi a caso compresi fra -23 e 50
for(i=0;i<n;i++)
vettb[i]=-23+rand()%74;
cout<<"dopo aver caricato dei valori casuali nel vettore B compresi fra -23 e +50 si ha vett B ="<<endl;
for(i=0;i<n;i++)
cout<<vettb[i]<<" ";
cout<<endl;
// fare la somma dei vettori a e b (indice per indice) e copiare il valore nel vettore c
for(i=0;i<n;i++)
vettc[i]=vetta[i]+vettb[i];
cout<<"facciamo la somma dei vettori A e B e salviamone il risultato nel vettore C, otteniamo:" <<endl;
cout<<"vett C vett A vett C"<<endl;
for(i=0;i<n;i++)
cout<<vettc[i]<<"=\t"<<vetta[i]<<"+\t"<<vettb[i]<<endl;
/*
creiamo un vettore D di 100000 numeri e inseriamo dei valori random compresi fra 0 e 9
calcoliamo poi quante volte in quel vettore c'e' il numero 0, il numero 1 , ... il numero 9
*/
cout<<"creiamo il vettore D con 100000 numeri interi casuali fra 0 e 9 e contiamo la frequenza di ogni numero"<<endl;
int vettd[100000];
for(i=0;i<100000;i++)
vettd[i]=rand()%10;
int frequenze[10] = { }; // vettore inizializzato con zeri
for(i=0;i<100000;i++)
frequenze[vettd[i]]++;
for(i=0;i<10;i++)
cout<<" il numero "<<i<<" si ripete "<<frequenze[i]<<" volte"<<endl;
// cambiamo ogni numero pari del vettore d con il suo doppio
for(i=0;i<100000;i++)
if(vettd[i]%2==0)
vettd[i]=vettd[i]*2;
/* cambiamo ogni numero del vettore D uguale a 8 con
il valore della cella successiva, se c'e' 8 nell'ultima cella
lo modifichiamo nel valore della cella di posizione 0 più 34
*/
for(i=0;i<99999;i++)
if(vettd[i]==8)
vettd[i]=vettd[i+1];
if(vettd[99999]==8)
vettd[99999]=vettd[0]+34;
// carichiamo dei numeri casuali fra 0 e 3 nei due vettori A e B
// e poi verifichiamo se i due vettori A e b sono uguali
for(i=0;i<10;i++)
vetta[i]=rand()%4;
for(i=0;i<10;i++)
vettb[i]=rand()%4;
conta=0;
for(i=0;i<10;i++)
if(vetta[i]==vettb[i])
conta++;
if(conta==10)
cout<<"i vettori A e B caricati con valori random sono uguali"<<endl;
else
cout<<"i vettori A e B caricati con valori random non sono uguali"<<endl;
// oppure più velocemente
for(i=0;i<10;i++)
if(vetta[i]!=vettb[i])
break;
if(i==11)
cout<<"i vettori A e B caricati con valori random sono uguali"<<endl;
else
cout<<"i vettori A e B caricati con valori random non sono uguali"<<endl;
/* carichiamo 100000 numeri casuali fra 0 e 2 nel vettore d e 10 valori casuali nel vettore a
ricerchamo poi nel vettore d se e' presente la sequenza dei valori contenuta nel vettore a
e se c'e' ne stampiamo la posizione
esercizio ricerca sottostringa
*/
cout<<"test1 ricerca substring"<<endl;
for(i=0;i<100000;i++)
vettd[i]=rand()%3;
for(i=0;i<10;i++)
vetta[i]=rand()%3;
int k;
for(i=0;i<99990;i++)
{ conta=0;
for(k=0;k<10;k++)
if(vettd[i+k]==vetta[k])
conta++;
if (conta==10)
cout<<"il vettore A si trova nel vettore D a partire dalla posizione"<<i<<endl;
}
// lo stesso esercizio poteva essere risolto più velocemente con
cout<<"test2 ricerca substring"<<endl;
for(i=0;i<99990;i++)
{for(k=9;k>=0;k--)
if(vettd[i+k]!=vetta[k])
break;
if (k==-1)
cout<<"il vettore A si trova nel vettore D a partire dalla posizione"<<i<<endl;
}
// dato un numero da 0 a 4 scelto dall'utente verificare in quali posizioni e' presente nel vettore A
int ricercato;
bool trovato;
cout<<"inserisci il numero fra 0 e 4 da ricercare nel vettore A "<<endl;
cin>>ricercato;
conta=0;
for(i=0;i<10;i++)
if(vetta[i]==ricercato)
{cout<<" il numero"<<ricercato<<" si trova nel vett A nella pos "<<i<<endl;
conta++;
trovato=true;
}
if(trovato)
cout<<"il numero "<<ricercato<<"e' stato trovato " <<conta<<"volte"<<endl;
else
cout<<"il numero "<<ricercato<<"non e' presente nel vettore A "<<endl;
return 0;
}