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 ---
Forum général en BASIC et PASCAL !

Modérateur : Gérard

Combien de if avant plantage?
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#1 Message par Gérard » mar. 15 nov. 2016 16:14

Bonjour,
Je crois avoir trouvé une erreur dans un programme où 5 if se suivent. Est ce que c'est trop? C'est pour un 16F877.

Code : Tout sélectionner


    IF MOIS_RTC 
= %00010000 THEN                 '10 en BCD, soit octobre
      IF BIT_HIVER = 0 THEN                      '
on est en été
        IF JOUR_RTC 
= 7 THEN                     'dimanche
          IF DATE_RTC > %00100100 THEN           '
24 en BCD
            IF H_RTC 
= 3 THEN                    'il est 3h?
              H_RTC = 2                          '
alors H_RTC = 2
              BIT_HIVER 
= 1                      'màj bit hiver
              
              '
màj RTC
              I2C1_START
()
              I2C1_WR(RTC_WR)                    'adresse RTC
              I2C1_WR(2)                         '
adresse heures
              I2C1_WR
(H_RTC)                     'mise à l'heure d'hiver
              I2C1_STOP()
              
              '
màj bit_hiver
              EEPROM_WRITE
(0, BIT_HIVER)         'EEPROM du PIC
              DELAY_MS(20)
            END IF
          END IF
        END IF
      END IF
    END IF



Merci pour vos retours.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Combien de if avant plantage?
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#2 Message par Guest » mar. 15 nov. 2016 18:25

Bonjour

Tu n'es pas limité, mais pourquoi ne pas faire, sur un seul test avec un ET logique du style:

Si c'est octobre ET BIT été/hiver =0 ET dernier dimanche et 3heures ALORS bit ete/hiver=1, heure+2

A+

PS voir les restrictions cote Basic(nb d’opérandes)

Combien de if avant plantage?
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#3 Message par Gérard » mar. 15 nov. 2016 22:42

En fait, dans la mise à jour de l'heure pour l'hiver, il y a 5 if et pour l'été, il n'y en a que 4. Sachant que ça fonctionne pour l'été, la seule explication que je vois (sans être sûr que ce soit çà) c'est le 5e if.
Ta remarque est judicieuse, je vais essayer. Le problème, c'est que cette horloge est chez ma fille à 100km ...
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Combien de if avant plantage?
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#4 Message par Guest » mer. 16 nov. 2016 07:53

Bonjour

Gérard a écrit :En fait, dans la mise à jour de l'heure pour l'hiver, il y a 5 if et pour l'été, il n'y en a que 4.
Bien et amha il est la le problème.
Car la procédure ete/hiver est soumise au même contrainte, sauf que c'est le mois qui change et tu peux simplifier la chose ,sans le test bit ete/hiver car la condition de basculement Ete ou Hiver ne ce produit qu'une fois par an.

Je vois comme cela:
Ete->hiver Test M= 10 ET Dernier dimanche ET 03.00.00 H changement. sinon on SORT
Hiver->ete Test M= 3 ET Dernier dimanche ET 03.00.00 H changement. sinon on SORT

Après, je ne sais pas comment tu calculs le dernier dimanche.

A+

PS question rapidité et occupation mem programme, il vaut mieux faire un pres test M10 ou M3 procédure de changement, sinon on sort. Mais a toi de voir.... Allez crayon papier :wink:

Combien de if avant plantage?
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#5 Message par Gérard » dim. 20 nov. 2016 21:58

Bonjour,
La contrainte été --> hiver n'est pas la même que hiver --> été. En effet, il faut tester le bit hiver avant modif, comme on passe de 3h à 2h, si pas ce test du bit hiver, on boucle entre 2 et 3h sans en sortir, c'est pour cette raison que le test du bit hiver est obligatoire.

Est ce que les tests avec des IF demandent des places dans la pile de retour? Et les tests avec des ET aussi ou pas ?

Pour le calcul du dernier dimanche :
les mois 3 et 10 ont 31 jours, donc le dernier dimanche est obligatoirement > 24

Concernant rapidité et occupation mémoire, ce sont les derniers de mes soucis, ça va toujours assez vite et il me reste toujours assez de place de flash.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Combien de if avant plantage?
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#6 Message par Guest » lun. 21 nov. 2016 13:06

BONJOUR
La contrainte été --> hiver n'est pas la même que hiver --> été. En effet, il faut tester le bit hiver avant modif, comme on passe de 3h à 2h, si pas ce test du bit hiver, on boucle entre 2 et 3h sans en sortir, c'est pour cette raison que le test du bit hiver est obligatoire.

Depuis 1996 le changement se fait a la même heure 03:00:00 voir ici https://fr.wikipedia.org/wiki/Heure_d%27%C3%A9t%C3%A9
Donc, mes conditions de test sont toutes à fait valables.

Est ce que les tests avec des IF demandent des places dans la pile de retour? Et les tests avec des ET aussi ou pas ?

Heu.. la, petit problème de compréhension de ta part sur la pile.Tu utilises la pile UNIQUEMENT lors des appels a des SPG et utilisation de INTERRUPTION. Pour les tests, tu peux remplir la flash de tests, si cela te fait plaisir, à la fin,tu auras le résultat d'une condition VRAI ou faux :sifflotte:
Pour le calcul du dernier dimanche :
les mois 3 et 10 ont 31 jours, donc le dernier dimanche est obligatoirement > 24

Donc tu dois faire un test du style si jour >24 ET dimanche et cela pendant tout le mois de mars et tout le mois d'octobre.
Concernant rapidité et occupation mémoire, ce sont les derniers de mes soucis, ça va toujours assez vite et il me reste toujours assez de place de flash.

c'est bien dommage, de ne pas se poser cette question, cela rend ton programme bien plus fluide et stimule ta logique. Mais si pour toi le programme se résume à : Le principale c'est que cela fonction , il va de soit,que l' affaire est réglé.

Perso je règle le problème de basculement été/hiver, avec 1 test MOIS 3 OU 10 qui ne dirige soit sur été /hiver, soit, je Sort.
Et 1 test ,sur jour ET heure locale NON on sort, OUI, inversion de variable ajout qui passe donc de 1 a -1, ou vis et versa et je rajoute a l'heure locale.
Pas la même philosophie :wink: que tes 5 +4 tests imbriqués, mais si cela te convient à moite aussi :wink:

A+

Combien de if avant plantage?
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#7 Message par Gérard » lun. 21 nov. 2016 22:17

maï a écrit :BONJOUR
La contrainte été --> hiver n'est pas la même que hiver --> été. En effet, il faut tester le bit hiver avant modif, comme on passe de 3h à 2h, si pas ce test du bit hiver, on boucle entre 2 et 3h sans en sortir, c'est pour cette raison que le test du bit hiver est obligatoire.

Depuis 1996 le changement se fait a la même heure 03:00:00 voir ici https://fr.wikipedia.org/wiki/Heure_d%27%C3%A9t%C3%A9
Donc, mes conditions de test sont toutes à fait valables.


Non, pour passer à l'heure d'été, on va de 2h à 3h. Pour l'heure d'hiver, on va de 3h à 2h. Quand tu passes à l'heure d'hiver et que tu ne tiens pas compte du fait que tu es maintenant en hiver, à 3h tu repasses à 2h et ainsi de suite. C'est pour ça que ce passage demande un if de plus.

maï a écrit :
Est ce que les tests avec des IF demandent des places dans la pile de retour? Et les tests avec des ET aussi ou pas ?

Heu.. la, petit problème de compréhension de ta part sur la pile.Tu utilises la pile UNIQUEMENT lors des appels a des SPG et utilisation de INTERRUPTION. Pour les tests, tu peux remplir la flash de tests, si cela te fait plaisir, à la fin,tu auras le résultat d'une condition VRAI ou faux :sifflotte:


C'était la question que je me suis posé. Donc non, pas d'utilisation de la pile avec des if.

maï a écrit :
Pour le calcul du dernier dimanche :
les mois 3 et 10 ont 31 jours, donc le dernier dimanche est obligatoirement > 24

Donc tu dois faire un test du style si jour >24 ET dimanche et cela pendant tout le mois de mars et tout le mois d'octobre.


C'est bien ce que je fais avec la ligne ci-dessous.
IF DATE_RTC > %00100100 THEN '24 en BCD

maï a écrit :
Concernant rapidité et occupation mémoire, ce sont les derniers de mes soucis, ça va toujours assez vite et il me reste toujours assez de place de flash.

c'est bien dommage, de ne pas se poser cette question, cela rend ton programme bien plus fluide et stimule ta logique. Mais si pour toi le programme se résume à : Le principale c'est que cela fonction , il va de soit,que l' affaire est réglé.

Parce qu'un programme optimisé et place mémoire et en temps d'exécution est plus "fluide"? C'est quoi un programme fluide? Et en quoi ça stimule ma logique?

maï a écrit :Perso je règle le problème de basculement été/hiver, avec 1 test MOIS 3 OU 10 qui ne dirige soit sur été /hiver, soit, je Sort.
Et 1 test ,sur jour ET heure locale NON on sort, OUI, inversion de variable ajout qui passe donc de 1 a -1, ou vis et versa et je rajoute a l'heure locale.
Pas la même philosophie :wink: que tes 5 +4 tests imbriqués, mais si cela te convient à moite aussi :wink:


Je n'ai pas tout compris de tes tests.

maï a écrit :A+


A+
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Combien de if avant plantage?
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#8 Message par Guest » mar. 22 nov. 2016 10:42

Bonjour

Petite réflexion cela permettra de savoir de quoi on parle

Ete-> T.U.+2
Hiver T.U."+"1
Je ne sais pas sur quoi est reglé ta breloque le changement d' heure E/H ce fait à T.U. Reste a déterminer T.U et le changement ce fait a la même heure :sifflotte:


A+ et bonne journée a toi :wink:

Combien de if avant plantage?
Gérard
Avatar de l’utilisateur
Expert
Expert
Messages : 1640
Âge : 65
Enregistré en : septembre 2015
Localisation : Alsace - Haut-Rhin

#9 Message par Gérard » mar. 22 nov. 2016 15:34

Si tu regardes bien le lien que tu as donné, tu verras que H --> E, on passe de 2 à 3h et E --> H, on passe de 3 à 2h.

J'ai fait quelques horloges pas des breloques.
Le 18/04/19 je suis devenu papy de jumeaux, le 01/09/23 une petite cousine des jumeaux est née.

Combien de if avant plantage?
Guest
Confirmé
Confirmé
Messages : 800
Enregistré en : mars 2017

#10 Message par Guest » mar. 22 nov. 2016 18:40

Tres heureux,de t'avoir apporté quelques lumières sur la pile, puisque la question était :Combien de if avant plantage , mais c'est vrai tu as fait beaucoup de breloques :wink: .Je trouves sympa breloques,cela fait montre à gousset .

C'est pas grave Gerad, comme tu fais c'est très bien c'est toi qui a un problème pas moi.

PS:
Je ne sais pas sur quoi est réglé ta breloque
Par contre je vois très bien comment, tu fais le passage E/H.Et pour mon lien, fait un temps arrêt sur 1996 puisque mon fil #8 de toute évidence ne ta pas convaincu :sifflotte:


Retourner vers « Langage BASIC & PASCAL »

Qui est en ligne

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