Calculatrices Casio Graphiques : Jeux, programmes, cours, pompes, astuces et programmation sur calculatrice graphique Casio et ClassPad 300 : programmes casio et jeux casio...

Programmes et jeux pour calculatrices Casio Graph et calculatrice ClassPad 300, jeux casio, cours...Calcul formel pour Casio Graph 85
 

Forum Casio

 

Programmes et jeux pour calculatrices Casio Graph et calculatrice ClassPad 300, jeux casio, cours...: Forums

Bon anniversaire à lili485 (27 ans)

Forum Casio

Un espace convivial pour poser vos questions ou simplement venir discuter... Entrer

Forum Programmation

Toutes les discussions à propos de la programmation sur calculatrices Casio... Entrer

Foire aux Questions

Les réponses aux questions les plus courantes sont ici ! Entrer

Forum principal Jeuxcasio.com
  

Aide programme date

Auteur Aide programme date
foughi46
Membre



Messages: 5
Message posté: 21-12-2011 à 23:38     Editer/Supprimer les messages postés   Renvoyer une note
Bonjour.

J'ai ce programme à faire :

" Écrivez un programme DATE qui lit la date d’un jour, exprimée sous la forme de trois nombres J (jour),
M (mois), A (année) et qui calcule et affiche la date du lendemain. Vous devez vérifier la date donnée, et également prendre en compte les années bissextiles. Donnez le jour de la semaine correspondant à la date donnée, et à la date du lendemain. Vous utiliserez les fonctions SCANDATE et PRINTDATE.
Pour rappel les années bissextiles sont :
– soit divisibles par 4 mais non divisibles par 100 ;
– soit divisibles par 400.
Donc, inversement, ne sont pas bissextiles les années :
– soit non divisibles par 4 ;
– soit divisibles par 100, mais pas par 400. "

J'ai tenté quelque chose mais ça plante.
C'est dans le programme SCANDATE. La vérification des valeurs rentrées ne marche pas mais je ne sais pas pourquoi.
Aussi, je ne sais pas comment obtenir le jour de la semaine correspondant à une date.

Voilà ce que j'ai fait :

Programme DATE

ClrText
Prog "SCANDATE"
"Date donnee :"
Prog "PRINTDAT"
Isz J
M=1 Or M=3 Or M=5 Or M=7 Or M=8 Or M=10 Or M=12⇒31→S
M=4 Or M=6 Or M=9 Or M=11⇒30→S
M=2⇒28→S
M=2 And ((Frac (A÷4)=0 And Frac (A÷100)≠0) Or Frac (A÷400)=0)⇒29→S
If J>S
Then Isz M
1→J
IfEnd
If M>12
Then Isz A
1→M
IfEnd
"Jour suivant :"
Prog "PRINTDAT"

----------

Programme SCANDATE

Do
"J"?→J
LpWhile J<1 And J>31
Do
"M"?→M
LpWhile M<1 And M>12
"A"?→A

----------

Programme PRINTDAT

"00/00/0000"
J≤9⇒Locate 2,7,J
J>9⇒Locate 1,7,J
M≤9⇒Locate 5,7,M
M>9⇒Locate 4,7,M
Locate 7,7,A


Merci d'avance pour votre aide.

foughi.



drsi-prog1max
Administrateur



Messages: 762
Calculatrice : Graph 65
Message posté: 22-12-2011 à 01:09     Editer/Supprimer les messages postés   Renvoyer une note
Salut.

Je trouve que tu t'en sors plutôt pas mal (tu t'es pas trompé entre les Or et And avec le mois de février !).


Pour le problème dans le programme SCANDATE, c'est que t'utilise un And dans la condition de vérification des valeurs entrées, au lieu d'un Or : faut comprendre "si J<1 ou si J>31 alors on redemande J", et non pas "si J<1 et J>31 alors on redemande J".

Je pense qu'il faut également vérifier que J est un entier, donc que sa partie décimale soit nulle : "si Frac J≠0 ou si J<1 ou si J>31 alors on redemande J" :
        LpWhile Frac J≠0 Or J<1 Or J>31
ou encore (puisque Frac J≠0 est un booléen et que la calculatrice considère que tout ce qui n'est pas 0 est vrai) :
        LpWhile Frac J Or J<1 Or J>31

De même pour le mois :
        LpWhile Frac M Or M<1 Or M>12

Et pour l'année (où tu ne vérifiais rien) :
        Do
        "Annee "?→A
        LpWhile Frac A


Je pense que ta vérification n'est pas complète : ton programme SCANDATE accepte les jours suivants : le 31 avril, le 31 juin, le 31 septembre, le 31 novembre, les 30 et 31 février, le 29 février si l'année est bissextile, et toute date antérieure au 15 octobre 1582 (avant cette date, le calendrier était différent : pas d'année bissextile, pas le même nombre de jours par mois, etc.). Le calendrier a été changé car le précédent prenait environ 1 jour de retard tous les 129 ans (le calendrier actuel prend un jour de retard tous les 3000 ans environ).
Pour faire cette vérification, tu dois accepter M en fonction de J, et accepter A en fonction de M et J.

Pour la vérification de M :
        J>29 And M=2 Or J=31 And (M=4 Or M=6 Or M=9 Or M=11)⇒ Redemander M en expliquant pourquoi
Une solution est d'inclure la vérification de M dans une autre boucle :
        Do
        Do
        "Mois "?→M
        LpWhile Frac M Or M<1 Or M>12
        J>29 And M=2 Or J=31 And (M=4 Or M=6 Or M=9 Or M=11)⇒0→M
        M=0⇒"La combinaison Jour/Mois est impossible !"
        LpWhile Not M

Pour la vérification de A :
        J=29 And M=2 And (Frac A4 Or Frac A400 And Not Frac A100)⇒ Redemander A en expliquant
                        pourquoi (jours impossibles dans les mois)

        A<1582 Or A=1582 And (M<10 Or M=10 And J<15)⇒ Redemander A en expliquant pourquoi (date hors
                        calendrier)
Une solution est d'inclure la vérification de A dans une autre boucle :
        Do
        Do
        "Annee "?→A
        LpWhile Frac A
        J=29 And M=2 And (Frac A4 Or Frac A400 And Not Frac A100)⇒.1→A
        A<1582 Or A=1582 And (M<10 Or M=10 And J<15)⇒.2→A
        A=.1⇒"La combinaison Jour/Mois/Annee est impossible !"
        A=.2⇒"La mise en place du calendrier gregorien date du vendredi 15 octobre 1582 !"
        LpWhile Frac A


Pour obtenir le jour de la semaine correspondant à une date, j'ai trouvé la réponse :

Soit j le jour, m le mois, a l'année. On pose :
  • si m≥3, m1=m-2
       sinon, m1=m+10
  • si m≥3, a1=a
       sinon, a1=a-1
  • ns="les deux premiers chiffres de a1
  • ns="les deux derniers chiffres de a1
  • f = j + as + E(as/4) - 2ns + E(ns/4) + E((26m1-2)/10),        avec E(x) la partie entière de x.
    Dans ces conditions, le jour de la semaine est donné par le reste de la division de f par 7 (0="Dimanche", 1="Lundi", ..., 6="Samedi").


    Ce qui donne :
            M-2→D
            A→B
            D<1⇒Dsz B
            D<1⇒D+12→D
            Intg B100→C
            B-100→B
            J+C+Intg C4-2B+Intg B4+Intg (2.6D-.2)→B
            B-7Intg B7→B
            B<1⇒B+7→B
    Le résultat est dans B : B=1 signifie "Lundi", B=2 "Mardi", etc.
    J'en ai profité pour mettre "Dimanche"=7 puisque ça n'alourdissait pas le code, juste un 0 qui devient 1 (à la dernière ligne, qui est nécessaire même si on prend "Dimanche"=0).



     
  • foughi46
    Membre



    Messages: 5
    Message posté: 22-12-2011 à 01:44     Editer/Supprimer les messages postés   Renvoyer une note
    On va dire que j'ai tout compris......

    Tu peux mettre le code en entier ? parce que je me suis perdu dans mon code je pense, si bien qu'il plante avec la nouvelle vérification de A.
    Et le bout de code pour trouver B, je sais pas où le mettre (programme DATE ou programme PRINTDAT).



    drsi-prog1max
    Administrateur



    Messages: 762
    Calculatrice : Graph 65
    Message posté: 22-12-2011 à 01:55     Editer/Supprimer les messages postés   Renvoyer une note
    J'ai pas testé le code (j'ai pas ma calculatrice chez moi) alors je me suis peut-être trompé mais je pense que c'est bon. Es-tu sûr d'avoir bien recopié pour la vérification de A ?

    Pour le bout de code donnant le jour de la semaine :

    - soit tu le met dans le programme principal, juste après l'appel à SCANDATE (avant le premier appel à PRINTDAT), et ensuite, pour connaitre le nom du lendemain, suffit de faire Isz B:B=8⇒1→B.

    - soit tu le met dans le programme PRINTDAT, si bien que l'exécution de DATE entraînera deux fois l'exécution des calculs de B. Mais il n'y a que 7 lignes de calcul, et si tu veux ensuite utiliser PRINTDAT dans un autre programme, tu n'aura pas à réécrire les lignes du calcul de B. C'est le choix que j'ai fait.

    Programme DATE :
            ClrText
            Prog "SCANDATE"
            "Date donnee :"
            Prog "PRINTDAT"
            Isz J
            31→S
            M=2 Or M=4 Or M=6 Or M=9 Or M=11⇒Dsz S
            M=2⇒Dsz S
            M=2 And (Frac A4 Or Frac A400 And Not Frac A100)⇒Dsz S
            J>S⇒Isz M
            J>S⇒1→J
            M>12⇒Isz A
            M>12⇒1→M
            "Jour suivant :"
            Prog "PRINTDAT"


    Programme SCANDATE :
            '/**
            ' * Lis une date
            ' * @param J
            ' *        jour
            ' * @param M
            ' *        n° du mois
            ' * @param A
            ' *        annee
            ' */
            Do
            "Jour "?→J
            LpWhile Frac J Or J<1 Or J>31
            Do
            Do
            "Mois "?→M
            LpWhile Frac M Or M<1 Or M>12
            J>29 And M=2 Or J=31 And (M=4 Or M=6 Or M=9 Or M=11)⇒0→M
            M=0⇒"La combinaison Jour/Mois est impossible !"
            LpWhile Not M
            Do
            Do
            "Annee "?→A
            LpWhile Frac A
            J=29 And M=2 And (Frac A4 Or Frac A400 And Not Frac A100)⇒.1→A
            A<1582 Or A=1582 And (M<10 Or M=10 And J<15)⇒.2→A
            A=.1⇒"La combinaison Jour/Mois/Annee est impossible !"
            A=.2⇒"La mise en place du calendrier gregorien date du vendredi 15 octobre 1582 !"
            LpWhile Frac A


    Programme PRINTDAT :
            '/**
            ' * Affiche une date
            ' * @param J
            ' *        jour
            ' * @param M
            ' *        n° du mois
            ' * @param A
            ' *        annee
            ' * @using B~D
            ' */
            If (Frac J Or J<1 Or J>31 Or Frac M Or M<1 Or M>12 Or Frac A)
            Then "Data error"
            Return
            IfEnd
            M-2→D
            A→B
            D<1⇒Dsz B
            D<1⇒D+12→D
            Intg B100→C
            B-100→B
            J+C+Intg C4-2B+Intg B4+Intg (2.6D-.2)→B
            B-7Intg B7→B
            B<1⇒B+7→B
            " "
            B=1⇒Locate 1,7,"Lundi"
            B=2⇒Locate 1,7,"Mardi"
            B=3⇒Locate 1,7,"Mercredi"
            B=4⇒Locate 1,7,"Jeudi"
            B=5⇒Locate 1,7,"Vendredi"
            B=6⇒Locate 1,7,"Samedi"
            B=7⇒Locate 1,7,"Dimanche"
            7→C
            B=6⇒Isz C
            B=3 Or B=5 Or B=7⇒10→C
            Locate C,7,"00/00/"
            Locate C+1-(J>9),7,J
            Locate C+4-(M>9),7,M
            Locate C+6,7,A



     
    foughi46
    Membre



    Messages: 5
    Message posté: 22-12-2011 à 02:10     Editer/Supprimer les messages postés   Renvoyer une note
    Je recopie tout ça et je teste.


    foughi46
    Membre



    Messages: 5
    Message posté: 22-12-2011 à 13:32     Editer/Supprimer les messages postés   Renvoyer une note
    Ca marche !!!

    Merci pour ton aide.

    Est-ce qu'il est possible de le mettre en ligne ?



    drsi-prog1max
    Administrateur



    Messages: 762
    Calculatrice : Graph 65
    Message posté: 22-12-2011 à 13:55     Editer/Supprimer les messages postés   Renvoyer une note
    Pour envoyer un programme c'est ici : http://www.jeuxcasio.com/modules.php?name=Downloads&d_op=AddDownload.

    Mais je pense que le programme en l'état n'a pas grand intérêt. Par contre ce que tu peux faire c'est envoyer un programme qui donne le jour de la semaine en fonction de la date donnée, ça ça peut servir. Il te suffit de modifier les programmes de cette façon :

    Programme NAMEDAY :
            '/**
            ' * Affiche le jour de la semaine correspondant a la date entree
            ' * @param J
            ' *        jour
            ' * @param M
            ' *        n° du mois
            ' * @param A
            ' *        annee
            ' * @using B~D
            ' */
            Do↵
            "Jour "?→J↵
            LpWhile Frac J Or J<1 Or J>31↵
            Do↵
            Do↵
            "Mois "?→M↵
            LpWhile Frac M Or M<1 Or M>12↵
            J>29 And M=2 Or J=31 And (M=4 Or M=6 Or M=9 Or M=11)⇒0→M↵
            M=0⇒"La combinaison Jour/Mois est impossible !"↵
            LpWhile Not M↵
            Do↵
            Do↵
            "Annee "?→A↵
            LpWhile Frac A↵
            J=29 And M=2 And (Frac Aɹ4 Or Frac Aɹ400 And Not Frac Aɹ100)⇒.1→A↵
            A<1582 Or A=1582 And (M<10 Or M=10 And J<15)⇒.2→A↵
            A=.1⇒"La combinaison Jour/Mois/Annee est impossible !"↵
            A=.2⇒"La mise en place du calendrier gregorien date du vendredi 15 octobre 1582 !"↵
            LpWhile Frac A↵
            M-2→D↵
            A→B↵
            D<1⇒Dsz B↵
            D<1⇒D+12→D↵
            Intg Bɹ100→C↵
            B-100→B↵
            J+C+Intg Cɹ4-2B+Intg Bɹ4+Intg (2.6D-.2)→B↵
            B-7Intg Bɹ7→B↵
            B<1⇒B+7→B↵
            " "↵
            B=1⇒Locate 1,7,"Lundi"↵
            B=2⇒Locate 1,7,"Mardi"↵
            B=3⇒Locate 1,7,"Mercredi"↵
            B=4⇒Locate 1,7,"Jeudi"↵
            B=5⇒Locate 1,7,"Vendredi"↵
            B=6⇒Locate 1,7,"Samedi"↵
            B=7⇒Locate 1,7,"Dimanche"↵
            7→C↵
            B=6⇒Isz C↵
            B=3 Or B=5 Or B=7⇒10→C↵
            Locate C,7,"00/00/"↵
            Locate C+1-(J>9),7,J↵
            Locate C+4-(M>9),7,M↵
            Locate C+6,7,A



     
    PierrotLL
    Administrateur



    Messages: 1854
    Calculatrice : Graph 85
    Message posté: 22-12-2011 à 13:59     Editer/Supprimer les messages postés   Renvoyer une note
    Oui, mais cette fonctionnalité est déjà intégrée à la calculatrice, dans le menu TVM, F6 F2 (Calcul jours, ou Days Calculation en anglais)


    foughi46
    Membre



    Messages: 5
    Message posté: 22-12-2011 à 14:13     Editer/Supprimer les messages postés   Renvoyer une note
    Et est-ce qu'on peut l'appeler depuis un programme ?


    drsi-prog1max
    Administrateur



    Messages: 762
    Calculatrice : Graph 65
    Message posté: 22-12-2011 à 14:18     Editer/Supprimer les messages postés   Renvoyer une note
    Days Calculation ne fonctionne que sur la plage 01/01/1901 - 31/12/2099.
    Et non, on ne peut pas l'utiliser dans un programme.



     
    Girlypole
    Membre



    Messages: 2
    Message posté: 04-01-2013 à 22:49     Editer/Supprimer les messages postés   Renvoyer une note
    Bonsoir à vous tous.

    Sachant que j'ai seulement quelques bases en programmation, j'ai recopié le dernier programme sur ma casio 35+ pour avoir le jour de la semaine qui correspond à la date rentrée. Dès le premier test, je me rends compte qu'il me donne un jour de faux.

    L'avez-vous testé? Marche-t-il?



    Girlypole
    Membre



    Messages: 2
    Message posté: 04-01-2013 à 22:53     Editer/Supprimer les messages postés   Renvoyer une note
    Je me demandais aussi à quoi servait cette partie ci-dessous (partie inférieure du programme):


    '/**↵
    ' * Affiche le jour de la semaine correspondant a la date entree↵
    ' * @param J↵
    ' * jour↵
    ' * @param M↵
    ' * n° du mois↵
    ' * @param A↵
    ' * annee↵
    ' * @using B~D↵
    ' */↵null



    johanna080
    Membre



    Messages: 6
    Message posté: 03-04-2015 à 08:16     Editer/Supprimer les messages postés   Renvoyer une note
    Merci beaucoup pour les infos coque galaxy A3 etui galaxy A3


    Meetic - Les règles du jeu ont changé | MeeticAffinity
      
    Bloquer le sujet Déplacer le sujet Supprimer le sujet
     
         


    Toutes les pages et les images de jeux casio appartiennent à http://www.jeuxcasio.com ©2002-2017
    Toute reproduction partielle ou totale de Jeuxcasio.com ou de son contenu est strictement interdite. | Casio est une marque déposée par le groupe Noblet

    Bac Français Meeticadblocktest Amazon.com Expedia.com Ebookers
    Opodo
    Amazon.fr eBay Fr