Partage
  • Partager sur Facebook
  • Partager sur Twitter

Tester une fonction void

Sujet résolu
Anonyme
    20 février 2020 à 14:36:06

    Hey, bien le bonjour à tous !

    Le python c'est finit pour moi, je débute le C et j'aurais besoin de vos talents :)

    Je n'arrive pas à tester cette fonction ;

     
    void afficheRacine(float a, float b, float c) {
    
    float rac1 = (-b + sqrt(discriminant(a, b, c))) / 2*a ;
    float rac2 = (-b - sqrt(discriminant(a, b, c))) / 2*a ;
    float double1 = -b / 2*a ;
    
      if (discriminant(a, b, c) > 0) {
        printf("il y'a 2 racines %f\n,%f\n",rac1,rac2) ; }
    
      if (discriminant(a, b, c) < 0) {
        printf("il y'a pas de racines") ; }
      else {
        printf(" il y'a une racine double %f\n", double1) ; }
    }
    

    je ne peux pas faire d'assert car la fonction ne retourne rien et je n'arrive pas à écrire un printf correct, pourriez vous me renseigner ? comment tester une fonction qui ne renvoie rien ?

    merci d'avance

    • Partager sur Facebook
    • Partager sur Twitter
      20 février 2020 à 16:15:36

      bonjour, j'ai voulu testé ton code mais il me manque la fonction "discriminant(), bref sinon pour tester tu peux rajouter des printf() dans le code par exemple avant tes if, tu peux rajouter un 
      printf("rac1 = %f\nrac2 = %f\ndouble1 = %f\n", rac1, rac2, double1);
      pour verifier la valeur de tes variables et voir pourquoi elles ont ces valeurs si ça n'est pas les valeurs que tu escomptais

      • Partager sur Facebook
      • Partager sur Twitter
        21 février 2020 à 2:07:09

        Salut,
        Si je ne m'abuse, c'est la solution de l'équation:
        ax² + bx + c = 0
        Le discriminant devrait valoir
        b² - 4ac
        je me trompe?
        Si a, b et c sont des réel, je crois que le discriminant est toujours positif.
        Au pire, il est 0 et les racines sont confondues.
        Et sqrt() d'un nombre négatif donne probablement n'importe quoi.
        Si tu n'es pas certain, fais le test avant le calcul.
        Petite subtilité:
        x / 2 * a  >>  (x / 2) * a
        N'est pas la même chose que:
        x / (2 * a)
        • Partager sur Facebook
        • Partager sur Twitter

        Le Tout est souvent plus grand que la somme de ses parties.

          21 février 2020 à 20:12:03

          SemaAsl a écrit:

          je n'arrive pas à écrire un printf correct 

          Qu'est-ce que tu entends par là ? Que les 'printf' n'affichent pas la bonne valeur ? Dans ce cas c'est un test ! Ça montre qu'il y a une erreur de calcul.

          Si j'étais toi, j'essaierai de mettre des parenthèses comme ça :

          float rac1 = (-b + sqrt(discriminant(a, b, c))) / (2*a) ;
                                                            ^^^^^
                                                             ici

          Je ne suis pas sûr que ça change quelque chose, mais ça ne m'étonnerait pas : en l'absence de parenthèses, comme les opérations / et * ont la même priorité, il serait logique qu'il fasse d'abord la division, et ensuite la multiplication. Or (truc/2) * a ne donne évidemment pas le même résultat que truc / (2*a).

          (Oups, Pierrot avait déjà fait la remarque. Disons que j'appuie sa remarque !)

          Si par « 'printf' correct » tu entendais autre chose, sois précis !

          -
          Edité par robun 21 février 2020 à 20:13:56

          • Partager sur Facebook
          • Partager sur Twitter
          Anonyme
            23 février 2020 à 9:24:56

            robun a écrit:

            PierrotLeFou a écrit:



            Franchement vous gérez !

            Effectivement robun ce que je voulais dire à travers l'indication " printf incorrect " c'est que je n'arrivais pas à obtenir les bonnes valeurs .

            Je pensais qu'il s'agissait d'une erreur de test mais comme vous me l'avez fais remarquer les PARENTHÈSES CA CHANGE TOUT, merci beaucoup !

            par contre j'ai une erreur qui s'affiche concernant la fonction sqrt , il s'agit bien de la bibliothèque < math.h > ?

            Pourriez vous m'aider à interpréter 

            /tmp/ccxZ0Dtf.o: In function `afficheRacine':
            main.c:(.text+0x1b4): undefined reference to `sqrt'
            main.c:(.text+0x225): undefined reference to `sqrt'
            collect2: error: ld returned 1 exit status

            -
            Edité par Anonyme 23 février 2020 à 15:55:18

            • Partager sur Facebook
            • Partager sur Twitter
              23 février 2020 à 18:47:23

              Tu as deux problèmes. Comme tu l'as dit, tu as besoin de la définition de sqrt dans math.h.
              Mais si tu as compilé ta fonction seule sans le 'main', ton compilateur ne trouve pas de point d'entrée.
              C'est ça le sens du message "collect2: error: ld returned 1 exit status".
              Ou bien (et/ou) il ne peut trouver 'sqrt' ailleurs que dans les librairies standard.
              Si tu veux compiler ta fonction seule, utilises '-c' plutôt que '-o' ou rien du tout.
              Tu auras un fichier '.o' que tu pourras éliminer si tu veux.

              -
              Edité par PierrotLeFou 23 février 2020 à 18:54:40

              • Partager sur Facebook
              • Partager sur Twitter

              Le Tout est souvent plus grand que la somme de ses parties.

              Anonyme
                23 février 2020 à 19:01:46

                PierrotLeFou a écrit:

                Tu as deux problèmes. Comme tu l'as dit, tu as besoin de la définition de sqrt dans math.h.
                Mais si tu as compilé ta fonction seule sans le 'main', ton compilateur ne trouve pas de point d'entrée.
                C'est ça le sens du message "collect2: error: ld returned 1 exit status".
                Si tu veux compiler ta fonction seule, utilises '-c' plutôt que '-o' ou rien du tout.
                Tu auras un fichier '.o' que tu pourras éliminer si tu veux.

                -
                Edité par PierrotLeFou il y a moins de 30s

                Top ! Je viens d'essayer ça fonctionne, merci encore :D !

                • Partager sur Facebook
                • Partager sur Twitter

                Tester une fonction void

                × 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