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 :

Petit menu avec plusieurs choix proposé à l'utilisateur


Sujet :

C

  1. #1
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Points : 17
    Points
    17
    Par défaut Petit menu avec plusieurs choix proposé à l'utilisateur
    Bonjour tout le monde!!
    J'avais poster il y a quelques jours parce que j'avais un module sur les nombres complexes à réalisé. Aujourd'hui j'ai réussi à faire toutes mes fonctions. Mais je dois maintenant écrire un programme et dans celui-ci: faire un menu qui propose plusieurs choix.
    J'ai donc pensé à faire le menu suivant (c'est écrit en espagnol mais bon.. je pense que ça reste assez compréhensible):
    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
     
    int main(){
        Ttablacomplejos c;//Array de z (aqui 200) numeros complejos
        printf("Bienvenido!\n\n");
        int opcion,i=0;
     
        //OpcionesMenu
        printf("Para:\n\t- Introducir un numero complejo (forma binomica), hace 1");
        printf("\n\t- Sumar dos complejos, hace 2");
        printf("\n\t- Multiplicar dos complejos, hace 3");
        printf("\n\t- Mostrar los complejos introducido y los resultados preguntado hace 4");
        printf("\n\t- Calcular las coordenados polares de un complejo almacernado hace 5\n\n");
     
        scanf("%d",&opcion);
     
        while(opcion>=1||opcion<=5);
            switch(opcion)
            {
                case 1:
                //Almacenar el numero en la tabla y ecriberlo
                c[i]=lee_complejo();
                escribe_complejo(c[i]);
                break;
     
                case 2:
                //Multiplicar 2 complejos solicitados por el usuario y almacener en la tabla
                printf("Option2");
                //c[i]=lee_complejo();
                break;
     
                default://On est pas dans un des cas cite
                    break;
            }
     
        return 0;
    }
    Comme vous pouvez le constater je n'ai proposé que deux choix ci dessus et ça ne marche déjà pas ! Quelqu'un voit pourquoi ? Je voudrais aussi faire une option 'sortir' comment dois je m'y prendre ?

  2. #2
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    un ; intempestif :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    while(opcion>=1||opcion<=5);
    Sinon, je verrai plutôt le code organisé ainsi :

    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
    do
    {
        printf("Para:\n\t- Introducir un numero complejo (forma binomica), hace 1");
        ....
        printf("\n\t- Calcular las coordenados polares de un complejo almacernado hace 5\n\n");
        printf("\n\t- Pour sortir, taper 6\n\n");
        scanf("%d",&opcion);
        switch(opcion)
       {
          case 1 : .... 
                   break;
          .....
          case 6 : break;
          default : printf(" Erreur de saisie");
       }
    } while (opcion != 6);
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Points : 17
    Points
    17
    Par défaut
    Merci diogene, c'est ce qu'il me fallait !
    Mais pourquoi avoir mis un do, je ne comprends pas trop comment ça marche.
    Sinon, j'ai un autre problème dans mon 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
     
    int main(){
        Ttablacomplejos c;//Array de z (aqui 200) numeros complejos
        printf("Bienvenido!\n\n");
        int opcion,j,i=0;
     
        //OpcionesMenu
        do
        {
            printf("\nPara:\n\t- Introducir un numero complejo (forma binomica), hace 1");
            printf("\n\t- Sumar dos complejos, hace 2");
            printf("\n\t- Multiplicar dos complejos, hace 3");
            printf("\n\t- Mostrar los complejos introducido y los resultados preguntado hace 4");
            printf("\n\t- Calcular las coordenados polares de un complejo almacernado hace 5\n\n");
     
            scanf("%d",&opcion);
     
            switch(opcion)
            {
                case 1:
                //Almacenar el numero en la tabla y ecriberlo
                    c[i]=lee_complejo();
                    escribe_complejo(c[i]);
                    break;
     
                case 2:
                //Multiplicar 2 complejos solicitados por el usuario y almacener en la tabla
                    printf("Entre dos numeros complejos");
                    Tcomplejo c1 = lee_complejo();
                    Tcomplejo c2 = lee_complejo();
                    c[i] = suma_complejos(c1,c2);
                    escribe_complejo(c[i]);
                    break;
     
                case 4:
                //Mostrar los numeros complejos incluidos en la tabla
                    for(j=0;j!=i;j++){
                        printf("%d\n",c[j]);
                    }
     
     
     
                default://On est pas dans un des cas cite
                    break;
            }
            i++;
     
            //printf("\n valeur de i:%d", i);
        }while (opcion != 6);
        return 0;
    }
    J'en suis là et le truc c'est que lorsque je tape 4 alors ça ne me fait pas le résultat attendus !! C'est à dire qu'a chaque fois que je réalise un calcul ou que je rentre un nombre complexe, je le met dans une liste (c; taille 200) et si je tape 4, j'aimerais afficher tout les résultats de cette liste. Sauf que ça m'affiche des 0 à la place... Voici aussi le code mes fonctions, peut être que ça vient de là:
    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
     
    void escribe_complejo(Tcomplejo c){
        printf("Tu nombre complejo es: %.2f + %.2fi", c.a, c.b);
    }
     
    Tcomplejo suma_complejos(Tcomplejo c1, Tcomplejo c2){
        Tcomplejo suma;
        suma.a = c1.a + c2.a;
        suma.b = c1.b + c2.b;
        return suma;
    }
     
    Tcomplejo lee_complejo(void){
        Tcomplejo c;
        printf("\nEntre tu nombre complejo en forma binomica: ");
        //scanf("%.2lf %.2lf", &(c.a), &(c.b));
        scanf("%lf %lf", &(c.a), &(c.b));
        //printf("Tu nombre complejo es: %.2lf + %.2lf i", c.a, c.b);
        return c;
    }
     
    void multiplica_complejos(Tcomplejo c1, Tcomplejo c2, PTcomplejo pc) {
        (*pc).a= (c1.a)*(c2.a) - (c1.b)*(c2.b);
        (*pc).b= c1.a*c2.b + c1.b*c2.a;
        printf("La multiplicacion es: %lf + %lfi", pc->a, (*pc).b);
    }
     
    /*
        , PTcomplejo pc2
        (*pc2).a= c1.a/c2.a;
        (*pc2).b= c1.b/c2.b;
        printf("La división es: %lf + %lf", pc2.a, pc2.b);*/
     
    void binomica_a_polar(PTcomplejo c){
        (*c).mod=sqrt((pow((*c).a,2))+(pow((*c).b,2)));
        (*c).alfa=atan2((*c).b,(*c).a);
        printf("La forma polar es: modulo:%lf y argumento:%lf ", c->mod, c->alfa);//Para probar la funcion
    }
    Une idée?

  4. #4
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    - Tcomplejo est-il effectivement composé de deux double (et pas deux float) ? (indispensable vu le format %lf de lecture)

    - la gestion de i est incorrecte, le i++ ne doit intervenir que si on remplit le tableau, pas systématiquement.

    - on ne peut utiliser directement printf() pour afficher c[j] (case 4), il faut utiliser la fonction faite pour ça : escribe_complejo()
    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
        do
        {
    ....
            switch(opcion)
            {
                case 1:
                //Almacenar el numero en la tabla y ecriberlo
                    c[i]=lee_complejo();
                    escribe_complejo(c[i]);
                    i++;
                    break;
     
                case 2:
                //Multiplicar 2 complejos solicitados por el usuario y almacener en la tabla
                    printf("Entre dos numeros complejos");
                    Tcomplejo c1 = lee_complejo();
                    Tcomplejo c2 = lee_complejo();
                    c[i] = suma_complejos(c1,c2);
                    escribe_complejo(c[i]);
                    i++;
                    break;
     
                case 4:
                //Mostrar los numeros complejos incluidos en la tabla
                    for(j=0;j!=i;j++){
                        escribe_complejo(c[j]);
                    }
                default://On est pas dans un des cas cite
                    break;
            }
        }while (opcion != 6);
    - pourquoi l'addition renvoie-t'elle un Tcomplejo comme résultat alors que la multiplication ne le fait bizarrement pas mais utilise à la place la liste de paramètres ?
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  5. #5
    Membre à l'essai
    Inscrit en
    Novembre 2010
    Messages
    25
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 25
    Points : 17
    Points
    17
    Par défaut Merci!
    Merci diogène, j'ai trouvé mon erreur en changeant le printf de c[i].
    Juste tu ne m'as pas dis au final, pourquoi avoir utilisé le 'do'?

  6. #6
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Citation Envoyé par julcha Voir le message
    Merci diogène, j'ai trouvé mon erreur en changeant le printf de c[i].
    juste tu ne m'as pas dis au final, pourquoi avoir utilisé le 'do'?
    Dans un boucle for ou while, le test est effectué au début de chaque boucle donc en particulier avant l'entrée dans la boucle. Celle-ci peut être alors exécutée 0, 1 ou plusieurs fois.
    Dans un boucle do, le test est effectué à la fin de chaque boucle. Alors La boucle do peut être exécutée 1 ou plusieurs fois.

    La particularité du do est donc qu'on passe au moins une fois dans la boucle et comme dans le cas présent, il faut lire au moins une fois le choix de l'utilisateur...
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Fenêtre JavaScript avec plusieurs choix
    Par absot dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/09/2010, 00h00
  2. case avec plusieurs choix ?
    Par ggwtf dans le forum Qt
    Réponses: 6
    Dernier message: 11/05/2010, 00h37
  3. Compiler un petit programme avec plusieurs fichiers avec g++
    Par Ourcoulouncoulou dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 16/12/2008, 13h48
  4. Recherchev avec plusieurs choix possibles
    Par solorac dans le forum Excel
    Réponses: 1
    Dernier message: 30/09/2008, 15h00
  5. like avec plusieurs choix
    Par mon_pseudo dans le forum Langage SQL
    Réponses: 12
    Dernier message: 20/06/2008, 10h42

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