IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

Mon programme ne renvoie pas à l'état initial


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 0
    Points
    0
    Par défaut Mon programme ne renvoie pas à l'état initial
    Bonjour.
    Je veux écrire un programme qui affiche le menu suivant:
    1- Résolution d'un polynôme de 1er degré
    2- Résolution d’un polynôme de 2nd degré
    3- Quitter
    Après avoir fait un de ces traitement, le programme doit interroger l'utilisateur s’il veut continuer ou non. Si oui, il le renvoi au menu principal sinon il met fin à l’exécution.
    J’ai fait un premier essai mais mon programme ne fait pas ça : dans un premier temps, il fait correctement le traitement d’un choix parmi les 3 mais juste ensuite il ne communique pas comme voulu avec l’utilisateur pour le renvoyer au menu ou quitter.
    SVP Aidez-moi!!
    Voila mon code :


    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    #include<stdio.h>
    #include <math.h>
     
    void affichagemenu()
    {
        printf("Tapez le nombre correspondant pour choisir l'opération à effectuer:\n 1 pour résoudre un polynome de premier degré\n 2 pour résoudre un polynome de second degré\n 3 pour quitter le programme\n");
    }
     
    int lirechoix()
    {
        int Indice=0;
        affichagemenu();
        scanf("%d",&Indice);
        return(Indice);
    }
     
    float premier()
    {
        int a=0, b=0;
        float x=0;
     
        printf("Votre polynome s'écrit sous la forme: ax+b=0\n\n");
     
        printf("Que vaut 'a' ? ");
        scanf("%d", &a);
        printf("\n\n");
     
        printf("Que vaut 'b' ? ");
        scanf("%d", &b);
        printf("\n\n");
     
        if (a!=0)
        {
            x=-((float)b)/a;
            printf("La solution de l'equation est : x = %f\n\n\n", x);
        }
        else
        {
            if(b == 0)
            printf("Tout réel a strictement different de zero est une solution !\n\n\n"); // la solution est 0 divisé par a avec a non nul
            else
            printf("Pas de solution réelle\n\n\n");
            return (x);
        }
    }
     
     
    float second()
    {
        /* Calcul des solutions réelles d'une équation du second degré */
        int A, B, C;
        float f;
        double D; /* Discriminant Delta*/
        printf("Votre polynome s'écrit sous la forme:  ax^2 + bx + c = 0 \n\n");
        printf("Que vaut a, b et c? Introduisez les en ordre: a, b, puis c :\n");
        scanf("%i %i %i", &A, &B, &C);
     
        D = pow(B,2) - 4.0*A*C; /* Calcul du discriminant b^2-4ac */
     
        /* Distinction des différents cas */
        if (A==0 && B==0 && C==0) /* 0x = 0 */
        printf("Tout réel est une solution de cette équation.\n");
        else if (A==0 && B==0)  /* Contradiction: c # 0 et c = 0 */  
        printf("Cette équation ne possède pas de solutions.\n");
        else if (A==0) /* bx + c = 0 */ 
        {
            printf("La solution de cette équation est :\n"); 
            f=((double)C/B);
            printf(" x = %.4f\n", f);
        }
        else if (D<0)  /* b^2-4ac < 0 */ 
        printf("Cette équation n'a pas de solutions réelles.\n");
        else if (D==0) /* b^2-4ac = 0 */ 
        {
            printf("Cette équation a une seule solution réelle :\n");
            f=((double)-B/(2*A));
            printf(" x =  %.4f\n", f);
        }
        else /* b^2-4ac > 0 */ 
        {
            printf("Les solutions réelles de cette équation sont :\n");
            f=((-B+sqrt(D))/(2*A)); //sqrt est la fonction dans le langage C pour le racine carré
            printf(" x1 = %.4f\n", f);
            f=((-B-sqrt(D))/(2*A));
            printf(" x2 = %.4f\n", f);
            return (f);
        }
    }
     
    float main()
    {
        int l,o ;
        float s;
        printf("************************************************\n**** Solveur de polynome ****\n************************************************\n\n");  
        l=lirechoix();
        while (l!=3)
        {
            if (l==1)
            {
                s=premier();
                scanf("%f",&s);
            }
            else if (l==2)
            {
                s=second();
                scanf("%f",&s);
            }
        }
            printf("Tapez 1 pour continuer vers une autre opération\nTapez une touche quelconque pour quitter\n");
            /*j'ai choisi d'ajouter cette étape pour ne pas encombrer les affichages et mettre l'utilisateur à l'aise au
            lieu de lui afficher le menu à chaque fois */
            scanf("%d",&o);
            while (o!=1)
            {
                return 0; // si l'utilisateur ne veut pas continuer
            }
     
        l= lirechoix(); // pour renvoyer le menu s'il veut continuer
    }

  2. #2
    Expert éminent
    Homme Profil pro
    Ingénieur développement matériel électronique
    Inscrit en
    Décembre 2015
    Messages
    1 565
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ingénieur développement matériel électronique
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Décembre 2015
    Messages : 1 565
    Points : 7 648
    Points
    7 648
    Par défaut
    Bonjour,

    Ta boucle teste la variable l, mais à aucun moment à l'intérieur de la boucle tu ne changes l. Donc ton choix ne change jamais. A faut agir à l'intérieur de la boucle donc ramener tes lignes 109 à 118 dans la boucle.

    Il y a d'autres erreurs dont certaines on dues t'être indiquées par des Warnings du compilateur.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2020
    Messages
    3
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Novembre 2020
    Messages : 3
    Points : 0
    Points
    0
    Par défaut
    Merci dalfab.

    J'ai essayé de simplifier le code en éliminant l'interrogation de l'utilisateur pour continuer ou non afin de revenir directement au menu.
    En répondant à votre remarque, j'ai mis toute les instructions dans une boucle do white mais je trouve toujours le même problème

    Voilà un autre essai (fonction main):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    float main()
    {
    int l ;
    float s;
    printf("********************** **************************\n** ** Solveur de polynome ****\n************************ ************************\n\n") ;
    do
    {
    l=lirechoix();
    if (l==1)
    {
    s=premier();
    }
    else if (l==2)
    {
    s=second();
    }
    scanf("%f",&s);
    }
    while (l!=3);
    }

  4. #4
    Membre éprouvé
    Femme Profil pro
    ..
    Inscrit en
    Décembre 2019
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 94
    Localisation : Autre

    Informations professionnelles :
    Activité : ..

    Informations forums :
    Inscription : Décembre 2019
    Messages : 562
    Points : 1 253
    Points
    1 253
    Par défaut
    Bonjour,

    Essaye comme cela :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    int main()
    {
        int choix= 0;
        while ((choix= lirechoix())) {
            if (choix == 1) { // ou un switch (choix) {
        ...

  5. #5
    Expert éminent sénior
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 689
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 689
    Points : 30 983
    Points
    30 983
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Citation Envoyé par InToX86 Voir le message
    Voilà un autre essai
    Et si tu rajoutais printf("%d", l) après l=lirechoix() ?
    Accessoirement j'ai déjà vu du assez souvent du void main() mais du float main() c'est la première fois
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

Discussions similaires

  1. Mon programme ne trouve pas le package jt400
    Par Greg.shogun dans le forum JDBC
    Réponses: 2
    Dernier message: 11/05/2007, 10h21
  2. Réponses: 3
    Dernier message: 16/04/2007, 17h01
  3. Mon programme ne marche pas aprés le if:?
    Par mitherkiller dans le forum C
    Réponses: 28
    Dernier message: 28/03/2007, 19h47
  4. Mon programme ne fonctionne pas
    Par phil23 dans le forum C
    Réponses: 4
    Dernier message: 22/03/2007, 16h31
  5. Sos mon programme ne marche pas
    Par monalisa_dulouvre dans le forum C
    Réponses: 49
    Dernier message: 26/12/2006, 18h35

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo