From a95bd13a2df2dcb3bf6f1dc084b3a482673be3b4 Mon Sep 17 00:00:00 2001
From: "paul.albuquer" <paul.albuquerque@hesge.ch>
Date: Sun, 17 Oct 2021 16:15:15 +0200
Subject: [PATCH] added content lesson 2, put source code separately

---
 lessons/{lesson_1 => }/contenu_cours_1.md     |  0
 lessons/contenu_cours_2.md                    | 94 +++++++++++++++++++
 source_codes/loops_tests/factorielle.c        | 21 +++++
 .../loops_tests}/nb1er.c                      |  0
 source_codes/loops_tests/pgcd.c               | 28 ++++++
 source_codes/loops_tests/ppcm.c               | 24 +++++
 source_codes/loops_tests/ppcm_bis.c           | 44 +++++++++
 7 files changed, 211 insertions(+)
 rename lessons/{lesson_1 => }/contenu_cours_1.md (100%)
 create mode 100644 lessons/contenu_cours_2.md
 create mode 100644 source_codes/loops_tests/factorielle.c
 rename {lessons/lesson_1 => source_codes/loops_tests}/nb1er.c (100%)
 create mode 100644 source_codes/loops_tests/pgcd.c
 create mode 100644 source_codes/loops_tests/ppcm.c
 create mode 100644 source_codes/loops_tests/ppcm_bis.c

diff --git a/lessons/lesson_1/contenu_cours_1.md b/lessons/contenu_cours_1.md
similarity index 100%
rename from lessons/lesson_1/contenu_cours_1.md
rename to lessons/contenu_cours_1.md
diff --git a/lessons/contenu_cours_2.md b/lessons/contenu_cours_2.md
new file mode 100644
index 0000000..2993834
--- /dev/null
+++ b/lessons/contenu_cours_2.md
@@ -0,0 +1,94 @@
+# Algorithmes et structures de données 2019-20
+
+Contenu du cours 2 du du 25.09.2019
+
+*****
+
+## Plus petit commun multiple (PPCM) de deux nombres
+
+-  Algorithme de PPCM: exemple avec 12 et 15
+
+       |  Tester si| `>, <` ou `=`|          |
+       |-----------|:------------:|:---------|
+       |           | `12 < 15`    |          |
+       |           | `24 > 15`    |          |
+       |           | `24 < 30`    |          |
+       |           | `36 > 30`    |          |
+       |           | `36 < 45`    |          |
+       |           | `48 > 45`    |          |
+       |           | `48 < 60`    |          |
+       |           | `60 = 60`    | **Fin !**|
+   
+
+## Plus grand diviseur commun (PGCD) de deux nombres
+
+-   Algorithme naïf du PGCD
+    -   Pseudo-code du calcul du `PGCD` de `N` et `M`
+
+```
+            si M rem N = 0 alors
+                PGCD := N
+            sinon
+                pour I de sqrt(N) à 1 faire
+                    si N rem I = 0 et M rem I = 0 alors
+                        PGCD := I
+                        exit
+                    fin si
+                fin pour
+            fin si
+```
+
+- Algorithme d'Euclide : exemple avec N = 35 et M = 60
+ 
+    | Dividende  |  =   | Diviseur \* Quotient  |  +  |  Reste  |
+    |:----------:|:----:|:---------------------:|:---:|:-------:|
+    |     35     |  =   |   60 \* 0             |  +  |   35    |
+    |     60     |  =   |   35 \* 1             |  +  |   25    |
+    |     35     |  =   |   25 \* 1             |  +  |   10    |
+    |     25     |  =   |   10 \* 2             |  +  |    5    |
+    |     10     |  =   |    5 \* 2             |  +  |    0    |
+      
+> >     => PGCD = 5
+
+
+## Exercice : Montrer que `PGCD(M,N)*PPCM(M,N) = M*N` 
+
+- Utiliser la décomposition en facteurs 1<sup>er<sup/>
+
+## Type composé : tableaux statiques à une dimension
+
+-   Collection ordonnée d'objets de même type dont le nombre est connu à la compilation
+-   La taille d'un tableau statique ne peut pas changer en cours d'exécution
+-   Allocation contiguë en mémoire et sur la pile
+
+```C
+        int entiers[] = {1,2,3,4,5};
+        int tab[3];
+```
+- Accès aux éléments d’un tableau via l’opérateur `[index]` où `index` est l’indice de l’élément à accéder, `index` va de 0 à la taille du tableau moins un
+```C
+        int premier = entiers[0];
+        int dernier = entiers[4];
+```
+> **Attention!** L'accès à un indice hors de l'intervalle zéro à la taille du tableau moins un ne produit pas d'erreur à la compilation, mais possible à l'exécution.
+
+-   Tableau de nombres flottants
+```C
+        const int SIZE = 13;
+        float tab[SIZE];
+```
+
+-   Initialisation d'un tableau de floats avec `i*i`, puis avec des nombres aléatoires
+```C
+        for (int i=0;i<SIZE;i++) {
+            tab[i] = (float)rand()/(float)(RAND_MAX) ;
+        }
+```
+-   Recherche d'un indice de la valeur minimale d'un tableau de floats et permutation avec l'élément en 1<sup>ère</sup> position
+-   Répétition de l'opération précédente sur des tranches du tableau
+-   Tri par sélection avec illustration sur un exemple
+-   Algorithme de vérification que deux mots sont des anagrammes en utilisant un tri
+
+## Palindrome avec parcours de boucle
+
+## Le crible d'Eratosthène
diff --git a/source_codes/loops_tests/factorielle.c b/source_codes/loops_tests/factorielle.c
new file mode 100644
index 0000000..761a79a
--- /dev/null
+++ b/source_codes/loops_tests/factorielle.c
@@ -0,0 +1,21 @@
+#include <stdio.h>
+// Programme calculant la factorielle d'un nombre
+void main() {
+   int nb = 1;
+   printf("Entrer un nombre: ");
+   scanf("%d",&nb);
+   int fact = 1;
+   for(int i=2;i<=nb;i++) {
+      fact *= i;
+   }
+   /*int iter = 2;
+   while(iter <= nb) {
+      fact *= iter;
+      iter++;
+   }
+   do {
+      fact *= iter;
+      iter++;
+   } while(iter <= nb);*/ 
+   printf("Fact = %d\n",fact);
+}
diff --git a/lessons/lesson_1/nb1er.c b/source_codes/loops_tests/nb1er.c
similarity index 100%
rename from lessons/lesson_1/nb1er.c
rename to source_codes/loops_tests/nb1er.c
diff --git a/source_codes/loops_tests/pgcd.c b/source_codes/loops_tests/pgcd.c
new file mode 100644
index 0000000..0181ae7
--- /dev/null
+++ b/source_codes/loops_tests/pgcd.c
@@ -0,0 +1,28 @@
+#include <stdio.h>
+// calcul du PGCD de deux nombres
+void main() {
+   int n = 90;
+   int m = 78;
+   printf("n = %d et m = %d\n",n,m);
+
+   // algorithme naif
+   int gcd = 1;
+   for (int div=n;div>=2;div--) {
+      if (n%div == 0 && m%div == 0) {
+         gcd = div;
+         break;
+      }
+   }
+   printf("Le pgcd de %d et %d est %d\n",n,m,gcd);
+
+   // algorithme d'Euclide
+   int tmp_n = n;
+   int tmp_m = m;
+   while (tmp_n%tmp_m > 0) {
+      int tmp = tmp_n;
+      tmp_n = tmp_m;
+      tmp_m = tmp%tmp_m;
+   }
+   printf("Le pgcd de %d et %d est %d\n",n,m,tmp_m);
+}
+   
diff --git a/source_codes/loops_tests/ppcm.c b/source_codes/loops_tests/ppcm.c
new file mode 100644
index 0000000..dfd224e
--- /dev/null
+++ b/source_codes/loops_tests/ppcm.c
@@ -0,0 +1,24 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <stdbool.h>
+// Programme calculant le plus petit commun multiple (PPCM) de deux nombres 
+void main() {
+   int n = 15,m = 12;
+
+   int res = n*m;
+   for (int i=2;i<=m;i++) {
+      if (n*i%m == 0) {
+         res = n*i;
+         break;
+      }
+   }
+   printf("Le ppcm de %d et %d est %d\n",n,m,res);
+
+   int i = 1;
+   while (n*i%m != 0) {
+      i++;
+   }
+   printf("Le ppcm de %d et %d est %d\n",n,m,n*i);
+}
+   
diff --git a/source_codes/loops_tests/ppcm_bis.c b/source_codes/loops_tests/ppcm_bis.c
new file mode 100644
index 0000000..c25cbbe
--- /dev/null
+++ b/source_codes/loops_tests/ppcm_bis.c
@@ -0,0 +1,44 @@
+#include <stdio.h>
+#include <stdlib.h>
+#include <math.h>
+#include <stdbool.h>
+
+void main() {
+   int n = 15,m = 12;
+   printf("Entrez n et m:\n");
+   scanf("%d %d",&n,&m);
+   int tmp_n = n,tmp_m = m;
+
+/*
+   while (tmp_n != tmp_m) {
+      if (tmp_n < tmp_m) {
+         tmp_n += n;
+      } else {
+         tmp_m += m;
+      }
+   }
+
+   while (true) {
+      if (tmp_n < tmp_m) {
+         tmp_n += n;
+      } else if (tmp_n > tmp_m) {
+         tmp_m += m;
+      } else {
+         break;
+      }
+   }
+*/
+
+   do {
+      if (tmp_n < tmp_m) {
+         tmp_n += n;
+      } else { 
+         tmp_m += m;
+      } 
+   } while (tmp_n != tmp_m);
+
+   printf("Le ppcm de %d et %d est %d\n",n,m,tmp_m);
+}
+
+
+   
-- 
GitLab