User Tools

Site Tools


it:informatica:linguaggio_c:vettori_2
Return to Home page

Vettori (Esempio 2)

Concetti:
Algoritmi basati sull'utilizzo di vettori (array)

Testo:
Realizzare un programma che:

  • dato un vettore di interi di dimensione DIM_VETT pari a 20.
  • individui i valori uguali ed adiacenti ripetuti piu' di una volta nel vettore, indicandone la posizione del primo elemento della ripetizione e di quanti elementi e' composta la ripetizione.

A titolo esemplificativo, dato il seguente vettore:

int v[DIM_VETT] = {2, 2, 3, 3, 3, 4, 2, 2, 4, 3, 3, 3, 3, 5, 5, 6, 1, 2, 3, 3};

il programma dovrà fornire il seguente output:

Valore 2 ripetuto 2 volte a partire da 0
Valore 3 ripetuto 3 volte a partire da 2
Valore 2 ripetuto 2 volte a partire da 6
Valore 3 ripetuto 4 volte a partire da 9
Valore 5 ripetuto 2 volte a partire da 13
Valore 3 ripetuto 2 volte a partire da 18

Soluzione:

vettori_2.c
/*******************************************
 Dato un vettore, ad esempio:
 v:      2   2   3   3   3   4   2   2   4   3   3   3   3   5   5   6   1   2   3   3
 i cui elementi sono i rispettivamente in posizione
 POS :   0   1   2   3   4   5   6   7   8   9  10  11  12  13  14  15  16  17  18  19
 
 individuare i valori adiacenti ripetuti piu' di una volta nel vettore, indicandone la posizione
 del primo elemento della ripetizione e di quanti elementi e' composta la ripetizione.
 
 Nel caso del vettore qui riportato, l'output del programma dovra' essere:
 
 Valore 2 ripetuto 2 volte a partire da 0
 Valore 3 ripetuto 3 volte a partire da 2
 Valore 2 ripetuto 2 volte a partire da 6
 Valore 3 ripetuto 4 volte a partire da 9
 Valore 5 ripetuto 2 volte a partire da 13
 Valore 3 ripetuto 2 volte a partire da 18
 
 *******************************************/
 
#include <stdio.h>
 
 
#define DIM_VETT 20
 
int main(){
 
  int v[DIM_VETT] = {2, 2, 3, 3, 3, 4, 2, 2, 4, 3, 3, 3, 3, 5, 5, 6, 1, 2, 3, 3};
  int i, j, n_rip, pos;
 
  /* Stampa vettore */
  printf("VETT: ");
  for(i=0; i<DIM_VETT; i++)
    printf("%3d ", v[i]);
  printf("\n");
 
  /* Stampa posizione elementi in vettore */
  printf("POS : ");
  for(i=0; i<DIM_VETT; i++)
    printf("%3d ", i);
  printf("\n");
 
  /* Prima soluzione */
  printf("\nSOLUZIONE 1\n");
  i = 0;
  pos = 0;
  n_rip = 1;
 
  for(i=0; i<DIM_VETT-1; i++){
 
    if(v[i]==v[i+1]){
      n_rip++;
    }else{
      if(n_rip>1){
        printf("Valore %d ripetuto %d volte a partire da %d\n", v[i], n_rip, pos);
      }
      n_rip = 1;
      pos = i+1;
    }
  }
 
  if(n_rip>1){
    printf("Valore %d ripetuto %d volte a partire da %d\n", v[i], n_rip, pos);
  }
 
  /* Seconda soluzione */
  printf("\nSOLUZIONE 2\n");
  i=0;
  while(i<DIM_VETT-1){
    pos = i;
    n_rip = 1;
 
    j = i+1;
    while(v[i]==v[j] && j < DIM_VETT){
      n_rip++;
      j++;
    }
 
    if(n_rip>1){
      printf("Valore %d ripetuto %d volte a partire da %d\n", v[i], n_rip, pos);
      i = j;
    }else{
      i++;
    }
  }
}

If you found any error, or if you want to partecipate to the editing of this wiki, please contact: wiki [at] altervista.org

You can reuse, distribute or modify the content of this page, but you must cite in any document (or webpage) this url: http://wiki.altervista.org/it/informatica/linguaggio_c/vettori_2
/membri/wiki/data/pages/it/informatica/linguaggio_c/vettori_2.txt · Last modified: 2015/10/28 15:23 (external edit)


Policy sui Cookie