Informatica 2 Liceo Scientifico Scienze Applicate/Es2 Usiamo i vettori
Aspetto
Usare i vettori
[modifica | modifica sorgente]#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 piu' 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 piu' 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 piu' 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;
}