Rapport graphviz

Table of Contents

prepisima.png

1. Antécédents de la suite de Syracuse

1.1. Méthode:

Je me suis servi d’une fonction récursive pour calculer les antécédents de la suite de syracuse. Pour connaître les antécédents de chaque nombre de la suite il faut regarder si ce nombre -1 divisée par 3 est un entier, autrement dit si le nombre-1 est congrue à 0 modulo 3. Si oui alors le nombre possède deux antécédents qui sont: 2 x nombre et (nombre-1)/3. Sinon ce nombre possède qu’un antécédent qui est 2 x nombre. Je crée une fonction syracuse qui prend en argument une hauteur int hi, la hauteur maximale souhaitée du graphe int hmax, le nombre int nombre et un entier split. Si hi est à la hauteur maximale alors la fonction s’arrête, ensuite la fonction teste si le nombre possède un ou deux antécédents, si oui alors la fonction refait un appel à la fonction syracuse(hi+1,hmax,(nombre-1)/3,nombre). La fonction suit donc la branche ou le (nombre-1)/3 est un entier jusqu’a ce que hi soit égal à la hauteur max. La fonction va ensuite revenir au nombre=split et partir du coté de 2 x nombre. Cette boucle récursive va donc construire les antécédents de la suite de syracuse:

#include <stdio.h>

void syracuse(int hi, int hmax, int nombre,int split) {
  if (hi == hmax) {
    printf("%d",nombre);
    if (split!=0){
      printf("\n%d -- ", split);
      }
    return;
  }
  printf("%d -- ", nombre);
  if ((nombre - 1) % 3 == 0 && nombre > 5) {
    syracuse(hi + 1, hmax, (nombre - 1) / 3,nombre);
  }
  syracuse(hi + 1, hmax, 2 * nombre,split);
}

int main() {
  printf("strict graph {\n");
  printf("rankdir=\"BT\"");
  syracuse(0, 13, 1,0);
  printf("\n}");
  return 0;
}

1.2. Affichage avec une hauteur maximale de 13

syr.svg

2. Graphe de la fonction donnée

#include <stdio.h>
int fct(int i,int j){
  int somme=0,k;
  if (j==0){
    return 1;
  }
  else if(i<j){
    printf("\"fct(%d,%d)\"->\"fct(%d,%d)\"",i,j,i+1,j);
    return (fct(i+1,j)+1);
  }
  else{
    for (k=0;k<i;k++){
      printf("\"fct(%d,%d)\"->\"fct(%d,%d)\"",i,j,k,j-1);
      somme+=fct(k,j-1);
    }
  }
  return  0;
}
int main(){
  int i=4,j=2;
  printf("digraph {\n");
  printf("\"fct(%d,%d)\"->",i,j);
  fct(i,j);
  printf("\n}");
}

2.1. Affichage pour i=4 et j=2

fct.svg

Author: Antoine Bourdier

Created: 2023-02-05 dim. 14:38