Partage
  • Partager sur Facebook
  • Partager sur Twitter

Mauvais affichage d'une variable

    12 décembre 2018 à 22:00:34

    Bonsoir,

    Je n'ai pas trouvé de problème similaire sur le forum. Je voudrais afficher tous les entiers a et b tels que :

    - a+b<=100

    - (a+(1/b))=(13*(b+(1/a)))

    Pour cela, j'ai écrit le code suivant :

    #include "uvsqgraphics.h"
    
    // Début du code
    
    int largeur=400;
    int hauteur=600;
    
    void affiche(int a, int b){
    	write_text("a: ");
    	write_int(a);
    	write_text("  ");
    	write_text("b : ");
    	write_int(b);
    	writeln();
    }
    
    int main(){
    	
    init_graphics(largeur,hauteur);
    
    for(int a=1;a<=100;a++){
    	for(int b=1;b<=100;b++){
    		if((a+b)<=100){
    			if((a+(1/b))==(13*(b+(1/a)))){
    				affiche(a,b);
    			}
    		}
    	}
    }
    
    wait_escape();
    exit(0);
    }
    
    // Fin du code

    Voici ce qu'il affiche en sortie :

    Problème, nous devions trouver 13 pour la première valeur de a, ce qui est logique avec les autres valeurs de a qui sont des multiples de 13. Je ne comprend pas pourquoi le programme affiche 12 ici au lieu de 13, quelqu'un aurait-il une idée de pourquoi et comment y remédier ?

    Merci d'avance !

    Note : Je code avec la bibliothèque de mon université (uvsqgraphics.h) et nous avons établi une fonction write_text pour afficher du texte et des variables. En effet, en utilisant la fonction printf, ce type de programme nous renvoie l'erreur "segmentation fault" (problème de bibliothèque) même en utilisant les registres stdio.h.
    Je code sous une machine virtuelle Debian.

    -
    Edité par Messor_ 12 décembre 2018 à 22:02:28

    • Partager sur Facebook
    • Partager sur Twitter
      12 décembre 2018 à 22:08:50

      Bonjour ! Le problème vient probablement des opérations 1/b et 1/a : il s'agit de divisions entières, donc leur valeur vaut 0 dès lors que a et b sont plus grands que 1. Par exemple 1/2 vaudra 0.

      Une solution serait de faire 1.0/b et 1.0/a, qui forcerait la division à être une division en nombres flottants, mais je pense que c'est une mauvaise idée à cause des possibles erreurs d'arrondis. Par exemple lorsque a = 13 et b = 1, b+1/a vaudra 1 + 1/13 = 1.76923077, et si on le multiplie par 13 ça donnera quelque chose comme 14.0000000001. Le test conclura que ce n'est pas égal à 14.

      Dans ce cas il faudrait tester l'égalité avec une certaine précision, ce qui pourrait se faire en écrivant une fonction (retournant un booléen). Au lieu de tester x == y, on testerait que la valeur absolue de x - y soit inférieure à une certaine précision. Je pense que ça marcher.

      Mais la vraie solution, je crois, c'est de modifier l'équation en la mettant au même dénominateur et en testant l'égalité des numérateurs. (Je viens de faire le calcul, je tombe sur l'équation a = 13b.)

      -
      Edité par robun 12 décembre 2018 à 22:12:42

      • Partager sur Facebook
      • Partager sur Twitter
        12 décembre 2018 à 22:49:33

        Merci de votre réponse rapide. J'avais essayé d'isoler a ou b mais je n'avais pas pu exprimer l'un en fonction de l'autre. En revanche je n'avais pas pensé à mettre au même dénominateur pour comparer les numérateurs, mais j'ai beau retourner l'équation dans tous les sens, je ne trouve toujours pas a=13b.

        En fait le problème viendrait de là. Je vais réessayer et je reviendrais vers vous si je ne trouve pas.

        Merci quand même !

        • Partager sur Facebook
        • Partager sur Twitter
          13 décembre 2018 à 2:14:30

          C'est du niveau 4ème ! ;)

          \[ a + \frac{1}{b} = 13 \; \left( b + \frac{1}{a} \right) \]

          \[ \frac{ab+1}{b} = 13 \cdot \frac{ab+1}{a} \]

          Comme ab+1 est non-nul, on peut diviser à gauche et à droite par ab+1, ce qui donne :

          \[ \frac{1}{b} = \frac{13}{a} \]

          Par produit en croix :

          \[ 1 \cdot a = 13 \; b \]

          -
          Edité par robun 13 décembre 2018 à 2:17:58

          • Partager sur Facebook
          • Partager sur Twitter
            19 décembre 2018 à 0:32:06

            Bonsoir,

            Le problème a été résolu depuis un moment déjà en passant par un produit nul. ^^

            -
            Edité par Messor_ 19 décembre 2018 à 0:32:18

            • Partager sur Facebook
            • Partager sur Twitter

            Mauvais affichage d'une variable

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown