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

Turbo Pascal Discussion :

[TP] Petit problème sur programme simple d'affichage de vecteur


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 2
    Par défaut [TP] Petit problème sur programme simple d'affichage de vecteur
    Bonjour, j'ai créé un programme simple permettant d'initialiser et d'afficher un vecteur de 50 éléments de façon à ce que chaque élément contienne son rang élevé à la puissance 2.

    J'ai écrit le programme suivant sous turbopascal7 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    program puissance;
     
    Var V array [1..50] of Integer;
    Var K : Integer;
     
     Begin
           For K:=1 to 50 do
               Begin
               V[K]=K*K;
               write(V[K])
               End;
    End.
    La compilation fonctionne mais rien ne s'affiche (et le programme m'est inutile). Sauriez-vous d'où vient l'erreur ?

  2. #2
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 968
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 968
    Par défaut
    Hio,

    En soi, le programme est ok.

    Le problème est que tu n'as pas le temps de voir l'affichage.

    Ajoute un ReadLn à la fin, juste avant le End.

    De plus, en utilisant seulement un write comme tu le fais, les valeurs vont s'écrire les unes à la suite des autres, sans rien pour les séparer.
    Autrement dit, ce sera absolument illisible.
    WriteLn est mieux.

    Et il est inutile de répéter le mot-clé Var.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    program puissance;
     
    Var V array [1..50] of Integer;
        K : Integer;
     
    Begin
      For K:=1 to 50 do
      Begin
        V[K]=K*K;
        WriteLn(V[K])
      End;
     
      ReadLn;
    End.
    Et apprends à indenter ton code, tu verras que c'est vraiment utile.

    Tel qu'il est écrit, l'utilisation d'un tableau dans ce programme est totalement superflue. Pour la justifier, il faudrait par exemple créer des procédures ou fonctions qui permettent de remplir ce tableau d'une part, et de l'afficher d'autre part.

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 2
    Par défaut
    Merci beaucoup, j'apprend quelque chose de très utile ! Je programme en pascal depuis peu et j'ignorais totalement ça, mais quelle est la différence entre readln et read (entre writeln et write), c'est seulement une histoire de lisibilité ?
    Finalement il est nécéssaire de toujours ajouter un readln avant la fin du programme lorsqu'on veut afficher quelque chose ?
    Merci encore

  4. #4
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 968
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 968
    Par défaut
    Jio,

    - Read et ReadLn : Read est très fortement déconseillé quand on lit des valeurs au clavier.
    En dehors de ce problème, la différence principale est que ReadLn va lire jusqu'à réception d'un retour chariot (la touche "Enter" ou "Entrée"...).

    - Write et WriteLn : WriteLn ajoute un saut de ligne, c'est à dire que la prochaine opération d'écriture s'effectuera sur la ligne suivante.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ...
    Write('hello ');
    Write('World !');
     
    WriteLn ; { pour aller à la ligne suivante }
    WriteLn ; { pour sauter une ligne }
     
    WriteLn('hello ');
    WriteLn('World !');
    donnera pour résultat:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    hello World !
     
    hello 
    World !
    - ReadLn à la fin du code n'est vraiment nécessaire que quand on exécute le programme depuis le système de développement (TP7).
    Si on le lance depuis une console MSDOS, il n'est pas utile, mais ne gène pas, alors...

  5. #5
    Membre chevronné
    Homme Profil pro
    .
    Inscrit en
    Juin 2002
    Messages
    239
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : .
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2002
    Messages : 239
    Par défaut
    Bonjour.

    Il me semble qu'il y a au moins deux erreurs dans ce programme :

    1) Il manque un ":" dans la déclaration de la variable V.

    Il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Var V : array [1..50] of Integer;
    2) La ligne "V[K]=K*K;" est incorrecte car en Pascal "=" est l'égalité ( elle sert dans les comparaisons ) alors qu'ici il faut une affectation ( une variable reçoit une valeur ).

    Il faut écrire :
    Je m'étonne que Turbo Pascal ait compilé ce programme sans signaler ces deux erreurs.

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 968
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 968
    Par défaut
    Hui,
    Citation Envoyé par Prof Voir le message
    Bonjour.

    Il me semble qu'il y a au moins deux erreurs dans ce programme :

    1) Il manque un ":" dans la déclaration de la variable V.

    Il faut écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Var V : array [1..50] of Integer;
    2) La ligne "V[K]=K*K;" est incorrecte car en Pascal "=" est l'égalité ( elle sert dans les comparaisons ) alors qu'ici il faut une affectation ( une variable reçoit une valeur ).

    Il faut écrire :
    Je m'étonne que Turbo Pascal ait compilé ce programme sans signaler ces deux erreurs.
    Ça arrive très souvent, car le code posté ici, surtout quand il vient de TP, n'est pas issu d'un copier/coller habituel, mais d'une nouvelle frappe.

    Une autre raison est que les membres, les nouveaux surtout, ne veulent pas avouer que leur programme ne compile pas.
    Il sont nouveaux ici, et généralement débutant en programmation.
    Excusons-les donc un peu.

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

Discussions similaires

  1. Petit problème sur petit programme
    Par tamerla dans le forum Débuter avec Java
    Réponses: 7
    Dernier message: 19/01/2014, 11h32
  2. [RegEx] Petit problème sur une simple expréssion
    Par mathias59 dans le forum Langage
    Réponses: 1
    Dernier message: 30/11/2010, 10h21
  3. Réponses: 4
    Dernier message: 19/02/2006, 18h18
  4. [débutant]petit problème sur formulaire avec onglets
    Par Christophe93250 dans le forum Access
    Réponses: 2
    Dernier message: 06/01/2006, 10h46
  5. [jointure] Petit problème sur le type de jointure...
    Par SteelBox dans le forum Langage SQL
    Réponses: 13
    Dernier message: 13/02/2004, 18h55

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