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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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
    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

  2. #2
    HRS
    HRS est déconnecté
    Membre chevronné
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    678
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 678
    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
    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

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    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+

  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
    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

  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
    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

  7. #7
    Inactif
    Inscrit en
    Avril 2003
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 42
    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 ????

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    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+

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

    Informations forums :
    Inscription : Avril 2002
    Messages : 2 466
    Par défaut
    Il manque surtout la déclaration de i en tant qu'integer...
    a+

  10. #10
    Inactif
    Inscrit en
    Avril 2003
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 42
    Par défaut
    Citation Envoyé par wormful_sickfoot
    Il manque surtout la déclaration de i en tant qu'integer...
    a+
    Oui... Aussi !

  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
    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

  12. #12
    Inactif
    Inscrit en
    Avril 2003
    Messages
    42
    Détails du profil
    Informations forums :
    Inscription : Avril 2003
    Messages : 42
    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 ?

  13. #13
    HRS
    HRS est déconnecté
    Membre chevronné
    Avatar de HRS
    Inscrit en
    Mars 2002
    Messages
    678
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 678
    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
    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

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

    Informations forums :
    Inscription : Mars 2003
    Messages : 52
    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
    Membre Expert
    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 : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    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;

  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
    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

  18. #18
    Membre Expert
    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 : 52

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Décembre 2002
    Messages : 3 573
    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

+ 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