probleme avec mon code ( niveau amateur)
Répondre à la discussion
Affichage des résultats 1 à 15 sur 15

probleme avec mon code ( niveau amateur)



  1. #1
    Albert-cosmoff

    probleme avec mon code ( niveau amateur)


    ------

    bonjour a tous,

    voici mon code :

    Code:
    int unite=0,dizaine=0,centaine=0,mille=0;
    int compteur=10 000;
    float distance=0.0;
    
    distance= 340.3 * compteur * 0.0000125 ; // distance = 42.5375
    
        if(distance<10) mille=0;
        else
        {
            while(distance>=10)
            {
                distance=distance-10;
                mille++;
            }
            
        }
    selon la valeur de compteur, distance prend une valeur et si distance>10 alors mille s’incrémente de +1 pour chaque dizaine ,
    j'ai pris une valeur de compteur a 10000, donc distance = 42.5375 donc mille devrait etre egale a 4 , mais dans mon code mille n'est jamais egale a 4, savez vous pourquoi?

    merci d'avance

    -----

  2. #2
    f6exb

    Re : probleme avec mon code ( niveau amateur)

    Intervertis les deux dernières lignes pour voir.
    Seuls les faucons volent. Les vrais restent au sol.

  3. #3
    paolo123

    Re : probleme avec mon code ( niveau amateur)

    Ta variable distance est de type float et compteur est de type entier, je crois qu'il faut passer par une conversion de type lorsque tu effectues le calcul de distance.

    Par exemple écrire

    distance = 340.3 * 0.0000125 * (float) compteur;

  4. #4
    Albert-cosmoff

    Re : probleme avec mon code ( niveau amateur)

    merci de vos messages,
    j'ai essayé en inversant les deux dernieres lignes et en mettant distance= 340.3 * (float)compteur * 0.0000125 ;
    mais ca ne marche toujours pas

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

    Re : probleme avec mon code ( niveau amateur)

    Tout dépends comment ton compilateur gère le truc:

    Si tu travailles avec un microcontroleur, alros en général int est limité à 32768
    or dans ton calcul tu fais 340*10000 => Tu as donc un overflow

    Le plus simple étant de faire directement :
    distance= 0,00425375 * compteur;

    Le mieux étant de se passer de float...

  7. #6
    paolo123

    Re : probleme avec mon code ( niveau amateur)

    poste ton programme complet! compilation sur pc ou sur microcontroleur? balance tout le programme avec le main et la boucle d'entrée while

  8. #7
    paulfjujo

    Re : probleme avec mon code ( niveau amateur)

    bonjour,

    je ne sais as si 10 000 est bien interpreté..
    tests a faire sur flottant, donc preciser 10.0 au lieu de 10

    Code:
    int unite=0,dizaine=0,centaine=0,mille=0;
    //int compteur=10 000;
    int compteur=10000;
    float distance=0.0;
    
    
    distance=  0.00425375 * (float) compteur  ; // distance = 42.5375
    
        if (distance<10.0) 
        {
               mille=0;
         }
        else
        {
            while(distance>=10.0)
             {
                distance=distance-10.0;
                mille++;
             }
            
         }

  9. #8
    Albert-cosmoff

    Re : probleme avec mon code ( niveau amateur)

    je suis sur microcontroleur , j'ai mis :
    long int compteur = 0 ;

    comment je fais pour me passer de float si j'ai besoin d'un nombre a virgule pour avoir de la precision

  10. #9
    Albert-cosmoff

    Re : probleme avec mon code ( niveau amateur)

    non toutjours rien

  11. #10
    paulfjujo

    Re : probleme avec mon code ( niveau amateur)

    le programme ci dessous fonctionne OK (avec du floatant=
    Code:
     #ifdef Test2 
    
    distance=  0.00425375 * (float) compteur  ; // distance = 42.5375
    
        if (distance<10.0) 
        {
               mille=0;
         }
        else
        {
            while(distance>=10.0)
             {
                distance=distance-10.0;
                mille++;
             }
            
         }
          UART1_Write_CText( "mille= ");
          WordToStr(mille,CRam0);
           UART1_Write_Text(CRam0); CRLF();
     while(1);
     #endif
    sur l'ecran
    mille= 4

  12. #11
    Albert-cosmoff

    Re : probleme avec mon code ( niveau amateur)

    j'ai mis ce code mais ca ne marche pas ,
    parcontre si je retire la condition if et else et je met directement mille=4; ca marche,

    je travaille sur microcontroleur, c'est ptete du a ca non?

  13. #12
    paulfjujo

    Re : probleme avec mon code ( niveau amateur)

    Citation Envoyé par Albert-cosmoff Voir le message
    je suis sur microcontroleur , j'ai mis :
    long int compteur = 0 ;
    comment je fais pour me passer de float si j'ai besoin d'un nombre a virgule pour avoir de la precision
    Visualiser du flottant avec un entier long est une simple question de positionnement de point decimal
    voici la version avec variable declarees en entier long NON signés.

    Code:
     
    
    #define test3
    
    
    #ifdef Test3 
    unsigned int unite=0,dizaine=0,centaine=0,mille=0;
    unsigned long compteur=10000;
    unsigned long distance=0;
    #endif
    
    
    #ifdef Test3
      distance=  4253 * compteur  ; // distance = 42 530 000
    
        if (distance<10000000L) 
        {
               mille=0;
         }
        else
        {
            while(distance>=10000000L)
             {
                distance=distance-10000000L;
                mille++;
             }
            
         }
           UART1_Write_CText( "mille (unsigned long version) = ");
          LongToStr(mille,CRam1);
           UART1_Write_Text(CRam1); CRLF();
     while(1);
     #endif
    resultat
    mille (unsigned long version) = 4

    apres tu peux jouer sur les coeff pour obtenir un resultat de 4000 au lieu de 4
    il suffira d'ecrire le resultat sous la forme 4.000

  14. #13
    paulfjujo

    Re : probleme avec mon code ( niveau amateur)

    je travaille sur microcontroleur, c'est ptete du a ca non?
    çà veut dire quoi ?

    Quel type de microcontroleur ?
    Quel compilateur C ?

    version faux flottant

    Code:
    
    char CRam1[17];
    unsigned int unite=0,dizaine=0,centaine=0,mille=0;
    unsigned long compteur=10000;
    unsigned long distance=0;
    int k;
    
    
    
      distance=  4253 * compteur  ; // distance = 42 530 000
    
        if (distance<10000L) 
        {
               mille=0;
         }
        else
        {
            while(distance>=10000L)
             {
                distance=distance-10000L;
                mille++;
             }
            
         }
          UART1_Write_CText( "mille (version faux floatant) = ");
          LongToStr(mille,CRam1);
          k=strlen(CRam1);  
          // place du point  toujours avant les 3 derniers cars
          for (i=0;i<k-3;i++) UART1_Write(CRam1[i]);
          UART1_Write('.');
          for (i=k-3;i<k;i++) UART1_Write(CRam1[i]);
          CRLF();
     while(1);
    resultat affiché
    mille (version faux floatant) = 4.253
    Dernière modification par paulfjujo ; 24/06/2014 à 15h43.

  15. #14
    paulfjujo

    Re : probleme avec mon code ( niveau amateur)

    Attention aussi aux debordement ,meme en entier long non signes
    exemple concret avec evolution de "compteur" et resultat distance

    on voit que distance ne suit plus l'evolution de compteur à partir de 1048576
    because on depasse la capacité de l'entier 32 bits (non signe) soit 0xFFFFFFFF ou 4294967295
    en multipliant compteur par 4253.

    apres, cela depend de la valeur maxi de ta variable compteur ?


    on voit aussi que la resolution de distance est de 0.004

    Nom : Faux_flottant.jpg
Affichages : 57
Taille : 242,6 Ko
    Dernière modification par paulfjujo ; 24/06/2014 à 18h23.

  16. #15
    Albert-cosmoff

    Re : probleme avec mon code ( niveau amateur)

    probleme réglé merci infiniment pour votre aide

Discussions similaires

  1. probleme de code sous microchip (allumage d'une led) amateur
    Par Albert-cosmoff dans le forum Électronique
    Réponses: 5
    Dernier message: 20/06/2014, 23h17
  2. je suis a la recherche de cours d'info niveau amateur/debutant
    Par invite28b666d0 dans le forum Électronique
    Réponses: 6
    Dernier message: 08/03/2012, 09h18
  3. problème avec code block
    Par Zabour dans le forum Programmation et langages, Algorithmique
    Réponses: 3
    Dernier message: 05/01/2012, 00h39
  4. [Pic] Probleme avec code
    Par wave68runner dans le forum Électronique
    Réponses: 1
    Dernier message: 18/03/2009, 08h40
  5. problème avec code bloc
    Par mat_the_bad_boy dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 10/10/2007, 01h33
Découvrez nos comparatifs produits sur l'informatique et les technologies.