Informatica 2 Liceo Scientifico Scienze Applicate/Es2 Usiamo i vettori

Wikibooks, manuali e libri di testo liberi.
Indice del libro

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 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;
}