programme qui lit une chaine représentant une opération sur des entiers et qui affiche le résultat.
Répondre à la discussion
Affichage des résultats 1 à 10 sur 10

programme qui lit une chaine représentant une opération sur des entiers et qui affiche le résultat.



  1. #1
    slashergodzila

    programme qui lit une chaine représentant une opération sur des entiers et qui affiche le résultat.


    ------

    Bonjour , je rencontre un problème dans mon code j'aimerais avoir votre aide car m'aide pas merci.
    voici l'énoncé:

    Écrire un programme qui lit une chaine représentant une opération sur des entiers et qui
    affiche le résultat. Par exemple, si on lui donne la chaine 12+25, elle doit afficher 12 + 25 = 37. Seuls les
    opérateurs (+,-, x et /) seront pris en compte. Vous pouvez vous renseigner sur la fonction atoi de la
    bibliothèque stdlib.h et ainsi l'utiliser pour convertir les nombres sous formes de chaines en leur version
    entière.


    et voilà ma tentative de résolution :
    Code:
    #include <stdio.h>
    #include <string.h>
    #include <stdlib.h>
    
    int main (){
        char operation[100],nb1[100], nb2[100] ;
        char signe[] = "+-x/";
        int nombre1, nombre2;
        char signes;
        int resultat;
        printf("veuillez entrer une opération \n");
        fgets(operation, sizeof(operation), stdin);
        char *nba1 = strtok(operation,signe);
        char *nba2 = strtok(NULL,"\0");
         
        
        
    
        nombre1 = atoi(nba1);
        nombre2 = atoi(nba2);
        signes = operation[strlen(nba1) + 1];  //selection du signe
    
        if (signes =='+') {
            resultat == nombre1 + nombre2;
            printf("Le résultat de l'addition est : %d + %d = %d\n",nombre1, nombre2, resultat);
        } else if (signes == '-'){resultat = nombre1 - nombre2;
            printf("Le résultat de l'addition est : %d - %d = %d\n",nombre1, nombre2, resultat);}
        else if (signes == 'x'){resultat = nombre1 * nombre2;
            printf("Le résultat de l'addition est : %d x %d = %d\n",nombre1, nombre2, resultat);}
        else if (signes == '/'){resultat = nombre1 / nombre2;
            printf("Le résultat de l'addition est : %d / %d = %d\n",nombre1, nombre2, resultat);}
       
    
        
        return 0;
    
        
    }
    lorsque j'exécute le code , il s'affiche "veuillez entrer une opération" mais lorsque je rentre une opération ,cela ne me retourne rien.

    -----

  2. #2
    umfred

    Re : programme qui lit une chaine représentant une opération sur des entiers et qui affiche le résul

    On devrait faire apprendre l'art du débogage.
    Si rien ne s'affiche, c'est qu'on ne va dans aucun printf, il faut en trouver la raison.
    Dans un 1er temps, pourquoi ne pas afficher la chaine lue par fgets, puis les valeurs de nba1 et nba2 puis nombre1, nombre2 et signes pour vérifier qu'ils ont bien les valeurs attendues.
    Si tu as un outils de débogage, utilise le de la même façon en pas à pas pour vérifier les valeurs des variables.

    Et on peux aussi relire son code pour voir que l'on a déclaré des variables nb1 et nb2, et que l'on a mis nba1 et nba2 dans le code et voir ensuite que cela génère des erreurs de compilation à résoudre

  3. #3
    umfred

    Re : programme qui lit une chaine représentant une opération sur des entiers et qui affiche le résul

    zut, j'ai été trop vite pour mon dernier point, erreur de lecture de ma part.

  4. #4
    pm42

    Re : programme qui lit une chaine représentant une opération sur des entiers et qui affiche le résul

    Citation Envoyé par umfred Voir le message
    On devrait faire apprendre l'art du débogage.
    Oui, je ne comprends pas pourquoi on ne commence pas par ça dès qu'on donne des exercices de programmation.
    Dans le cas présent, le compilateur donne un warning logique sur : resultat == nombre1 + nombre2 au lieu de resultat = nombre1 + nombre2

    Et pour le reste, c'est simplement du au fait que signes = operation[strlen(nba1) + 1] devrait être signes = operation[strlen(nba1)] sur le papier mais que ça ne marche pas parce que strtok modifie la chaine qu'on lui passe.
    Il faudrait donc faire une copie de operation, la passer à strtok pour extraire les 2 nombres puis extraire l'opérateur de operation.

  5. A voir en vidéo sur Futura
  6. #5
    polo974

    Re : programme qui lit une chaine représentant une opération sur des entiers et qui affiche le résul

    Le premier strtok a remplacé l'operateur par un '\0'...

    Pas d'opérateur, pas d'opération.

    (Edit, un peu doublon de pm42...)
    Jusqu'ici tout va bien...

  7. #6
    Biname

    Re : programme qui lit une chaine représentant une opération sur des entiers et qui affiche le résul

    Salut,
    ChatGPT résout le pb en 1 minute
    Normalement vous pouvez compiler et tester ce code ici GDB_C_ONLINEhttps://onlinegdb.com/Hcye1h9rxr
     Cliquez pour afficher

    12x2=24 yesse
    Biname

  8. #7
    pm42

    Re : programme qui lit une chaine représentant une opération sur des entiers et qui affiche le résul

    L'obsession qu'on certains de donner les solutions complètes contrairement à ce que dit la charte est impressionnante.
    Et donner une solution qui n'utilise pas les mêmes fonctions a en plus comme inconvénient d'apprendre encore moins à celui qui poste la question.

  9. #8
    umfred

    Re : programme qui lit une chaine représentant une opération sur des entiers et qui affiche le résul

    @biname ton code c'est du C++, a priori le PO développe en C
    Mais le site https://www.onlinegdb.com/ est pratique pour faire des petits programmes à tester sans avoir besoin de tous les IDE installés sur sa machine (il a effectivement en plus un débogueur pour le C et autres langages)

  10. #9
    pm42

    Re : programme qui lit une chaine représentant une opération sur des entiers et qui affiche le résul

    Tiens je n'avais pas fait attention au C++.
    La totale.

  11. #10
    slashergodzila

    Re : programme qui lit une chaine représentant une opération sur des entiers et qui affiche le résul

    bonjour, je vous remercie de votre aide, effectivement je n'avais pas tenu compte du fait que strtok modifie la chaîne d'origine. De plus je n'avais pas bien cerné le fonctionnement de strlen . après modification, le code fonctionne parfaitement merci!!

Discussions similaires

  1. Lé résultat d'un programme C++ que je ne comprends pas...
    Par invite2ff714d5 dans le forum Programmation et langages, Algorithmique
    Réponses: 7
    Dernier message: 31/10/2014, 10h33
  2. [Brun] Chaîne Hi fi Sony HCD-H5 : affiche 00 00 ?
    Par invitea17bae9b dans le forum Dépannage
    Réponses: 0
    Dernier message: 23/08/2013, 00h53
  3. Svp un exemple de programme c d'un pic 16f877 qui affiche sur un lcd
    Par invitee93f9717 dans le forum Électronique
    Réponses: 2
    Dernier message: 05/04/2013, 00h36
  4. Aide sur l'écriture d'un programme linéaire en nombre entiers
    Par invite8b421ec7 dans le forum Mathématiques du supérieur
    Réponses: 0
    Dernier message: 03/07/2010, 15h45
  5. [Brun] Chaine Hi-Fi aiwa : hormoge ne s'affiche pas correctement !
    Par invite3785a77b dans le forum Dépannage
    Réponses: 5
    Dernier message: 14/05/2009, 18h12