Esercizi sui vettori (superiori)

Da Wikiversità, l'apprendimento libero.
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%

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

Es3 Supermarket con vettori[modifica]