From 0ea6fbe2951e9cda532c339d3dc2ab06bb4cc049 Mon Sep 17 00:00:00 2001
From: "paul.albuquer" <paul.albuquerque@hesge.ch>
Date: Mon, 18 Oct 2021 13:55:25 +0200
Subject: [PATCH] added lesson 6, fig. 8-queens, version 2020-21, recursivity
 codes

---
 lessons/contenu_cours_6.md                    |  97 ++++++++++++++++++
 lessons/figures/fig_recursivite_8_reines.png  | Bin 0 -> 11151 bytes
 source_codes/recursivity/lissage.c            |  66 ++++++++++++
 source_codes/recursivity/rec_binary.c         |  23 +++++
 source_codes/recursivity/rec_factorielle.c    |  19 ++++
 source_codes/recursivity/rec_fibonacci.c      |  22 ++++
 source_codes/recursivity/rec_pgcd.c           |  23 +++++
 source_codes/recursivity/rec_ppcm.c           |  24 +++++
 .../recursivity/rec_puissance_indienne.c      |  26 +++++
 source_codes/recursivity/rec_reines.c         |  75 ++++++++++++++
 source_codes/recursivity/rec_reines_skel.c    |  54 ++++++++++
 11 files changed, 429 insertions(+)
 create mode 100644 lessons/contenu_cours_6.md
 create mode 100644 lessons/figures/fig_recursivite_8_reines.png
 create mode 100644 source_codes/recursivity/lissage.c
 create mode 100644 source_codes/recursivity/rec_binary.c
 create mode 100644 source_codes/recursivity/rec_factorielle.c
 create mode 100644 source_codes/recursivity/rec_fibonacci.c
 create mode 100644 source_codes/recursivity/rec_pgcd.c
 create mode 100644 source_codes/recursivity/rec_ppcm.c
 create mode 100644 source_codes/recursivity/rec_puissance_indienne.c
 create mode 100644 source_codes/recursivity/rec_reines.c
 create mode 100644 source_codes/recursivity/rec_reines_skel.c

diff --git a/lessons/contenu_cours_6.md b/lessons/contenu_cours_6.md
new file mode 100644
index 0000000..0f59c42
--- /dev/null
+++ b/lessons/contenu_cours_6.md
@@ -0,0 +1,97 @@
+# Algorithmique et structures de données 2020-21
+
+Contenu du cours 6 du 28.10.2020
+
+*****
+
+##  Récursivité
+
+-   Exemple de la factorielle : n ! = n·(n-1)·(n-2)·... ·3·2·1 = n·(n-1) !   
+    Donc fact(n) = n·fact(n-1) (récursivité)  
+    et fact(1) = 1 (condition d'arrêt)
+```C
+        int fact(int n) {
+            if (n > 1) {
+                return n*fact(n­1);
+            } else {
+                return 1;
+            }
+        }
+        void main() {
+            int f = fact(4);
+        }
+```
+
+![Illustration](./figures/fig_recursivite_factorielle.png)
+
+-   Exemple du PGCD   
+    Algorithme d'Euclide pour le PGCD de 42 et 27  
+
+>       42 = 27·1 + 15  
+>       27 = 15·1 + 12  
+>       15 = 12·1 +  3  
+>       12 =  3·4 +  0  
+    PGCD(42,27)=PGCD(27,15)=PGCD(15,12)=PGCD(12,3)=3
+```C
+        int pgcd(int n,int m) {
+            if (n%m > 0) {
+                return pgcd(m,n%m);
+            } else {
+                return m;
+            }
+        }
+```
+
+![Illustration de la récursivité pour l'algorithme d'Euclide](./figures/fig_recursivite_pgcd_euclide.png)
+
+-   Exemple de l'écriture binaire
+```C
+        void binaire(int n) {
+            printf("%d",n%2);
+            if (n/2 != 0) {
+                binaire(n/2);
+            } else {
+                printf("\n");
+            }
+            // printf("%d",n%2);
+        }
+
+        Binaire(13); // affiche 1 0 1 1 puis un retour à la ligne`
+```
+> > > $\hspace*{36mm} 2^0 2^1 2^2 2^3$  
+
+![Illustration de la récursivité pour l'écriture binaire](./figures/fig_recursivite_binaire.png)
+
+-   Que se passe-t-il si on décommente le deuxième `printf` ?
+
+##  Exemples et exercices de récursivité
+
+-   Algorithme du PPCM de deux nombres `n` et `m`
+    -   `ppcm(mult_n,mult_m) = ppcm(mult_n + n, mult_m)`    
+        si `mult_n < mult_m`   (récursivité)
+    -   `ppcm(mult_n,mult_m) = ppcm(mult_n, mult_m + m)`    
+        si `mult_n > mult_m`   (récursivité)
+    -   `ppcm(mult_n,mult_m) = mult_n`      
+        si `mult_n = mult_m`   (condition d’arrêt)
+
+-   Puissance indienne
+\begin{align*}
+a^b & = a^{b/2}\cdot a^{b/2} & \textrm{ si $b$ est pair (récursivité)} \\
+a^b & = a^{b-1}\cdot a  & \textrm{ si $b$ est impair (récursivité)} \\
+a^0 & = 1   & \textrm{ (condition d’arrêt)}
+\end{align*}
+
+-   Suite de Fibonacci
+\begin{align*}
+a_n & = a_{n-1} + a_{n-2} & \textrm{  (récursivité)} \\
+a_1 & = 1, a_0 = 0 & \textrm{  (condition d’arrêt)}
+\end{align*}
+
+##  Problème des 8-reines
+
+- Le but du problème des 8 reines est de placer 8 reines d'un jeu d'échecs sur un échiquier de $8 \times 8$ cases sans que les reines ne puissent se menacer mutuellement, conformément aux règles du jeu d'échecs. 
+- Ainsi, deux reines ne devraient jamais partager la même rangée, colonne, ou diagonale.
+- Le problème se généralise au placement de N reines sur un échiquier de $N \times N$ cases. Pour $N=8$, il y a 92 solutions
+- Il s'agit d'un exemple classique de problème de backtracking qui se programme avec la récursivité.
+
+![Problème des 8-reines. Source : wikipedia, https://fr.wikipedia.org/wiki/Problème_des_huit_dames](./figures/fig_recursivite_8_reines.png)
\ No newline at end of file
diff --git a/lessons/figures/fig_recursivite_8_reines.png b/lessons/figures/fig_recursivite_8_reines.png
new file mode 100644
index 0000000000000000000000000000000000000000..7bbe986203f74f1c90fc9a87e86ad796e5d1894d
GIT binary patch
literal 11151
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

literal 0
HcmV?d00001

diff --git a/source_codes/recursivity/lissage.c b/source_codes/recursivity/lissage.c
new file mode 100644
index 0000000..f501ca0
--- /dev/null
+++ b/source_codes/recursivity/lissage.c
@@ -0,0 +1,66 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+const int SIZE = 64;
+
+// Moyenne des pixels de l'image <im>
+double moyenne(int n,int im[n][n]) {
+   double size = n*n;
+   double moy = 0.0;
+   for (int i=0;i<n;i++) {
+      for (int j=0;j<n;j++) {
+         moy += im[i][j]/size;
+      }
+   }
+   return moy;
+}
+
+// Nombre de pixels de l'image <im> dont la différence
+// à la valeur <val> est supérieure à une tolérance <tol>
+int nb_pixels_diff(int n,int im[n][n],double val,double tol) {
+   // à compléter
+   return 0;
+}
+
+// Affectation de la valeur <val> à tous les pixels de l’image <im>
+void copy(int n,int im[n][n],int val) {
+   // à compléter
+}
+
+void copy_slice(int decal_x,int decal_y,int n,int im1[n][n],int k,int im2[k][k]) {
+   // à compléter
+}
+
+void copy_back(int decal_x,int decal_y,int n,int im1[n][n],int k,int im2[k][k]) {
+   // à compléter
+}
+
+//Lissage récursif de l'image <im> en remplaçant les pixels
+// d'un quadrant par leur moyenne 
+void lissage(int n,int im[n][n],double tol,double seuil) {
+   double moy = moyenne(n,im);
+   double size = n*n;
+   if (nb_pixels_diff(n,im,moy,tol)/size < seuil) {
+      copy(n,im,moy);
+   } else { // si on ne peut pas lisser l'image, alors on essaie sur les quadrants
+      int quadrant[n/2][n/2];
+      copy_slice(0,0,n,im,n/2,quadrant);
+      lissage(n/2,quadrant,tol,seuil);
+      copy_back(0,0,n,im,n/2,quadrant);
+      copy_slice(n/2,0,n,im,n/2,quadrant);
+      lissage(n,quadrant,tol,seuil);
+      copy_back(n/2,0,n,im,n/2,quadrant);
+      copy_slice(0,n/2,n,im,n/2,quadrant);
+      lissage(n/2,quadrant,tol,seuil);
+      copy_back(0,n/2,n,im,n/2,quadrant);
+      copy_slice(n/2,n/2,n,im,n/2,quadrant);
+      lissage(n,quadrant,tol,seuil);
+      copy_back(n/2,n/2,n,im,n/2,quadrant);
+   }
+}
+
+void main() {
+   int image_gris[SIZE][SIZE];
+   copy(SIZE,image_gris,234);
+   lissage(SIZE,image_gris,0.1,10.0);
+}
diff --git a/source_codes/recursivity/rec_binary.c b/source_codes/recursivity/rec_binary.c
new file mode 100644
index 0000000..2eb856b
--- /dev/null
+++ b/source_codes/recursivity/rec_binary.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+// Ecriture binaire
+void binaire(int n);
+
+int main() {
+   int n;
+   printf("n=");
+   scanf("%d",&n);
+   binaire(n);
+   printf("\n");
+}
+
+// Ecriture binaire
+void binaire(int n) {
+   //printf("%d",n%2);
+   if (n/2 != 0) {
+      binaire(n/2);
+   }
+   printf("%d",n%2);
+}
+
diff --git a/source_codes/recursivity/rec_factorielle.c b/source_codes/recursivity/rec_factorielle.c
new file mode 100644
index 0000000..e5513d1
--- /dev/null
+++ b/source_codes/recursivity/rec_factorielle.c
@@ -0,0 +1,19 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int fact(int n);
+
+void main() {
+   int n;
+   printf("n=");
+   scanf("%d",&n);
+   printf("%d\n",fact(n));
+}
+
+int fact(int n) {
+   if (1 == n) {
+      return 1;
+   } else {
+      return n*fact(n-1);
+   }
+}
diff --git a/source_codes/recursivity/rec_fibonacci.c b/source_codes/recursivity/rec_fibonacci.c
new file mode 100644
index 0000000..0c8a487
--- /dev/null
+++ b/source_codes/recursivity/rec_fibonacci.c
@@ -0,0 +1,22 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+// Suite de Fibonacci: a_n = a_{n-1} + a_{n-2}, a_0 = 0, a_1 = 1
+int fib(int n);
+
+int main() {
+   int n;
+   printf("n=");
+   scanf("%d",&n);
+   printf("%d\n",fib(n));
+}
+
+// Suite de Fibonacci: a_n = a_{n-1} + a_{n-2}, a_0 = 0, a_1 = 1
+int fib(int n) {
+   switch(n) {
+    case 0: return 0;
+    case 1: return 1;
+    default: return fib(n-1)+fib(n-2);
+   }
+}
+
diff --git a/source_codes/recursivity/rec_pgcd.c b/source_codes/recursivity/rec_pgcd.c
new file mode 100644
index 0000000..4c6b6a4
--- /dev/null
+++ b/source_codes/recursivity/rec_pgcd.c
@@ -0,0 +1,23 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int pgcd(int n,int m);
+
+void main() {
+   int n,m;
+   printf("n=");
+   scanf("%d",&n);
+   printf("m=");
+   scanf("%d",&m);
+   printf("%d\n",pgcd(n,m));
+}
+
+int pgcd(int n,int m) {
+   if (n%m > 0) {
+      return pgcd(m,n%m);
+   } else {
+      return m;
+   }
+}
+
+
diff --git a/source_codes/recursivity/rec_ppcm.c b/source_codes/recursivity/rec_ppcm.c
new file mode 100644
index 0000000..ef505ee
--- /dev/null
+++ b/source_codes/recursivity/rec_ppcm.c
@@ -0,0 +1,24 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+int ppcm(int mult_n,int mult_m,int n,int m);
+
+void main() {
+   int n,m;
+   printf("n=");
+   scanf("%d",&n);
+   printf("m=");
+   scanf("%d",&m);
+   printf("%d\n",ppcm(n,m,n,m));
+}
+
+int ppcm(int mult_n,int mult_m,int n,int m) {
+   if (mult_n < mult_m) {
+      return ppcm(n+mult_n,mult_m,n,m);
+   } else if (mult_n > mult_m) {
+      return ppcm(mult_n,m+mult_m,n,m);
+   } else {
+      return mult_n;
+   }
+}
+
diff --git a/source_codes/recursivity/rec_puissance_indienne.c b/source_codes/recursivity/rec_puissance_indienne.c
new file mode 100644
index 0000000..ceff6ba
--- /dev/null
+++ b/source_codes/recursivity/rec_puissance_indienne.c
@@ -0,0 +1,26 @@
+#include <stdio.h>
+#include <stdlib.h>
+
+// Puissance indienne
+int puissance(int a,int b);
+
+int main() {
+   int n,m;
+   printf("n=");
+   scanf("%d",&n);
+   printf("m=");
+   scanf("%d",&m);
+   printf("%d\n",puissance(n,m));
+}
+
+// Puissance indienne
+int puissance(int a,int b) {
+   if (0 == b) {
+      return 1;
+   } else if (0 == b%2) { 
+      return puissance(a,b/2)*puissance(a,b/2);
+   } else {
+      return puissance(a,b-1)*a;
+   }
+}
+
diff --git a/source_codes/recursivity/rec_reines.c b/source_codes/recursivity/rec_reines.c
new file mode 100644
index 0000000..5f54088
--- /dev/null
+++ b/source_codes/recursivity/rec_reines.c
@@ -0,0 +1,75 @@
+// Problème des N-reines
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+bool** board_alloc(int n) {
+   bool** tab = malloc(n*sizeof(bool*));
+   for (int i=0;i<n;i++) {
+      tab[i] = malloc(n*sizeof(bool));
+      for (int j=0;j<n;j++) {
+         tab[i][j] = true;
+      }
+   }
+   return tab;
+}
+
+void board_free(int n,bool** tab) {
+   for (int i=0;i<n;i++) {
+      free(tab[i]);
+   }
+   free(tab);
+}
+
+bool** clone(int n,bool** board) {
+   bool** tab = board_alloc(n);
+   for (int i=0;i<n;i++) {
+      for (int j=0;j<n;j++) {
+         tab[i][j] = board[i][j];
+      }
+   }
+   return tab;
+}
+
+// Retourne une copie du tableau <board> complété avec les positions 
+// prises sur la droite droite par une reine placée en <board(li,co)>
+bool** prises_devant(int n,bool** board,int li,int co) {
+   bool** cases_prises = clone(n,board);
+   cases_prises[li][co] = false; // position de la reine
+   for (int j=1;j<n-co;j++) {
+      // horizontale et diagonales à droite de la reine
+      if (j <= li) {
+         cases_prises[li-j][co+j] = false;
+      }
+      cases_prises[li][co+j] = false;
+      if (li+j < n) {
+         cases_prises[li+j][co+j] = false;
+      }
+   }
+   return cases_prises;
+}
+
+// Calcule le nombre de solutions au problème des <N> reines
+void nb_sol(int n,bool** board,int co, int* ptr_cpt) {
+   for (int li=0;li<n;li++) {
+      if (board[li][co]) {
+         if (co < n-1) {
+            bool** tab = prises_devant(n,board,li,co);
+            nb_sol(n,tab,co+1,ptr_cpt);
+            board_free(n,tab);
+         } else {
+            *ptr_cpt = (*ptr_cpt)+1;
+         }
+      }
+   }
+} 
+
+void main() {
+   int n = 8;
+   // échiquier où placer les reines
+   bool** board = board_alloc(n);
+   // compteur du nombre de solutions au problème des <N> reines
+   int cpt = 0; 
+   nb_sol(n,board,0,&cpt);
+   printf("Nombre de solutions: %d\n",cpt);
+}
diff --git a/source_codes/recursivity/rec_reines_skel.c b/source_codes/recursivity/rec_reines_skel.c
new file mode 100644
index 0000000..7b2b056
--- /dev/null
+++ b/source_codes/recursivity/rec_reines_skel.c
@@ -0,0 +1,54 @@
+// Problème des N-reines
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+
+// Alloue un tableau de dimension nxn de booléens dont le contenu est true
+bool** board_alloc(int n) {
+   // à compléter!!!!
+   return NULL;
+}
+
+// Désalloue un tableau de dimension nxn de booléens
+void board_free(int n,bool** tab) {
+   // à compléter!!!!
+}
+
+// Retourne un clone de <board>
+bool** clone(int n,bool** board) {
+   // à compléter!!!!
+   return NULL;
+}
+
+// Retourne une copie du tableau <board> complété avec les positions 
+// prises sur la droite droite par une reine placée en <board(li,co)>
+bool** prises_devant(int n,bool** board,int li,int co) {
+   bool** cases_prises = clone(n,board);
+   // à compléter!!!!
+   return cases_prises;
+}
+
+// Calcule le nombre de solutions au problème des <N> reines
+void nb_sol(int n,bool** board,int co, int* ptr_cpt) {
+   for (int li=0;li<n;li++) {
+      if (board[li][co]) {
+         if (co < n-1) {
+            bool** tab = prises_devant(n,board,li,co);
+            nb_sol(n,tab,co+1,ptr_cpt);
+            board_free(n,tab);
+         } else {
+            *ptr_cpt = (*ptr_cpt)+1;
+         }
+      }
+   }
+} 
+
+void main() {
+   int n = 8;
+   // échiquier où placer les reines
+   bool** board = board_alloc(n);
+   // compteur du nombre de solutions au problème des <N> reines
+   int cpt = 0; 
+   nb_sol(n,board,0,&cpt);
+   printf("Nombre de solutions: %d\n",cpt);
+}
-- 
GitLab