From 7bc98b48005656ad22d7ae1f44fd3c3d7438aa8b Mon Sep 17 00:00:00 2001
From: Darciaux Yoann <yoann.darciaux3@etu.univ-lorraine.fr>
Date: Sun, 30 Mar 2025 13:15:30 +0200
Subject: [PATCH] exo 7 + Maj du compte rendu

---
 compte_rendu_debug.txt | 19 +++++++++++++++++++
 exo7.ts                | 34 ++++++++++++++++++++++++++++++++++
 2 files changed, 53 insertions(+)
 create mode 100644 exo7.ts

diff --git a/compte_rendu_debug.txt b/compte_rendu_debug.txt
index 4a642b8..8ee0877 100644
--- a/compte_rendu_debug.txt
+++ b/compte_rendu_debug.txt
@@ -28,3 +28,22 @@ Si je modifie tab1, cela affecte aussi tab 2.
 En faisant le programme petit a petit je me rend compte que tab1 n'affecte pas tab2.
 J'en déduis qu'à la ligne 2 l'opérateur ([...]), "change" tab2 en une copie indépendante de tab1, ainsi on peut modifier tab1 sans affecter tab2
 dans cette exercice, j'ai appris à utiliser l'operateur ([...]) qui sert a modifier indépendament des tableaux.
+
+Exercice 7:
+La fonction deb7 prend deux arguments x et y.
+La fonction actuel calcule le produit de x et y en ajoutant x à lui-même y fois (via une boucle for).
+
+La fonction effectue une multiplication en utilisant des additions répétées. 
+deb7(3, 5) et deb7(5, 3) devraient donner le même résultat, mais la boucle s'exécute un nombre de fois égal à y, ce qui peut être inefficace si y est beaucoup plus grand que x
+Pour optimiser la fonction, j'ai fait en sorte que la boucle s'exécute le plus petit nombre de fois possible. J'ai donc fait en sorte d'échanger les valeurs de x et y si y < x
+
+
+Le programme fonctionne correctement pour des nombres négatifs, mais l'ordre des arguments n'est pas bien géré, par exemple : quand je fais deb7(3, -5), la boucle ne s'exécute pas correctement, car y (le nombre d'itérations) sera négatif, ce qui est invalide pour une boucle for
+
+Le programme fonctionne correctement pour ce cas, car l'échange des valeurs de x et y permet à la boucle de s'exécuter correctement, cependant, le programme ne gère pas tous les cas où y est négatif. Par exemple, si deb7(-5, -3) est appelé, la boucle ne fonctionnera pas correctement, car y (le nombre d'itérations) sera négatif
+Pour gérer les cas où y est négatif, je vais d'abbord vérifier si y est négatif, si y est négatif, je vais faire en sorte de convertir y en positif et ajuster le signe de x pour que le résultat final reste correct
+
+J'ai modifié mon programme pour qu'avant d'entrer dans la boucle, le programme affiche les valeurs de x et y après les éventuelles corrections (inversion de signe ou échange) pour vérifier que l'optimisation est bien appliquée
+Les test avec les valeurs données fonctionnent
+
+dans cette exercice, j'ai appris à gerer des nombres négatifs dans un algorithme, optimisation des boucles ainsi qu'à utiliser le débogage dans des situations concrètes
diff --git a/exo7.ts b/exo7.ts
new file mode 100644
index 0000000..a2d28f3
--- /dev/null
+++ b/exo7.ts
@@ -0,0 +1,34 @@
+multiplierParAddition(5, -3);
+
+function multiplierParAddition(x: number, y: number): number {
+    let val = 0;
+
+    // Si y est négatif, on le rend positif et on inverse le signe de x
+    if (y < 0) {
+        y = -y;
+        x = -x;
+    }
+
+    // Optimisation : toujours boucler sur le plus petit nombre
+    if (y < x) {
+        [x, y] = [y, x];
+    }
+
+    console.log(`Valeurs utilisées pour la boucle : x = ${x}, y = ${y}`);
+
+    for (let i = 0; i < y; i++) {
+        val += x;
+    }
+    return val;
+}
+
+// Tests avec les cas donnés
+const testCases: [number, number][] = [
+    [0, 0], [5, 3], [3, 5], [-5, -2], [-2, -5],
+    [-74, 2], [-1, 75], [10, -25], [10, -3]
+];
+
+testCases.forEach(([x, y]) => {
+    const result = multiplierParAddition(x, y);
+    console.log(`multiplierParAddition(${x}, ${y}) = ${result}`);
+});
-- 
GitLab