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 :

Incompatibilité de l'instruction FORWARD avec l'inclusion de procédures dans une unité [Turbo Pascal]


Sujet :

Turbo Pascal

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Billets dans le blog
    9
    Par défaut Incompatibilité de l'instruction FORWARD avec l'inclusion de procédures dans une unité
    Bonjour,

    Je suis actuellement bloqué dans l'écriture d'un programme Turbo-Pascal, comportant l'enchaînement suivant de procédures :
    P1 ---> P2 ---> P3 ---> Retour; FORWARD;
    Il m'est impossible de transférer dans une unité appropriée P1 et P2, pourtant très volumineuses. Comment procéder ?

    L'appel de P3 correspond à un cas rare mais non exclu interdisant la poursuite des calculs, et permet de revenir au début du programme en évitant son plantage. Le contenu de P3 pourrait évidemment se terminer par l'instruction <Halt>, ce qui arrêterait tout.

    J'aimerais connaître les solutions, s'il en existe. Merci de m'indiquer des pistes.

  2. #2
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    Salut

    Sans nous en dire plus, difficile de savoir ce qui ne va pas ... Donne nous ton code pour voir. A mon avis, ça vient d'un problème de déclaration dans tes unités.

    Par contre, je vois 2 problèmes de conception dans ton programme :
    1) En général, une procédure ne doit pas être volumineuse, elle doit être découpée en plusieurs procedures
    2) Utiliser la fonction Halt est, je pense, une mauvaise idée. Il vaudrait mieux gérer soi-même l’arrêt du programme.

    Enfin, il serait peut être plus judicieux de passer sous un compilateur plus récent, comme FreePascal avec Lazarus ...

    Bonne chance

  3. #3
    Membre Expert

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Billets dans le blog
    9
    Par défaut TP: Incompatibilité de l'instruction FORWARD avec l'inclusion de procédures dans une unité.
    Je vous remercie des remarques que vous avez exprimées.

    Le programme principal, après l'initialisation du mode graphique et de quelques variables, se réduit à l'appel de la procédure <Choix>:
    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
     VAR Depart: BOOLEAN;
     
     PROCEDURE Choix(VAR Depart: BOOLEAN);
        VAR Touche: CHAR; CodeT: LONGINT;
        BEGIN
           REPEAT
             IF Depart THEN BEGIN
    		        Depart:= False; Touche:= '1';
    		        Menu; Ag;       P0
                                   END
                           ELSE Touche:= ReadKey;
             CASE Touche OF  #08: Menu; '0': P0;
                                     '1': Pa; '2': Pb  END   { présentation simplifiée }
           UNTIL Touche=#27;
          Ag
       END;
     
     PROCEDURE Retour;
        BEGIN
          Menu; Choix(Depart)
        END;
     
     BEGIN
       AppelModGraph(MdGr, ModeTexte); InitCentreRayon(Xcen, Ycen, Rayon);
       Depart:= True; Choix(Depart);        CloseGraph
     END.
    Je cherche à sortir de l'impasse dans laquelle me conduit l'obligation de la référence en amont: si je met <P1> dans l'unité <U>, le compilateur exige d'y trouver <P2>, puis <P3>, puis <Retour> ... et là bien sûr, rien ne va plus. Y a-t-il un moyen d'éviter l'arrêt du programme au niveau de <P3> ?
    Il y a quatre boucles imbriquées, dont 3 dans <P1> et une dans <P2>; l'appel de P3 correspond à la nécessité d'arrêter les calculs dans un cas très particulier.
    Cette partie du programme inventorie les faces et les arêtes d'un polyèdre dont les (n) sommets sont situés sur une sphère; elle fonctionne correctement pour n<=100, mais le texte est assez long, malgré l'utilisation d'une huitaine d'unités.

  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
    Il devrait y avoir une condition qui fait que toutes les boucles imbriquées sont arretées, je pense que tu connais déjà cette condition, qui correspond à l'appel à P3. Mais plutôt d'appeler P3, il faut "dépiler" ou sortir proprement de chaqe boucle imbriquée, même si c'est plus complexe à programmer. Regarder aussi du côté de l'instruction break qui peut être très pratique, de même que exit.

  5. #5
    Membre Expert

    Homme Profil pro
    Étudiant
    Inscrit en
    Juin 2009
    Messages
    935
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2009
    Messages : 935
    Par défaut
    Tout a fait d'accord avec wormful.

    Un autre conseil, dans ton programme, tu as une variable Depart globale, et un argument Depart. Il serait judicieux d'en renommer une, pour éviter les problèmes...

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 967
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 967
    Par défaut
    Soe,
    Citation Envoyé par mick605 Voir le message
    Tout a fait d'accord avec wormful.

    Un autre conseil, dans ton programme, tu as une variable Depart globale, et un argument Depart. Il serait judicieux d'en renommer une, pour éviter les problèmes...
    Et mieux encore, éviter les variables globales.

    (Je n'ai pas lu le code, et je ne sais donc pas quel en est l'usage, c'est seulement une bonne habitude à prendre [ou plus exactement, une mauvaise habitude à perdre ])

  7. #7
    Membre Expert

    Homme Profil pro
    Formation: Chimie et Physique (structure de la matière)
    Inscrit en
    Décembre 2010
    Messages
    1 333
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 78
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Formation: Chimie et Physique (structure de la matière)
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2010
    Messages : 1 333
    Billets dans le blog
    9
    Par défaut TP / Incompatibilité de l'instruction FORWARD avec l'inclusion de procédures dans une unité.
    Un grand merci à wormful_sickfoot et mick605 pour les informations données; l'instruction <break> m'avait totalement échappé; je pense qu'elle me permettra d'éviter l'appel de <FORWARD>, et ainsi de transférer 3 pages d'écran dans une unité.
    Je donne le même nom à la variable et à l'argument lorsqu'il n'intervient par la suite qu'une instruction d'affectation; l'ambiguïté de la notation peut effectivement jouer de mauvais tours, si l'on s'avise par la suite de modifier le programme, et c'est sans doute une pratique à éviter.
    La remarque de droggo, lue à l'instant, m'intrigue un peu: il faut bien un minimum de variables glogales, quoiqu'elles soient encombrantes, pour piloter le programme et contenir les résultats des calculs ... s'il y a de ce côté-là des astuces, je veux bien les connaître.
    Le programme concerné (et actuellement en chantier) utilise les variables globales suivantes: - depart (BOOLEAN);
    - Ns, Nf, Na (WORD): nombres de sommets, de faces et d'arêtes
    - LstP, LstN: listes de N et 2N vecteurs 3d pour les positions des sommets et les normales aux faces;
    - LstF: liste de 2N "faces" énumérant les sommets du polygone (8 WORD disponibles)
    - LsrA: liste de 3N "arêtes" de type RECORD comportant 4 word (indices des sommets et des normales aux faces adjacentes) et 2 réels (longueur de l'arête et angle des 2 normales).
    Ces tableaux sont, en raison de leur taille, définis dans une unité séparée. N (ici égal à 100) représente le nombre maximal de sommets, puisque l'on a
    Nf <= 2*Ns - 4 < 2*N et Na <= 3*Ns - 6 < 3*N.

    Cordiales salutations à tous les trois.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 07/05/2008, 13h30
  2. problème avec les sauts de ligne dans une string
    Par hexdoc dans le forum Langage
    Réponses: 6
    Dernier message: 02/05/2008, 15h28
  3. Inclusion de JPanel dans une JFrame
    Par greatmaster1971 dans le forum Agents de placement/Fenêtres
    Réponses: 7
    Dernier message: 04/04/2008, 23h43
  4. Problème avec ma méthode de recherche dans une JList
    Par Invité dans le forum Composants
    Réponses: 4
    Dernier message: 24/07/2007, 10h33
  5. Probleme avec plus de 50 composants dans une form
    Par dalton5 dans le forum Windows Forms
    Réponses: 7
    Dernier message: 18/02/2007, 19h23

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