Corso IN110 Algoritmi e Strutture Dati

Gli esercizi

Testi e soluzioni di alcuni esercizi

Compressione RLE

/*
**  rle.c
**
**  Legge in input una sequenza di n numeri interi e la memorizza
**  in un array. Stampa in output la sequenza compressa con
**  l'algoritmo RLE (Run Length Encoding).
**
**  Marco Liverani (liverani@mat.uniroma3.it) - Aprile 2001
*/

#include <stdlib.h>
#include <stdio.h>

#define MAX 100

/*
 *  Legge in input un array di numeri interi. Restituisce
 *  il numero di elementi letti.
 */

int leggi_array(int V[]) {
  int i, n;

  printf("Numero di elementi: ");
  scanf("%d", &n);
  for (i=0; i<n; i++)
    scanf("%d", &V[i]);
  return(n);
}

/*
 *  Funzione principale.
 */

int main(void) {
  int n, i, a[MAX], x, cont;

  n = leggi_array(a);
  cont = 1;
  i = 1;
  x = a[0];
  while (i<n) {
    while (i<n && a[i] == x) {
      i = i+1;
      cont = cont+1;
    }
    printf("%d %d ", x, cont);
    x = a[i];
    cont = 1;
    i = i+1;
  }
  return(0);
}

Università degli Studi Roma Tre - Dipartimento di Matematica e Fisica - Corso di laurea in Matematica - Corso di Informatica 1 (IN110)

Author: Marco Liverani - Last modified: Saturday July 13, 2019 - URI: http://www.mat.uniroma3.it/users/liverani/IN1/20010330b.shtml