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.

quiz
quiz
Esercizi sui vettori (superiori)
Tipo di risorsa Tipo: quiz
Materia di appartenenza Materia: Informatica (istituti tecnici) per le superiori
Avanzamento Avanzamento: quiz completo al 50%

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

Es3 Supermarket con vettori

modifica