/* algo2_division.c
créé par Yann Guidon (whygee@f-cpu.org) le 15 septembre 2007
Ce programme génère un histogramme (pour gnuplot)
de taille de fragments générés par un algorithme à base
de divisions entières multiples */

#include <stdio.h>

#define TAILLE_FRAGMENT 64

#define SEND(x)  { histo[x]++; }

int histo[TAILLE_FRAGMENT+1];

int main() {
  int i, taille_bloc, taille_fragment, nombre_fragments;

  /* pour toutes les tailles de paquets de 64 à 2K */
  for  (i=TAILLE_FRAGMENT; i<=TAILLE_FRAGMENT*32; i++) {
    taille_bloc = i;

    /* fragmentation par divisions multiples */
    while (taille_bloc > TAILLE_FRAGMENT) {
      nombre_fragments = (taille_bloc+ TAILLE_FRAGMENT -1) / TAILLE_FRAGMENT;
      taille_fragment = taille_bloc / nombre_fragments;

      SEND(taille_fragment);
      taille_bloc-=taille_fragment;
    }
    /* envoie le reste */
    SEND(taille_bloc);
  } 

  /* sort l'histogramme sur stdout */
  for (i=0; i<=TAILLE_FRAGMENT; i++) {
    printf("%d  %d\n",i, histo[i]);
  }

  return 0;
}
