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

  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
    Points : 2
    Points
    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 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    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.
    Si les cons volaient, il ferait nuit à midi.

  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
    Points : 2
    Points
    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 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    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...
    Si les cons volaient, il ferait nuit à midi.

  5. #5
    Membre confirmé
    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
    Points : 567
    Points
    567
    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 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    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.
    Si les cons volaient, il ferait nuit à midi.

  7. #7
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    il ya une faute de déclaration du nouvau type du tableau.
    La faute est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Var V array [1..50] of Integer;
    Il faut déclarer le nouveau type comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    type v=array[1..50]of integer;
    Je te conseille de partager ton programme en modules (procédures, fonctions)

  8. #8
    Expert confirmé
    Avatar de krachik
    Inscrit en
    Décembre 2004
    Messages
    1 964
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 964
    Points : 4 015
    Points
    4 015
    Par défaut
    Bonjour
    Citation Envoyé par aymenet1
    il ya une faute de declaration du nouvau type du tableau
    la faute est :
    Var V array [1..50] of Integer;
    ça été deja soulevé sauf qu'il ne demandais pas de creer un type
    et pendant qu'on y est je pourrais ajouter aussi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Const nbElt=50;
    Var V :array [1..nbElt] of Integer;
    Citation Envoyé par aymenet1
    d'abord il faut saisir k
    il faut savoir ce donne parle l'exercice
    =aymenet1je te conseille de partager ton programme en modules (procedures , fonctions )
    d'accord avec toi meme vu la taille du code pas tres utile mais c'est une bonne habitude à prendre
    @+
    Je suis ce que je suis grâce à ce que nous sommes tous Humanité aux Humains!! !

    Entre ce que je pense, ce que je veux dire, ce que je crois dire, ce que je dis ce que vous avez envie d'entendre, ce que vous croyez entendre, ce que vous entendez, ce que vous avez envie de comprendre, ce que vous comprenez ... Il y a dix possibilités que nous ayons des difficultés à communiquer. Mais essayons quand meme ....... E. Wells

  9. #9
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    je vous donne la resultat finale de ton programme ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    program vecteur ;
    uses wincrt ;
    var t:array[1..50]of integer ;
    var k:integer;
    begin 
    for k:=1 to 50 do 
    begin
    t[k]:=sqr(k);
    write(t[k],' '); {on affiche les valeurs separés par un espace et en meme ligne c'est plus beau comme ça ^^ }
    end;                
    end.

  10. #10
    Membre à l'essai
    Inscrit en
    Novembre 2007
    Messages
    23
    Détails du profil
    Informations forums :
    Inscription : Novembre 2007
    Messages : 23
    Points : 19
    Points
    19
    Par défaut
    Citation Envoyé par krachik Voir le message
    Bonjour

    Envoyé par aymenet1
    d'abord il faut saisir k
    il faut savoir ce donne parle l'exercice
    @+
    vous avez raison lol j'ai dis des choses tres stupides xD merci bcp j'ai pas bien lu l'exercice et j'ai fait ça aussi dans un devoir de programmation j'ai perdu 7 points dans le premier execices

  11. #11
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Lio,
    Citation Envoyé par aymenet1 Voir le message
    je vous donne la resultat finale de ton programme ^^
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    program vecteur ;
    uses wincrt ;
    var t:array[1..50]of integer ;
    var k:integer;
    begin 
    for k:=1 to 50 do 
    begin
    t[k]:=sqr(k);
    write(t[k],' '); {on affiche les valeurs separés par un espace et en meme ligne c'est plus beau comme ça ^^ }
    end;                
    end.
    Pourquoi poster ce code ?

    À part l'utilisation de sqr au lieu d'une multiplication, c'est le même que celui d'origine, en y ajoutant le défaut du manque de clarté dû à la non-indentation.
    Si les cons volaient, il ferait nuit à midi.

+ 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