Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2933 connectés 

  FORUM HardWare.fr
  Programmation
  C

  comparer deux nombre

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

comparer deux nombre

n°2284821
samjabr
Posté le 06-07-2016 à 20:47:44  profilanswer
 

Bonjour , j'ai un problème urgent dans mon PFE , problème de comparaison avec deux nombre "un afficher sur LCD" et l'autre "saisie par un clavier (keypad)". l'afficheur LCD affiche une mesure analogique d'un capteur . le nombre saisie par keypad si il est supérieur du nombre afficher un message de "erreur" s'affiche.
j'ai essayer des commandes(strcmp , if....) je ne sais pas comment faire ...Merci de m'aider le plus vite possible...PS : je travaille avec un microcontrôlleur pic 16f877A logiciel mikroC.  

mood
Publicité
Posté le 06-07-2016 à 20:47:44  profilanswer
 

n°2284822
rat de com​bat
attention rongeur méchant!
Posté le 06-07-2016 à 21:15:09  profilanswer
 

O mon dieu... D'après Wikipédia PFE c'est un projet à la fin des études en école d'ingénieur, c'est vraiment pas rassurant. :cry:

 

http://www.google.fr/search?q=op%C [...] +langage+c

 

Si ça ne fonctionne pas faut donner plus de détails (exemple court mais complet).


Message édité par rat de combat le 06-07-2016 à 21:17:23
n°2284828
rufo
Pas me confondre avec Lycos!
Posté le 07-07-2016 à 10:37:58  profilanswer
 

Je pense que le pb se situe sur la conversion en int ou float du nb saisi. Le nb renvoyé par le capteur est bien un nombre alors que le nb saisi est une chaîne de caractères. Si tu fais une comparaison d'une string avec un float, le compilo va caster la string en convertissant chaque caractère de la chaîne dans son équivalent ASCII.
 
Edit : je confirme que normalement, le PFE est le projet qu'on fait en dernière année d'école d'ingé, sur toute l'année, à raison de 2j par semaine. Mais vu la description de son projet, je doute que ça occupe pendant 2j/semaine sur plusieurs mois :/

Message cité 1 fois
Message édité par rufo le 07-07-2016 à 10:39:57

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2284835
rat de com​bat
attention rongeur méchant!
Posté le 07-07-2016 à 12:52:38  profilanswer
 

rufo a écrit :

Je pense que le pb se situe sur la conversion en int ou float du nb saisi.


Possible, j'y ai pensé, mais même, sur internet on doit trouver suffisamment d'infos, d'autant qu'on a dû voir ça en cours aussi...
 

Citation :

Le nb renvoyé par le capteur est bien un nombre alors que le nb saisi est une chaîne de caractères.


ou pas, selon le keypad, le branchement, le code... Impossible de dire avec si peu d'infos. (Il disait "keypad", donc je suppose qu'il ne parle pas d'un clavier sur ordi avec liaison série.)
 

Citation :

Si tu fais une comparaison d'une string avec un float, le compilo va caster la string en convertissant chaque caractère de la chaîne dans son équivalent ASCII.


et afficher un warning - à condition de lui avoir demandé :o
 
edit: J'avais un gros doute donc j'ai vérifié, ça ne compile même pas:

Code :
  1. char str[]="3.14";
  2. float f=3.15;
  3. if(str>f)


-->tst.c:9:8: error: invalid operands to binary > (have 'char *' and 'float')


Message édité par rat de combat le 07-07-2016 à 12:56:44
n°2284843
samjabr
Posté le 07-07-2016 à 15:11:42  profilanswer
 

Merci infiniment pour vos réponse voici un extrait de ce programme:
 
for(i=0;i<2;i++){   //programme d'écire à l'aide du clavier   :bounce:  
           while (number[i] == 0)
 
     {number[i] = Keypad_key_Click();}
 
          if(number[i]==1)     number[i]  = '1';
          if(number[i]==2)     number[i]  = '4';
          if(number[i]==3)     number[i]  = '7';
          if(number[i]==4)     number[i]  = '*';
          if(number[i]==5)     number[i]  = '2';
          if(number[i]==6)     number[i]  = '5';
          if(number[i]==7)     number[i]  = '8';
          if(number[i]==8)    number[i]  = '0';
          if(number[i]==9)    number[i]  = '3';
          if(number[i]==10)    number[i]  = '6';
          if(number[i]==11)    number[i]  = '9';
          if(number[i]==12)    number[i]  = '#';
      Lcd_Chr(2,i+1, number[i]);
         }}
void main() {
 
 LCD_init(); ADC_init(); Keypad_init();
 
LCD_cmd(_LCD_CURSOR_OFF);
 
 
 
      while(1){  
      TRISB.F7=1; if(portb.f7=1) goto loop2;
      loop1:  {
 
  LCD_cmd(_LCD_CLEAR);
  LCD_out(1,1,"A=" );lcd_out(2,1,"B=" );
  lcd_out(1,6,"%" );lcd_out(2,6,"%" );
 
  a=ADC_read(0); // programme d'affichege sur LCD  :bounce:  
  a>=0;a<=992;
  if(a>992){aa=100;aa3=(aa/100);lcd_chr(1,3,aa3+48);aa2=((aa/100)-1);lcd_chr(1,4,aa2+48);aa1=((aa/100)-1);lcd_chr(1,5,aa1+48);}
    else {
  aa=a/10;
 
    aa3=aa/100;
    lcd_chr(1,3,aa3+48);
  aa2=aa/10;
  lcd_chr(1,4,aa2+48);
  aa3=aa-(aa2*10);
  lcd_chr(1,5,aa3+48);
  delay_ms(300);
    lcd_cmd(_LCD_CLEAR);
  lcd_out(1,1,"maintenir start" ); lcd_out(2,1,"pour commencer" );if(portb.f7=1) goto loop2;
  delay_ms(300);
  if(portb.f7=1) goto loop2;
  goto loop1;
   }}}


Message édité par samjabr le 07-07-2016 à 15:16:42
n°2284845
rufo
Pas me confondre avec Lycos!
Posté le 07-07-2016 à 15:44:51  profilanswer
 

Merci d'utiliser les balises code :o
 
Edit : raaaahhhh, des goto dans un programme en C :kaola:


Message édité par rufo le 07-07-2016 à 15:45:28

---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2284856
samjabr
Posté le 07-07-2016 à 17:56:44  profilanswer
 

j'ai rien compris Mr rufo?
veuillez clarifier votre réponse..ya des goto?..ou est le problème; désolé pour les couleurs, je n'est pas de problème vec la couleur noire..

n°2284864
Chickenfoo​t360
is a world Boss
Posté le 07-07-2016 à 22:04:50  profilanswer
 

Utilise les balises code pour rendre ça plus lisible, indente, commente.  
 
De même, les instructions goto comme soulevé précédemment sont à éviter. La seule chose que ça rapporte c'est un programme bancal et la preuve que tu es passé vite sur l’algorithmie.
 
Sans plus d'informations, je penche également pour un soucis de comparaison entre variables de types différents.
 
Note que si je ne m'abuses tu ne compare pas des chaînes mais des caractères. Dans ce cas tu peut simplement utiliser les codes ASCII à ton avantage (un char n'est autre qu'un int "déguisé" ).
 
:jap:  
 

n°2284865
rat de com​bat
attention rongeur méchant!
Posté le 07-07-2016 à 22:10:09  profilanswer
 

samjabr a écrit :

ya des goto?..ou est le problème


Le goto donne du code spaghetti, c'est une très mauvaise habitude d'en utiliser et on peut toujours faire sans.
 

Citation :

désolé pour les couleurs, je n'est pas de problème vec la couleur noire..


utilise le bouton http://forum-images.hardware.fr/icones/message/c.gif

 

Ce code... sans commentaire. C'est bien triste pour un projet en fin d'école d'ingé. Tu as réussi à compiler ça?

 

>//programme d'écire à l'aide du clavier
???
En plus ce bout de code est en dehors de toute fonction et il y a une erreur au niveau des accolades.
>a>=0;
>a<=992;
statement without effect. Active les warnings!!
>a, aa, aa2, aa3 et tout le premier bloc (a>992)
WTF?
>goto loop2;
défini null part

 

Tu ne donnes pas la définition de tes variables. Et tu veux comparer quoi exactement?

 

Simple curiosité, c'est quoi le projet?

 

edit: Comment peut-on convertir ce "nombre" saisi par le clavier en nombre? Déjà convertir les deux "chiffres" qui sont des codes ASCII dans leurs valeurs numériques respectives (le 0 c'est 48 comme tu semble savoir), ensuite en faire un nombre avec un peu de maths: dizaines*10+unités.

 

edit tardif orthographe :o


Message édité par rat de combat le 07-07-2016 à 23:45:56
n°2284868
samjabr
Posté le 08-07-2016 à 00:27:37  profilanswer
 

Je fait ma programmation avec mikroC pour programmer un micro-controlleur pic16f887a... aa3 , aa2 , aa1 sont des caractère qui permettent l'affichage dans le LCD la valeur d'un capteur de pression (entrer analogique) avec aa3:centainnes ; aa2:dizaines ; aa1:unités.  
j'ai faisais bien sur la compilation ça travail exellent.
Merci de me donner des réponses plus utiles.

mood
Publicité
Posté le 08-07-2016 à 00:27:37  profilanswer
 

n°2284869
rat de com​bat
attention rongeur méchant!
Posté le 08-07-2016 à 01:48:09  profilanswer
 

samjabr a écrit :

a... aa3 , aa2 , aa1 sont des caractère qui permettent l'affichage dans le LCD la valeur d'un capteur de pression (entrer analogique) avec aa3:centainnes ; aa2:dizaines ; aa1:unités.


C'est très explicite. :o Je suppose que ce sont des variables globales en plus?

 


Citation :

j'ai faisais bien sur la compilation ça travail exellent.


Ton code comme tu l'as posté ne compile certainement pas. Première réponse de ma part: "exemple court mais complet" Et on ne doit pas avoir la même définition de "travail exellent".

 

a=1002 --> affichage 100
a=999 --> affichage 100
a=993 --> affichage 100
a=500 --> affichage 050
a=327 --> affichage 032
a=99 --> affichage 009
a=7 --> affichage 000

 

Parfait! :pfff:

 
Citation :

Merci de me donner des réponses plus utiles.


Regarde mon edit...


Message édité par rat de combat le 08-07-2016 à 01:52:23
n°2284888
samjabr
Posté le 08-07-2016 à 12:06:52  profilanswer
 

Mr rat de combat vous êtes le plus proche de l'idée principal Merci.
mais la tolérence du capteur m'oblige cette intervention, ainsi que l'orsque le capteur me donne '0 volts' --> a=0 (décimal); l'orque le capteur est au max '5 volts' --> a=1023; je veux afficher de 0 à 100 %...quel methode vous me recommander. Merci infiniment

n°2284899
rufo
Pas me confondre avec Lycos!
Posté le 08-07-2016 à 14:39:21  profilanswer
 

Ben une simple règle de 3 (proportionnalité), non :??:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2284907
samjabr
Posté le 08-07-2016 à 15:08:07  profilanswer
 

vous avez raison Mr rufo on peu faire de cette manière :
 
aa=(a*99)/992 --> pourquoi 992 c'est simple, l'orsque l'incrémentation du capteur il donne un charactère et non pas un numéro genre (u, <,...) dans a2: les dizaines. petite remarque: il donne un charactère est non pas un num (j'ai vérifier).

Message cité 1 fois
Message édité par samjabr le 08-07-2016 à 15:15:45
n°2284908
rat de com​bat
attention rongeur méchant!
Posté le 08-07-2016 à 15:22:16  profilanswer
 

samjabr a écrit :

aa=(a*99)/992 --> pourquoi 992 c'est simple, l'orsque l'incrémentation du capteur il donne un charactère et non pas un numéro genre (u, <,...) dans a2: les dizaines. petite remarque: il donne un charactère est non pas un num (j'ai vérifier).


 :??:  
 
Bon, je sors, il vaut mieux je pense. Soit samjabr est un troll (je crains que non) soit il ne mérite vraiment pas son diplôme (école d'ingénieur!!). Le pire c'est que même avec ce "travail" il risque de l'avoir et peut-être même avec une bonne note. :cry:

n°2284911
rufo
Pas me confondre avec Lycos!
Posté le 08-07-2016 à 15:51:24  profilanswer
 

Le capteur qui donne un caractère au lieu d'un nombre, c'est pas simplement pour utiliser le code ASCII qu'il fait ça ? Genre, le capteur veut renvoyer la valeur 65, il renvoie donc le caractère "A" :??:
 
J'imagine que le français n'est pas ta langue maternelle, samjabr ? Parce que tes messages ne sont pas très compréhensibles :/ Du coup, ça facilite pas l'aide qu'on pourrait t'apporter. Encore que le sujet semble assez trivial quand on est au niveau ingé :/ Ce genre de PFR serait plus du niveau de 1ère année de DUT GEII... :o


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
n°2284927
samjabr
Posté le 08-07-2016 à 19:49:21  profilanswer
 

Dites on sait pas et c'est tout!!...je suis compréhensive ...c'est pas la peine de vous justifier votre imbécilité en utilisant des critiques négatives...band de gamin t'a pas les couille pour l'école d'ingénieur et le C c'est pas ma spécialité c'est pourquoi je demande de l'aide(narmol).. c'est juste un aditif dans le projet principal et tu n'aurai jamais mon parcours diplômatique, c'est pas donner au imbiciles c'est donner au élites...penser à être plus positive c'est 2016

Message cité 2 fois
Message édité par samjabr le 08-07-2016 à 19:51:36
n°2284929
rat de com​bat
attention rongeur méchant!
Posté le 08-07-2016 à 20:00:12  profilanswer
 

samjabr a écrit :

le C c'est pas ma spécialité


Ça on avait remarqué. :lol:  :lol:  
 

Citation :

c'est donner au élites


Pas de doute, Monsieur fait partie de cette dernière! :jap:  
 
Bon, il serait peut-être temps de mettre un terme à cette plaisanterie non?

n°2284935
rufo
Pas me confondre avec Lycos!
Posté le 08-07-2016 à 23:26:25  profilanswer
 

samjabr a écrit :

Dites on sait pas et c'est tout!!...je suis compréhensive ...c'est pas la peine de vous justifier votre imbécilité en utilisant des critiques négatives...band de gamin t'a pas les couille pour l'école d'ingénieur et le C c'est pas ma spécialité c'est pourquoi je demande de l'aide(narmol).. c'est juste un aditif dans le projet principal et tu n'aurai jamais mon parcours diplômatique, c'est pas donner au imbiciles c'est donner au élites...penser à être plus positive c'est 2016


T'as conscience que beaucoup des gens qui fréquentent la cat "programmation" de ce forum sont diplômés d'écoles d'ingé en informatique, souvent depuis plusieurs années et exercent dans le domaine en tant que professionnel :??:


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  comparer deux nombre

 

Sujets relatifs
Comment recuperez le nombre d'element d'un enum ?Sous total avec 2 filtre.
[Prolog] : ajouter un nombre à la bonne place dans une liste de nb[CSHARP] comparer caractère d'un fichier texte
Compter le nombre de valeurs différentesNombre de session simultanées
Stocker puis puis comparer le NOM d'une variableCompter le nombre de lignes d'un fichier .
compter nombre de ligne entre deux motsTransformer une chaine en nombre complexe
Plus de sujets relatifs à : comparer deux nombre


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR