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