Bienvenue aux nouveaux arrivants sur FantasPic !

- Pensez à lire les règles durant votre visite, il n'y en a pas beaucoup, mais encore faut-il les respecter .
- N’hésitez pas à faire des remarques et/ou suggestions sur le Forum, dans le but de l'améliorer et de rendre vos prochaines visites plus agréables.
- Vous pouvez regarder votre "panneau de l'utilisateur" afin de configurer vos préférences.
- Un passage par "l'utilisation du forum" est recommandé pour connaître les fonctionnalités du forum.

--- L’équipe FantasPic ---
On parle des Pics, sans rapport avec le langage ou la programmation

Modérateur : Jérémy

Conditions des Tests par le compilateur
Jérémy
Administrateur du site
Administrateur du site
Messages : 2722
Âge : 44
Enregistré en : juillet 2015
Localisation : Dans le sud
Contact :

#1 Message par Jérémy » jeu. 22 déc. 2016 21:50

Bonsoir à tous,

Je me pose la question suivante:

Que font exactement nos compilateurs quand ils tombent sur un test à rallonge . J'entends par la , sortent-ils à la premiére condition fausse ou est ce qu'ils les passent toutes en revues obligatoirement ?

Par exemple voici un test que je fais dans un programme :

Code : Tout sélectionner

//--------------------    On recoit "NON"    ---------------------------
         
if ( ((SMS_Recu[0]=='N')||(SMS_Recu[0]=='n')) && ((SMS_Recu[1]=='o')||(SMS_Recu[1]=='O')) && ((SMS_Recu[2]=='N')||(SMS_Recu[2]=='n')) )
             {
        
blablabla....
             } 


si le premier caractère lu, n'est pas un N , continu-t-il a tester ou sort-il tout de suite ?

Merci
C'est en faisant des erreurs, que l'on apprend le mieux !!!

Conditions des Tests par le compilateur
paulfjujo
Avatar de l’utilisateur
Expert
Expert
Messages : 2589
Âge : 73
Enregistré en : juillet 2015
Localisation : 01800
Contact :

#2 Message par paulfjujo » ven. 23 déc. 2016 18:17

si le premier caractère lu, n'est pas un N , continu-t-il a tester ou sort-il tout de suite ?


l'evaluation se faisant de gauche à doite pour la priorité des tests
je dirais qu'il doit evaluer les 2 conditions 'N' OU 'n' , si c'est vrai, on continue le test

si ce n'est ni un 'N' , ni un 'n' , Oui, il sort de suite
ces 2 conditions appartenant à un ET ( des 3 combinaison formant le NON ) qui ne sera donc valide.
:sifflotte: C'est pas tres evident à expliquer !

ou alors via d'autres possibilites de test : (plus comprehensible)
avec toupper => test toutes les combinaisons des 3 lettres, apres avoir tout mis en majuscules
avec strstr si on considere qu'au depart, tout est en majusules ou tout est en minuscules

Code : Tout sélectionner


 while
(1)
 {
 
   UART1_Read_Text
(buffer1,"\n",20);
   UART1_Write_CText("\r\nRecu : ");
   UART1_Write_Text(buffer1);CRLF1();
   if ((toupper(buffer1[0])=='N') && (toupper(buffer1[1])=='O') && (toupper(buffer1[2])=='N'))
  {
    UART1_Write_CText("Je dis NON \r\n");
    }
    else
    
{
     UART1_Write_CText("What ? \r\n");
    }

  if ((strstr(buffer1,"NON")) || (strstr(buffer1,"non")))
  {
   UART1_Write_CText("Je re-dis NON \r\n");
    }
    else
    
{
     UART1_Write_CText("re-What ? \r\n");

    }
   *(buffer1)=0;
  }





Code : Tout sélectionner


Recu 
: NON

Je dis NON
Je re
-dis NON
non

Recu 
: non

Je dis NON
Je re
-dis NON
NOn

Recu 
: NOn

Je dis NON
re
-What ?
nON

Recu 
: nON

Je dis NON
re
-What ?

Aide toi, le ciel ou FantasPic t'aidera

Conditions des Tests par le compilateur
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#3 Message par Guest » ven. 6 janv. 2017 10:04

Bonjour

Toujours pour optimiser ton code(je sais encore et encore) :sifflotte: je te propose cela:(plutôt que de passer encore et encore par une autre fonction )
Un regard sur la table ASCII. OUI regarde la table ascii.

Si c'est uniquement de l’alphabétique:si l'on veut que des majuscules il suffit de faire:

Code : Tout sélectionner

          BCF  _SMS_Recu, 5    ;mise a zero du bit 5

Pour des minuscules il suffit de faire:

Code : Tout sélectionner

          BSF  _SMS_Recu, 5    ;mise a 1 du bit 5


s'il on veut avoir aussi le code ascii de 0 à "A" il suffit de faire un test: (cela va nettement raccourcir ton code sur ton projet envoi de SMS :sifflotte: )

Code : Tout sélectionner

#asm
          BTFSS _SMS_Recu, 6
          GOTO  sortie              
;ascii <0x40
          BCF  _SMS_Recu
, 5
          BCF  _SMS_Recu
+1,
          BCF  _SMS_Recu
+2,5         
    sortie
:                                 
#endasm

    if  ((SMS_Recu[0]=='N') && (SMS_Recu[1]=='O') && (SMS_Recu[2]=='N'))
    {
    NB=1;
    } 



SI tu n'arrives pas a faire cela par #ASM .Tu peux déclarer SMS_Recu en structure 8 bits et faire la manip sur le bit 5 et le test sur bit 6

A+

PS: il suffit d’insérer le bout de code juste après la lecture UART . A toi de voir comment faire le lien. Perso écriture nouvelle fonction: lecture UART avec insertion du bout de code, faire test et manip bit SUR le registre RCREG, avant transfert dans SMS_Recu . Comme dit plus haut à toi de voir.


Retourner vers « Généralités sur les PICs »

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 45 invités