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]Point virgule


Sujet :

Langage Pascal

  1. #1
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut [LG]Point virgule
    jai lhabitude, de compiler en toute sorte de langage, et le ; est de rigeur.
    je sais qu'en pascal aussi, mais une amie qui passe son partiel demain(donc c urgent) vient de voir dans son cours une phrase qui l'intrigue et moi de meme.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if a<b then writeln(a)(ne pas mettre de ;)
    pourquoi ne pas mettre de ; alors que cest une execution.

    estce normal, ou sinon mexpliquer pourquoi. merci
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  2. #2
    HRS
    HRS est déconnecté
    Membre confirmé
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    677
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 677
    Points : 638
    Points
    638
    Par défaut
    parce que derrière, il y a un ELSE

    par conséquent, ce qui précède le ELSE n'a pas de ;

    tout comme

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    if condition then begin
       action1;
       action2;
       end
    else
       ....
    il n'y a pas de ; derrière le END

    cela fait partie des incohérences du Pascal. A prendre avec philosophie.

  3. #3
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    pas bete jaurais du y penser, mais en meme temps, le else ne semble pas obligatoire.
    je pourrai demander un nom et si cest bob, alors ca lance une fonction speciale mais ca continue le programme quand meme apres.

    enfin, bon, t'es programmateur en pascal alors je me range sous ton avis.

    merci bcp
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Le bloc if...then...else est considéré comme une seule instruction, donc il ne doit pas y avoir de ; dedans !! Par contre, comme le else n'est pas obligatoire alors le bloc if...then est aussi une instruction qui doit se terminer par un ;
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  5. #5
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    bah oui mais nan!! d'ou mon post. et en testant sur tubo pascal 7, il merde si je met le ; apres le if then
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  6. #6
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut [resolu]reincomprehension
    voici un code qui ne marche pas, et je connais pas vraiment le pascal mais cela me semble correct quand meme

    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
    Var nombre, note, max, min, somme, moyenne : integer ;
     
          BEGIN
               Writeln (‘Combien de notes voulez-vous entrer ?’) ;
               Readln (nombre) ;
         REPEAT
              Writeln (‘Entrez une note’) ;
               Readln (note) ;
                      If      note >= max    then   max := note (*(avec ou sans;)*)
                  Else if   note <= min    then   min := note;
               Somme := somme + note ;   
               Inc(i);
         UNTIL (i = nombre) ;
          Moyenne := somme / nombre ;
          Writeln( moyenne);
          Readln ;
          END.
    bref il sort erreur 26 type mismatch sur la ligne du until
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  7. #7
    Inactif
    Inscrit en
    Avril 2003
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 42
    Points : 47
    Points
    47
    Par défaut Re: reincomprehension
    Citation Envoyé par pharaonix
    voici un code qui ne marche pas, et je connais pas vraiment le pascal mais cela me semble correct quand meme

    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
    Var nombre, note, max, min, somme, moyenne : integer ;
     
          BEGIN
               Writeln (‘Combien de notes voulez-vous entrer ?’) ;
               Readln (nombre) ;
         REPEAT
              Writeln (‘Entrez une note’) ;
               Readln (note) ;
                      If      note >= max    then   max := note (*(avec ou sans;)*)
                  Else if   note <= min    then   min := note;
               Somme := somme + note ;   
               Inc(i);
         UNTIL (i = nombre) ;
          Moyenne := somme / nombre ;
          Writeln( moyenne);
          Readln ;
          END.
    bref il sort erreur 26 type mismatch sur la ligne du until
    Il manque pas une initialisation de I quelque part ????
    Je sais que je ne sais rien...... Mais ça change tous les jours....
    Roi du "REPOST dans les dents" !
    Pensez au tag [Résolu] : cliquez sur le lien en bas de page

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Ben justement parce qu'il y a un else après le then !!
    Si il n'y a pas de else, le bloc if..then se comporte comme une instruction, donc ; à la fin.
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 464
    Points : 4 311
    Points
    4 311
    Par défaut
    Il manque surtout la déclaration de i en tant qu'integer...
    a+
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  10. #10
    Inactif
    Inscrit en
    Avril 2003
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 42
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par wormful_sickfoot
    Il manque surtout la déclaration de i en tant qu'integer...
    a+
    Oui... Aussi !
    Je sais que je ne sais rien...... Mais ça change tous les jours....
    Roi du "REPOST dans les dents" !
    Pensez au tag [Résolu] : cliquez sur le lien en bas de page

  11. #11
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    merde je lai oublié, mais non plus, la personne atesté aussi et le i mis en integer ne change rien. donc ntore incomprehension
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  12. #12
    Inactif
    Inscrit en
    Avril 2003
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 42
    Points : 47
    Points
    47
    Par défaut
    Citation Envoyé par pharaonix
    merde je lai oublié, mais non plus, la personne atesté aussi et le i mis en integer ne change rien. donc ntore incomprehension
    Et l'initialisation ?
    Je sais que je ne sais rien...... Mais ça change tous les jours....
    Roi du "REPOST dans les dents" !
    Pensez au tag [Résolu] : cliquez sur le lien en bas de page

  13. #13
    HRS
    HRS est déconnecté
    Membre confirmé
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    677
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 677
    Points : 638
    Points
    638
    Par défaut
    Outre l'absence de déclaration de i, le caractère bornant vos litteraux

    ‘Combien de notes voulez-vous entrer ?’

    et

    ‘Entrez une note’

    n'est pas un ' (sur la touche 4 en haut du clavier)
    -------------
    de plus remplacez

    Moyenne := somme / nombre ;

    par

    Moyenne := somme div nombre ; (* division entière *)
    -------------
    enfin pour une exécution correcte, initialisez i, min, max

    --------------------
    PS : avertissement du modérateur

    vous ne devez pas créer un nouveau message quand c'est la continuation
    du précédent; j'ai verrouillé ce dernier pour éviter la dispersion.

  14. #14
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    desolé pour le deuxieme post mais a lorigine, cest deux personne differentes et deux problemes differents meme si un partie du code ressemble, donc je lai posé a coté.

    par contre, je vienx dapprendre que si on n'itialise pas les variables, ca peut bugger. merci

    je pense en effet que lerreur venait la ligne moyanne a cause du type mismatch. je lui ferai parvenir. merci de sa part
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2003
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2003
    Messages : 52
    Points : 75
    Points
    75
    Par défaut
    D'accord avec tous les bons conseils ci-dessus.

    Sauf que d'un strict point de vue mathématique, il me semble qu'il vaut mieux laisser la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Moyenne := somme / nombre ;
    Mais remplacer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Var nombre, note, max, min, somme, moyenne : integer ;
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Var nombre, note, max, min, somme : integer ; 
        moyenne : real;
    Car la moyenne d'entiers n'est pas forcément un entier. La moyenne de 2 et 5 est 2,5 et non 2.

  16. #16
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    Avec Writeln, tu envois sur l'écran, une ligne de caractère PLUS le code du retour chariot (#13+#10).
    Le Readln qui le suit, intercepte ce retour chariot, comme si tu l'avais tapé au clavier...
    Donc, tes Readln sont inefficaces! -> 2 solutions:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Writeln('blablabla');
    Repeat Until(Keypressed); 
    Readln;
    Et l'autre solution (plus simple):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Write('blablabla'+#13);
    Readln;
    De retour parmis vous après 10 ans!!

  17. #17
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Points : 28 252
    Points
    28 252
    Par défaut
    merci sub0, japprend encore un truc. mais, je ne vois pas pourquoi il intercepte ce retour chariot. dans les autres langages, tu peux mettres ton \n dans la phrase que tu sors a lecran et ton getch suivant ne le prendra pas pour autant
    moi c'est Louis-Guillaume, ni Louis, ni Guillaume mais Louis-Guillaume et je n'aide pas ceux qui écorchent mon nom

  18. #18
    Expert confirmé
    Avatar de Sub0
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2002
    Messages
    3 573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    Points : 4 219
    Points
    4 219
    Par défaut
    Salut!

    Readln intercepte le retout chariot de Writeln. L'explication est toute simple: Writeln a pour fonction d'écrire une ligne complète de caractère, en passant le curseur à la ligne. Si les concepteurs de Pascal l'ont fait ainsi, je crois que c'est parce-qu'il existe aussi une autre fonction pour les autres cas -> Write - Avec Write('blablabla'+#13), le curseur sera en bout de ligne, mais ne sera pas à la ligne, c'est toute la différence! Difficile d'être plus clair! Avec d'autres languages, tu avais une option, et ben là c'est un peu pareil, ya 2 options avec la procédure WRITE: #13 et #13+#10. Quand à Readln, il passe la main dès que la touche Entrée est appuyée. Dans les autres cas, il existe la fonction Read, à+

    WRITE(#13+#10) == WRITELN
    De retour parmis vous après 10 ans!!

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

Discussions similaires

  1. [VBA-E] Convertir données separées par point virgule
    Par Elstak dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 31/01/2018, 12h05
  2. [CSV] Problème avec CSV et point virgules
    Par Lotz dans le forum Langage
    Réponses: 6
    Dernier message: 09/03/2006, 15h11
  3. [xhtml] représenter le point virgule
    Par nmujdzic dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 18/05/2005, 21h51
  4. [FLASH MX] Problème de point virgule
    Par noarno dans le forum Flash
    Réponses: 4
    Dernier message: 20/07/2004, 15h24
  5. lire le point-virgule dans un fichier .ini
    Par juflata dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 05/07/2004, 12h46

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