From 8782b4d0278c8d0835ae61b8c75b41a8333a3802 Mon Sep 17 00:00:00 2001
From: Pierre Kunzli <pierre.kuenzli@unige.ch>
Date: Sun, 1 May 2022 16:46:54 +0200
Subject: [PATCH] updated pseudocode insertion b arbre

---
 slides/cours_22.md | 35 ++++++++++++++++++-----------------
 1 file changed, 18 insertions(+), 17 deletions(-)

diff --git a/slides/cours_22.md b/slides/cours_22.md
index a41e077..465d89e 100644
--- a/slides/cours_22.md
+++ b/slides/cours_22.md
@@ -289,7 +289,7 @@ patat:
 
 ## Exercice (matrix, 15min)
 
-* Insérer 20, 40, 10, 30, 15, 35, 7, 26, 18, 22, 5, 42, 13, 46, 27, 8, 32, 38, 24, 45, 25, 2, 14, 28, 29, 41,
+* Insérer 20, 40, 10, 30, 15, 35, 7, 26, 18, 22, 5, 42, 13, 46, 27, 8, 32, 38, 24, 45, 25, 2, 14, 28, 32, 41,
 * Dans un B-arbre d'ordre 2.
 
 # Les B-arbres
@@ -411,15 +411,17 @@ booléen est_dans_page(page, valeur) // la valeur est dans la page
 
 ```C
 booléen est_feuille(page) 
-    retourne (page.tab[0] == vide)
+    retourne (page.tab[0].pg == vide)
+
 entier position(page, valeur)
     i = 0
-    tant que i < page.nb && val >= page.tab[i]
+    tant que i < page.nb && val > page.tab[i+1].val
         i += 1
     retourne i
+
 booléen est_dans_page(page, valeur)
     i = position(page, valeur)
-    retourne (i > 0 && page.tab[i] == valeur)
+    retourne (page.nb > 0 && page.tab[i+1].val == valeur)
 ```
 
 # Les B-arbres
@@ -441,6 +443,7 @@ page nouvelle_page(ordre)
     page.nb = 0
     page.tab = allouer(2*ordre+2)
     retourner page
+
 rien liberer_memoire(page)
     si est_feuille(page)
         liberer(page.tab)
@@ -467,7 +470,7 @@ page recherche(page, valeur) // retourner la page contenant
 page recherche(page, valeur)
     si est_dans_page(page, valeur)
         retourne page
-    sinon si est_feuille(page) && !est_dans_page(page, valeur)
+    sinon si est_feuille(page) 
         retourne vide
     sinon
         recherche(page.tab[position(page, valeur)], valeur)
@@ -478,17 +481,17 @@ page recherche(page, valeur)
 ## Les fonctions
 
 ```C
-page inserer(page, valeur) // inserer une valeur
+page inserer_valeur(page, valeur) // inserer une valeur
 ```
 
 . . .
 
 ```C
-page inserer(page, valeur)
+page inserer_valeur(page, valeur)
     element = nouvel_element(valeur)
     // on change element pour savoir s'il faut le remonter
     inserer_element(page, element) 
-    si element.page != vide
+    si element.page != vide && page.nb > 2*page.ordre
         // si on atteint le sommet!
         page = ajouter_niveau(page, element) 
     retourne page
@@ -499,8 +502,7 @@ page inserer(page, valeur)
 ## Les fonctions
 
 ```C
-// inserer un element et voir s'il remonte
-rien inserer_element(page, element) 
+rien inserer_element(page, element) // inserer un element et voir s'il remonte
 ```
 
 . . .
@@ -512,6 +514,7 @@ rien inserer_element(page, element)
     sinon
         sous_page = page.tab[position(page, element)].page
         inserer_element(sous_page, element)
+        // un element a été promu
         si element.page != vide
             placer(page, element)
 ```
@@ -528,10 +531,10 @@ rien placer(page, element) // inserer un élément
 
 ```C
 rien placer(page, element)
-    i = position(page, element.clé)
-    pour i de 2*page.ordre à i+1
+    pos = position(page, element.clé)
+    pour i de 2*page.ordre à pos+1
         page.tab[i+1] = page.tab[i]
-    page.tab[i+1] = element
+    page.tab[pos+1] = element
     page.nb += 1
     si page.nb > 2*page.ordre
         scinder(page, element)
@@ -562,10 +565,8 @@ rien scinder(page, element)
 ## Les fonctions (5min matrix)
 
 ```C
-// si on remonte à la racine...
-// on doit créer une nouvelle racine
-page ajouter_niveau(page, element) 
-                                   
+page ajouter_niveau(page, element) // si on remonte à la racine...
+                                   // on doit créer une nouvelle racine
 ```
 
 . . .
-- 
GitLab