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 :

Problème de syntaxe


Sujet :

Langage Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Par défaut Problème de syntaxe
    Je me suis lancé récemment dans la composition de code Pascal (dû a mes cours de programmation dans mes etudes)... J'ai un problème avec un programme basique : avec comme donnée l'année (bissextile ou non) et le numéro du jour (325e par exemple) donner une date du type j/m/a...

    Voilà le code :
    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
     
    program numerojourdate; 
    var   
    a : integer;   
    b : integer;  
    i := 1 
    t : array[1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31); 
    begin   
    write('Entrez une année:');   
    readln(a);   
    write('Entrez un numero pour la date du jour a calculer:');   
    readln(b);   
    if (((a mod 4=0) and (a mod 100<>0)) and (a mod 400=0))) then t[2]:=29; 
    while b>t[i]do  
    begin b:= b-t[i]end     
    else	
    writeln('ce jour est le b/i/a'); 
    end.
    Voilà, le problème vient à mon avis de la commande d'affectation du i... mais je sèche

    Merci de votre aide ;-)

  2. #2
    Responsable Pascal, Lazarus et Assembleur


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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 8 056
    Billets dans le blog
    2
    Par défaut
    Bonjour et bienvenue !

    Sans vouloir te froisser, il y a pas mal d'autres problèmes dans ton programme.

    J'imagine que le but est de déclarer i et t avec des valeurs bien définies au départ du programme. Pour faire cela, il faut déclarer non pas des variables mais bien des constantes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    var a : integer;
        b : integer;
    const i : integer = 1;
          t : array[1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);
    En vrac, les autres problèmes concernent :

    - Le writeln : tu dois afficher alternativement des chaînes de caractères et des variables. Il faut séparer tout cela par des virgules et encadrer les chaînes par des apostrophes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    writeln('ce jour est le',b,'/',i,'/',a);
    - Le while intégré dans la boucle if then else : tu dois insérer un begin...end :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (((a mod 4=0) and (a mod 100<>0)) and (a mod 400=0)) then
      begin
        t[2]:=29;
        while b>t[i]do
          b:= b-t[i]
      end
    else
      writeln('ce jour est le',b,'/',i,'/',a);
    Tant que tu y es, vérifie les parenthèses de ton test.

    - Pour terminer, ton programme ne fonctionne pas correctement : ton i ne change pas de valeur et tu l'affiches comme mois. Je te laisse revoir la logique du traitement.

    Surtout ne te décourage pas, le mieux est de commencer par écrire un pseudocode sur papier avant de le traduire en Pascal.
    Règles du forum
    Cours et tutoriels Pascal, Delphi, Lazarus et Assembleur
    Avant de poser une question, consultez les FAQ Pascal, Delphi, Lazarus et Assembleur
    Mes tutoriels et sources Pascal

    Le problème en ce bas monde est que les imbéciles sont sûrs d'eux et fiers comme des coqs de basse cour, alors que les gens intelligents sont emplis de doute. [Bertrand Russell]
    La tolérance atteindra un tel niveau que les personnes intelligentes seront interdites de toute réflexion afin de ne pas offenser les imbéciles. [Fiodor Mikhaïlovitch Dostoïevski]

  3. #3
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Par défaut
    Je m'en doutais qu'il devais y avoir d'autres problemes..je debute ...surtout que le cours n'est pas très clair ..je vais plus me baser sur ce qui est mit en ligne ici

    Je vérifie donc tout ca et merci

    EDIT:
    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
    program numerojourdate;
     
    var a : integer;
        b : integer;
    const i : integer = 1;
          t : array[1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);
    begin;
    write('Entrez une année:'); 
    readln(a); 
    write('Entrez un numero pour la date du jour a calculer:'); 
    readln(b); 
    if (((a mod 4=0) and (a mod 100<>0)) and (a mod 400=0)) then
      begin
        t[2]:=29;
        while b>t[i]do
          b:= b-t[i];
          i:=i+1 ;
      end
    else 
    writeln('ce jour est le',b,'/',i,'/',a);
    end.
    ca , ca devrais fonctionner non? merci

  4. #4
    Membre confirmé Avatar de Nicomart
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    205
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 205
    Par défaut
    Salut,

    cela fait déja deux ans que je n'ai pas touché au Pascal, mais je ne pense pas que ça va fonctionner :

    -> Le ; derrière le premier begin me semble louche
    -> si tu incrémentes i dans le programme, je pense qu'il vaut mieux le déclarer en "var".

    Enfin, même si lorsque ton programme sera syntaxiquement correct, cela ne veut pas dire qu'il aura forcément le comportement attendu

  5. #5
    Futur Membre du Club
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 3
    Par défaut
    Non, ca ne fonctionnais effectivement pas , la version finale du programme est celle ci-dessous en fait, j'ai finallement réussi a la faire fonctionner... et a comprendre quelques principes du langage ...

    Merci a tous

    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
      program numerojourdate;
     
    var
                a : integer;
                b : integer;
                i : integer;
    const
                t : array[1..12] of integer = (31,28,31,30,31,30,31,31,30,31,30,31);
     
    begin
       write('Entrez une année:');
       readln(a);
       write('Entrez un numero pour la date du jour a calculer:');
       readln(b);
       i:=1;
       if (((a mod 4=0) and (a mod 100<>0)) or (a mod 400=0))then
                   begin
                   t[2]:=29
                   end;
    while (b>t[i]) do
          begin
          if b>t[i] then
                    begin
                    b:= b-t[i]
                    end;
          i:=i+1
          end;
    writeln('ce jour est le ',b,'/',i,'/',a,'');
    end.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    23
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 23
    Par défaut pour la beauté du code...
    salut,

    lorsque dans un then tu n'as qu'une seule instruction,tu peux te passer du begin et du end. Par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (((a mod 4=0) and (a mod 100<>0)) or (a mod 400=0)) then
      begin
        t[2]:=29
      end;
    devient
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if (((a mod 4=0) and (a mod 100<>0)) or (a mod 400=0)) then t[2]:=29;
    sans oublier le ; final.

    De la même manière on peut écrire dans le while:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if b>t[i] then b:= b-t[i];
    là aussi sans oublier le ; qui clôture le if.

    vàlà...

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

Discussions similaires

  1. Problème de syntaxe - elements['x'].value
    Par Equus dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 22/02/2005, 11h22
  2. [Interbase] Problème de syntaxe SQL
    Par navis84 dans le forum InterBase
    Réponses: 4
    Dernier message: 22/12/2004, 17h07
  3. Problème de syntaxe
    Par Mister_FX dans le forum ASP
    Réponses: 5
    Dernier message: 30/06/2004, 10h01
  4. Problème de syntaxe ADO ...
    Par bendev dans le forum ASP
    Réponses: 2
    Dernier message: 15/04/2004, 14h38
  5. Réponses: 2
    Dernier message: 08/03/2004, 15h10

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