Partage
  • Partager sur Facebook
  • Partager sur Twitter

Décrémenter un compteur

    22 novembre 2017 à 19:19:47

    Bonjour, je sais sa parait simple mais je n'arrive pas a décrémenter mon compteur ! l'incrémenter c'est simple mais une fois que je lui donne une condition du style
    if(Etape==0){
                        //Détection d'un front montant
                        if(Memo_E<E){
                            Etape=1;
                            S=1;
                            Tempo=Cptboucle++;
                        }
                }
                else if (Etape==1){
                    if(Tempo<Cptboucle){
                        Etape=0;
                        S=0;
                    }
                }
                
                if (E==0){
                    
                    Cptboucle--;
                }else if (E==-1){
                    
                    --Cptboucle;
                }

    je n'arrive pas a le décrémenter, pouvez- vous m'aider ? merci
    • Partager sur Facebook
    • Partager sur Twitter
      22 novembre 2017 à 21:19:44

      Cptboucle--;

      C'est bien comme cela que l'on décrémente une variable.

      _____________________________________________________

          if (E==0)
          {
      
              Cptboucle--;
          }
          else if (E==-1)
          {
      
              --Cptboucle;
          }

      Le bloc du if et le bloc du else if font exactement la même chose, tu peux donc simplifier ce bout de code. 

      • Partager sur Facebook
      • Partager sur Twitter
        23 novembre 2017 à 9:30:02

        Bonjour rouloude,

        justement je ne comprend pas mon problème au lieu de décrémenter le compteur s’arrête

         voici tous le code peut être que l'erreur est autre part ? merci

        int main(int argc, char** argv)
        {   
            int C,E=0,Cptboucle=0,Memo_E=0,S;
            int Tempo,Etape=0;
            int D;
            
            // Modif D Raoult
            char Touche;
            int MenuAutomate = 0;
            
            
            windows_clear_screen_color(BLANC,NOIR);  // Effacement de l'écran avant affichage du menu  ATTENTTION déplacé afin de ne pas faire clignoter l'affichage du menu
            
            // BOUCLE PRINCIPALE GLOBALE DE L'AUTOMATE
            
            do{
                
                Sleep(10);// temps de pause
                Cptboucle++;// incrémenntation du compteur 
                
                //====================================================================================
                // Zone du programme qui prend en compte les frappes de touches
                Touche = ' ';  // on vide la variable touche pour ne pas prendre en compte la derniére frappe
                if (kbhit()){  // test si une touche est frappée
                    Touche = getch(); //on lit alors la valeur de la touche frappée
                }
                
                
                
             
                
                
                // Gestion du grafcet principal gérant le menu
                
            
                if (MenuAutomate == 0){  // affichage du menu initial tantque l'on est dans l'atape 0    
                         
                        // Affichage du menu
                    
                    printf("              |--------------|--------------|\n");
                    printf("                 BIENVENUE SUR NOTRE PROJET  \n\n");  
                    printf("              |   Koenig     |     Gros     |\n");
                    printf("              |--------------|--------------|\n");
                    printf("               Gestion d'une table elevatrice \n");
                    printf("              |--------------|--------------|\n");
                    printf("\n\n\n\n");
                    printf("  1    -Table elevatrice\n\n");
                    printf("  Q    -Quitter\n ");
                    printf("\n"); 
                
                    // test de la condition de sortie de l'étape 0 : touche = 1
                    MenuAutomate = 1;
                    
                }else if (MenuAutomate == 1){  // etape d'attente d'une frappe sur 1
                    if (Touche == '1'){
                        MenuAutomate = 2;
                        
                    }
                }else if (MenuAutomate == 2){  // bloc correspondant à la gestion de l'automate
                    // entrée dans l'automate affichage du menu
                        windows_clear_screen_color(BLANC,NOIR);
                         
                         printf("              |--------------|--------------|\n");
                         printf("              |       TABLE ELEVATRICE      |\n");
                         printf("              |--------------|--------------|\n");
                         
                         printf("\n\n");
                         color(2,0);//affichage des texte en couleur, et  en dessous les menus qui vont intéragire en fonction du bouton apppuyer 
                         printf("  2  - bouton monté   =\n\n");
                         color(3,0);
                         printf("  3  - bouton descente =\n\n");
                         color(12,0);
                         printf("  4  - bouton arret    =\n\n");
                    
                         MenuAutomate = 3; // on passe à un etat 2 mpour le menu automate afin d'activer les traitements correspondant
                         
                }if (MenuAutomate == 3){    // on est dans la section de code qui prend en charge la gestion du ou des grafcet
                    
                    // Gestion du grafcet de l'automate
                    
                    // Gestion des entrées 
                    //---------------------------------------------------------------------------------------
                    // gestion de la touche 'e' agissant sur la variable E
                    if (Touche == 'm'){  // si c'est la touche m qui est frappée
                        // on fait évoluer la variable m qui représente l'entrée
                        if (E==0){
                            E = 1;
                        }else{
                            E = 0;
                        }  
                    }
                    
                    if (Touche == 'd'){  // si c'est la touche m qui est frappée
                        // on fait évoluer la variable m qui représente l'entrée
                        if (E==0){
                            E = -1;
                        }else{
                            E = 0;
                        }  
                    }
                    
                     if (Touche == 'a'){  // si c'est la touche m qui est frappée
                        // on fait évoluer la variable m qui représente l'entrée
                        if (E==1){
                            E = 0;
                        } else if (E==-1){
                            
                            E= 0;
                        }
                    }
                    
                    
                    // getion du grafcet
                    //---------------------------------------------------------------------------------------
                    if(Etape==0){
                            //Détection d'un front montant
                            if(Memo_E<E){
                                Etape=1;
                                S=1;
                                Tempo=Cptboucle++;
                            }
                    }
                    
                    else if (Etape==1){
                        if(Tempo<Cptboucle){
                            Etape=0;
                            S=0;
                        }
                    }
                    
                     if (E==0){
                        
                        Cptboucle--;
                    }
                    
                   
                 
                    
                    // Gestion des affichages des états de l'automate et des sorties
                    //---------------------------------------------------------------------------------------
                      //Posiotionne le texte sur la fenetre DOS
                        gotoXY(30,10);
                        printf("E = %d  S = %d  Etape = %d cptboucle = %d",E,S,Etape,Cptboucle);
                        //Affiche le texte après les modifications
                        fflush(stdout);
        
                        gotoXY(30,15);
                        printf("Entree : ");
                        if(E==0){
                            //Change la couleur du texte
                            color(BLANC,ROUGE);
                            printf("[%d]",E);
                        }else{
                            color(BLANC,VERT);
                            printf("[%d]",E);
                        }
                        
                        gotoXY(30,20);
                        if(E==-1){
                            
                            color(BLANC,BLEU_CLAIR);
                            printf("[%d]",D);
                        }
                        //Affiche le texte avec les modifications
                        fflush(stdout);
                        //Retour dans les 1ere conditions de fond et de forme
                        color(ROUGE,BLANC);
        
                     Memo_E=E;   
                     
                    
                }    
          
             
            }while(Touche!='Q' && Touche!='q');
            
            
        
            return (EXIT_SUCCESS);
        }



        • Partager sur Facebook
        • Partager sur Twitter
          23 novembre 2017 à 11:30:37

          Bonjour,

          Ton code est malheureusement fort peu lisible.
          Déjà, il y a une fonction de 180 lignes avec 10 variables, c'est considérable. Au-delà de 5 variables et d'une dizaine de lignes, c'est trop difficile à assimiler.
          Ensuite, des variables utilisées tout au long du code ont des noms sans aucun sens comme E ou Memo_E. C'est incompréhensible.
          Les commentaires sont en général pas mal, mais certains ne correspondent à rien, comme // on fait évoluer la variable m qui représente l'entrée.

          • Partager sur Facebook
          • Partager sur Twitter
            23 novembre 2017 à 12:06:42

            J'ai une hypothèse. Le « Cptboucle-- » est situé à la ligne 133. Mais peu avant, il y a un « Cptboucle++ » à la ligne 120, peut-être involontaire (peut-être que tu aurais dû écrire « Tempo=Cptboucle + 1; », ce qui n'est pas du tout pareil). Ça pourrait expliquer pourquoi, au lieu de décrémenter, il ne fait rien (si c'est ça que tu entends par « il s'arrête ») : en fait il a décrémenté, mais après avoir été incrémenté par erreur.

            -
            Edité par robun 23 novembre 2017 à 12:07:30

            • Partager sur Facebook
            • Partager sur Twitter
              23 novembre 2017 à 19:59:16

              oui je comprend tout a fait mongenet que ce n'est pas évident à comprendre le programme mais le principe est compris je pense,

              bonjour robun, j'aurais pus pensé que c'était sa aussi mais malheureusement sa na pas fonctionné

              • Partager sur Facebook
              • Partager sur Twitter

              Décrémenter un compteur

              × 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