IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Pascal Discussion :

[LG]programme détermination du jour de la semaine


Sujet :

Langage Pascal

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 12
    Points : 4
    Points
    4
    Par défaut [LG]programme détermination du jour de la semaine
    Bjr voila je dois réaliser un programme en PASCAL qui permet de determiner le jour de la semaine pour n importe quelle date comprise entre le 1er janveir 1900 et le 31 decembre 3000

    la date doit etre presenté sous forme d un record comprenant les trois champs entiers jour moi et année

    est ce que quelqu 'un peu m aider un gros bisous à lui

    merci d'avance Flo

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 130
    Points : 121
    Points
    121
    Par défaut
    Salut

    tu as deja refléchi au problème ou pas du tout??

    Si ce n'est pas le cas, réfléchi deja à la facon de résoudre le problème (d'un point de vue algo) et ensuite on pourra te donner des indications sur la manière de programmer ca en Pascal

    Si vraiment tu n'y arrives pas, dis nous ou tu coinces, et on essaira de t'aider :)

    @+

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 12
    Points : 4
    Points
    4
    Par défaut
    salut oui j ai deja comencer a penser au sujet
    j ai realiser des function notamment pour determiner une année bissextil ect

    je vais reflechir plus en profondeur et revenir un peu plus tard

    mais je me demandais si il n y avait pas moyen de trouver un porgramme genre une ressource deja casiment fait que je nai plus qu a modifier ou que je puisse m en inspirer
    (car le tps mes compté entre 9 exam de math a etudier j ai pas bcp de tps ...)

    Merci

  4. #4
    Rédacteur/Modérateur
    Avatar de M.Dlb
    Inscrit en
    Avril 2002
    Messages
    2 465
    Détails du profil
    Informations personnelles :
    Âge : 39

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 465
    Points : 4 312
    Points
    4 312
    Par défaut
    Je t'invite à lire les règles du forum, et à éviter le style SMS

    Pour ton programme, il me semble qu'il existe une méthode pas très compliquée, mais je ne la connais pas Sinon, on peut faire ça bêtement : tu calcules le nombre de jours entre la date actuelle et la date dont tu veux savoir le jour, tu appliques un modulo 7 sur ce nombre, et tu ajoutes ou soustrais au jour d'aujourd'hui...

  5. #5
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    Bonjour,

    Regarde dans http://pascal.developpez.com/sources/

    @++

  6. #6
    Membre du Club

    Profil pro
    Inscrit en
    Décembre 2003
    Messages
    42
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2003
    Messages : 42
    Points : 47
    Points
    47
    Par défaut
    Bonjour,

    Le principe de calcul n'est pas très compliqué. Il suffit de savoir quel jour de la semaine est tombé le 1er janvier 1900 (sauf erreur de ma part, il s'agit d'un lundi) et ensuite d'appliquer modulo 7 au nombre de jours s'étant écoulés entre le 01/01/1900 et la date recherchée en oubliant pas d'ajouter les 29 février des années bissextiles - Attention les années bissextiles ne sont pas tous les quatre ans exactement (années divisibles par 100 sans l'être par 400).

    Voir procédure bricolée à cet effet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    PROCEDURE BISSEXTILE(VAR X:LONGINT;
                         VAR S:INTEGER);
    VAR N,NQUAT,NCENT:INTEGER;
    BEGIN
      N:=X MOD 4;
      NQUAT:=X MOD 400;
      NCENT:=X MOD 100;
      IF (N<>0) THEN
        BEGIN
          S:=0;
        END
      ELSE
        BEGIN
          IF (NCENT=0) AND (NQUAT<>0) THEN
            BEGIN
              S:=0;
            END
          ELSE
            BEGIN
              S:=1;
            END;
        END;
    END;
    Et puisque nous sommes dimanche de Pâques, la date de Pâques tombe le premier dimanche de pleine lune qui suit l'équinoxe de Printemps.

    A+

    4BIN

  7. #7
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 12
    Points : 4
    Points
    4
    Par défaut reponse
    Mr terwagne ? non je dis ca car notre prof de physique nous a parlé de paque lol j ai bien avancé ds mon programme les fction bissextile date valide ou pas nmbre de jour dans un moi sont faites me reste a faire cele pour calculer le jour entre 2 date et c fini j aurai plus qu a compiler enfin ....

  8. #8
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 12
    Points : 4
    Points
    4
    Par défaut reponse
    Comment puis je compter le nombre de jours s'étant écouler entre le 01/01/1900 et une date donnée par l'utilisateur je n y arrive pas merci

  9. #9
    Responsable Pascal, Lazarus et Assembleur


    Avatar de Alcatîz
    Homme Profil pro
    Ressources humaines
    Inscrit en
    Mars 2003
    Messages
    7 963
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ressources humaines
    Secteur : Service public

    Informations forums :
    Inscription : Mars 2003
    Messages : 7 963
    Points : 59 654
    Points
    59 654
    Billets dans le blog
    2
    Par défaut
    Tu peux utiliser un algorithme de calendrier perpétuel, beaucoup plus performant que les batteries de tests nécessaires à la détermination du nombre de jours d'une année ou d'un mois.

    L'exemple suivant fonctionne très bien pour des dates égales ou postérieures à 1582 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Function Jour_Semaine (Jour, Mois, Annee : Word) : Word;
    (* Algorithme de calendrier perpétuel valable à partir de 1582.
       1 = lundi, 2 = mardi, etc. *)
    Var Resultat : Word;
        r : Real;
    Begin
      if Mois < 3
         then   (* Janvier et février : Annee := Annee - 1 et Mois := Mois + 12 *)
           begin
             Dec(Annee);
             Inc(Mois,12);
           end;
      r := 1720996.5 - Annee div 100 + Annee div 400 + Trunc(365.25 * Annee) +
           Trunc(30.6001 * (Mois + 1)) + Jour;
      r := r - Trunc(r / 7) * 7;
      Resultat := Trunc(r) mod 7 + 2;   (* + 2 car mardi = 0, mercredi = 1, etc *)
      if Resultat > 7
         then   (* Si lundi = 8 then lundi :=1 *)
           Resultat:=1;
      Jour_Semaine := Resultat;
    End;

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Reponse
    Le probleem c que je ne peux utiliser aucune fonction prédéfinie en pascal je nai eu que 2 h de pascal pdt 5 mois
    je peu donc j uste utiliser des boucle des if then else des machin come ca

  11. #11
    Membre du Club
    Inscrit en
    Février 2005
    Messages
    53
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 53
    Points : 64
    Points
    64
    Par défaut
    Salut,

    Les fonctions prédéfinies que j'ai remarquées dans le code ci-dessus sont dec(X) (X := X - 1), inc(Y, a) (Y := Y + a) (sachant que dec et inc peuvent ou non prendre un paramètre qui indique de combien décrémenter ou incrémenter) et trunc qui tronque un nombre (c'est peut-être le plus embêtant à recoder). Si c'est l'appel à une fonction qui te gènes, tu peux très bien insérer le code dans le programme principal (après quelques menus aménagements bien sûr).

  12. #12
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 12
    Points : 4
    Points
    4
    Par défaut problème
    Voila j ai fini mon programme je veux faire un menu j'ai fait ceci mais ca ne fonctione pas je ne vois pas pk quelqu un saurai t il maider

    Ou me dire coment je pourrai faire autrement merci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    BEGIN
     
    clrscr;
    Textcolor(11); Writeln ('---> B I E N V E N U E   C E   P R O G R A M M E   V O U S   P E R M E T <---');
    Textcolor(15); Writeln ('  1) De determiner : le jour de la semaine.');
    Writeln ('  2) D''afficher    : le calendrier d''une date donnee.');
    writeln ('  3) Au fait nous somme le paramétriser le datenow(fonctione pas encore) ;-) ');
    Textcolor(13);Writeln ('(Appuyez sur une touche pour continuer le programme SVP.)');
    readkey;
    i:=1;
    f:=1;
     
    While (i = 1) do {boucle menu}
     
    Begin
       clrscr;
       Textcolor(11); Writeln ('---> M E N U   P R I N C I P A L <---');
       Textcolor(14); Write('TAPEZ 1'); Textcolor(15); Writeln (' Pour : Determiner le jour de la semaine.');
       Textcolor(14); Write('TAPEZ 2'); Textcolor(15); writeln (' Pour : Afficher le calendrier d''un mois.');
       Textcolor(14); Write('TAPEZ 3'); Textcolor(15); writeln (' Pour : Quitter le programme.');
       readln(x);
     
       If (x=1) then
          while (f = 1) do
          Begin
          Textcolor(11); Writeln('---> J O U R   D E   L A   S E M A I N E   D''U N E   D A T E <---');
          Textcolor(15); Write('Entrez une date comprise entre le : ');
          Textcolor(12); Write ('01/01/1900');  
          Textcolor(15); Write(' & le : ');
          Textcolor(12); Writeln ('31/12/3000.');
          Textcolor(15);
          Write(' 1) Entrez le jour : ');
          readln(j.Day);
          Write(' 2) Entrez le mois : ');
          readln(m.Month);
          Write(' 3) Entrez l''annee : ');
          readln(a.Year);
          readkey;
     
     
          If (DateValide(j.Day,m.Month,a.year) = False)Then
             Begin
             Clrscr;
             Textcolor(12); Write ('! E R R E U R !'); Textcolor(15); writeln (' : la date entree : ',j.Day,'/',m.Month,'/',a.Year,' n''est pas valide!');
             Textcolor(13);Writeln ('(Appuyez sur une touche pour continuer le programme SVP.)');
             readkey;
             clrscr;
             Textcolor(11); Writeln ('---> M E N U   S E C O N D A I R E <---');
             Textcolor(14); Write('TAPEZ 1'); Textcolor(15); Writeln (' Pour : Rentrer une nouvelle date.');
             Textcolor(14); Write('TAPEZ 2'); Textcolor(15); Writeln (' Pour : Revenir au menu principale.');
             Textcolor(14); Write('TAPEZ 3'); Textcolor(15); writeln (' Pour : Quitter le programme.');
             readln (z);
                if (z=1) then f:=1;
     
                if (z=2) then f:=0;
                              i:=1;
     
                if (z=3) then f:=0;
                              i:=0;
     
                if ((z<>1) and (z<>2) and (z<>3))then writeln ('Vous ne respectez pas les conventions -> Retour menu principal!');
                                               Textcolor(13);Writeln ('(Appuyez sur une touche pour continuer le programme SVP)');
                                               Readkey;
                                               f:=0;
                                               i:=1;
     
     
             End {end du Then}
     
          Else
             Begin
             write ('Le ',j.Day,'/',m.Month,'/',a.Year,' etait, est ou sera un : '); Textcolor(10); writeln(CalculJourSemaine(j.Day,m.Month,a.year),'!');
             Textcolor(13);Writeln ('(Appuyez sur une touche pour continuer le programme SVP.)');
             Readkey;
             clrscr;
             Textcolor(11); Writeln ('---> M E N U   S E C O N D A I R E <---');
             Textcolor(14); Write('TAPEZ 1'); Textcolor(15); writeln (' Pour : Rentrer une nouvelle date.');
             Textcolor(14); Write('TAPEZ 2'); Textcolor(15); writeln (' Pour : Revenir au menu principal.');
             Textcolor(14); Write('TAPEZ 3'); Textcolor(15); writeln (' Pour : Quitter le programme.');
             readln (y);
                if (y=1) then f:=1;
     
                if (y=2) then f:=0;
                              i:=1;
     
                if (y=3) then f:=0;
                              i:=0;
     
                if ((y<>1) and (y<>2) and (y<>3))then writeln ('Vous ne respectez pas les conventions -> Retour menu principal!');
                                               Textcolor(13);Writeln ('(Appuyez sur une touche pour continuer le programme SVP)');
                                               Readkey;
                                               f:=0;
                                               i:=0;
     
             End; {end du else}
          End {end de la boucle en y}
       Else
       If (x=2) then begin writeln('BONUS tu crois pas que j''allais tout faire tout seul non plus Claire in o'); readkey; end
       Else
       If (x=3) then i:=0;
       End;
    END.

  13. #13
    Futur Membre du Club
    Profil pro
    Inscrit en
    Janvier 2005
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2005
    Messages : 7
    Points : 8
    Points
    8
    Par défaut
    pour les menus, il vaut mieux utiliser ce qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    VAR rep:char
                 BEGIN
                    WRITELN('MENU ......');
                           WRITELN('(1) toto');
                                   WRITELN('(2) otot');
                          READLN(rep);
                    case rep of
                         '1','t','T' : {si touche 1 ou t ou T tapée alors}
    begin
    writeln('choix 1 effectué');{écrit choix 1 effectué}
    end;
                         '2','o','O' : {si touche 2 ou o ou O tapée alors}
    begin
    writeln('choix 2 effectué');{écrit choix 2 effectué}
    end;
    end;

  14. #14
    Candidat au Club
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    12
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 12
    Points : 4
    Points
    4
    Par défaut Reponse
    Hello merci pour le case of je l avais completement oublé celui la
    sinon j ai trouvé j ai tout découper en procedure et tou est parfait
    j etais vraiment fatigué qd j ai pondu ce code pourri arf
    plus qua rendre au prof

    Merci pour tout Ce sujet est terminé ... il s autodétruira dans 10 9 8 7 6 5 4 3 2 1 BIPPPPPPPPPPPPPPPPPPPPPPPp boum

  15. #15
    Expert confirmé
    Avatar de Loceka
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    2 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 2 276
    Points : 4 843
    Points
    4 843
    Par défaut
    flo.baet : qu'est-ce qui ne fonctionne pas précisément ?

    Sinon, je rejoins lance pour ce qui est de l'utilisation du case, c'est plus propre et plus lisible. Je te conseille aussi d'utiliser des variables bouléennes lorsque tu n'as que deux valeurs à affecter (pour i et f par exemple) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    while i do {sous entendu tant que i = TRUE}
    begin
       readln(x);
       case x of
       1: begin
           ...
          end;
       2: begin
          end;
       3: begin
          end;
       else begin
            end;
       end;
    end;

  16. #16
    Membre expert
    Avatar de Eric Sigoillot
    Inscrit en
    Mars 2002
    Messages
    1 212
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 212
    Points : 3 369
    Points
    3 369
    Par défaut
    @flo.baet :

    Merci de penser au bouton [Résolu] en bas de page quand le sujet est clos.
    De plus il faut faire attention à ne pas créer un nouveau sujet au lieu d'en compléter un.

    @++

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/03/2009, 13h16
  2. Réponses: 1
    Dernier message: 19/12/2008, 16h48
  3. Exécuter un programme dans un terminal !
    Par mac88 dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 16/09/2008, 11h37
  4. Réponses: 2
    Dernier message: 10/03/2008, 23h07
  5. [Programmation]Durée en Mois ET Jours entre 2 dates
    Par Shamard dans le forum VBA Access
    Réponses: 5
    Dernier message: 23/04/2007, 18h52

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo