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 :

Appel d'une procédure dans une autre procédure


Sujet :

Langage Pascal

  1. #1
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Points : 25
    Points
    25
    Par défaut Appel d'une procédure dans une autre procédure
    Salut,

    J'aimerais savoir comment appeler une procédure ,qui se trouve dans une autre procédure, dans le programme principale comme l'exemple de la procédure afficher dans ce code.
    Merci d'avance pour vos réponses.
    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
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
     
    program traitement;
    uses wincrt;
    type
        tab=array [1..1000]of integer;
    var
        v,t:tab;
        i,p,n:integer;
     
          procedure saisir_taille(var n :integer);
            begin
               repeat
                    writeln('donner la taille du tableau:');
                    readln(n);
               until n in [5..30];
     
            end;
          procedure remplir_tab (var t:tab ; n: integer);
            begin
                    for i:=1 to n do
                            begin
                                    repeat
                                            t[i]:=random (1001);
                                    until t[i]<>0;
                            end;
            end;
            procedure saisir_position(var p:integer;n:integer);
                    begin
                         repeat
                            writeln('donner une position:');
                            readln(p);
                         until p in[1..n];
                    end;
     
            procedure affichage(t:tab ; p:integer ;n:integer);
                var
                   s,k,i,s1:integer;
                    begin
                            s:=0;
                            k:=1;
                           for i:= p-1 downto 1 do
                               begin
     
                                           s:=s+t[i];
                                           if s <= t[p] then
                                               begin
     
                                                 v[k]:= t[i];
                                                 k:=k+1;
                                                 s1:=s1+t[i];
                                               end;
                               end;
                                                 if s1= t[p] then
                                                    begin
                                                                                                                                                                                                                                                                                 procedure afficher(v:tab;k:integer);
                                                       begin     
                                                             for i:=1 to k do
                                                             begin
                                                                  writeln(v[i]);                                                                                                                                            
                                                              end;    
                                                        end;
                                                   end
                                                   else
                                                     begin
                                                         writeln('condition non verifiee');
                                                     end;
     
     
                    end;
    begin
        saisir_taille(n);
        remplir_tab(t,n);
        saisir_position(p,n);
        affichage(v,n,p);
    end.

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

    C'est impossible.

    Une procédure interne à une autre est isolée du reste du programme, c'est le but visé.
    Si les cons volaient, il ferait nuit à midi.

  3. #3
    Nouveau membre du Club
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Points : 25
    Points
    25
    Par défaut
    Merci pour votre réponse.
    Alors je ne comprends pas pourquoi mon programme ne s'exécute pas.
    Aidez moi SVP

  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
    Ca veut dire quoi "il ne s'execute pas" ? Il ne compile pas ? l'exécution donne un mauvais résultat ?

    Merci d'être plus précis, et d'indenter correctement ton code aussi, ca aide bien...
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  5. #5
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par droggo Voir le message
    Coa,

    C'est impossible.

    Une procédure interne à une autre est isolée du reste du programme, c'est le but visé.
    +1
    Aussi, personnellement je déconseille l'utilisation des procédures ou fonctions internes. Ceci pour plusieurs raisons : d'abord pour avoir un code bien propre, et pour éviter des problèmes liés à la portabilité du code car certains compilateurs pascal n'accepte pas les procedures internes.

  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
    Vai,
    Citation Envoyé par darrylsite Voir le message
    +1
    Aussi, personnellement je déconseille l'utilisation des procédures ou fonctions internes. Ceci pour plusieurs raisons : d'abord pour avoir un code bien propre,
    Point de vue.

    Moi, j'appréciais beaucoup de pourvoir découper une procédure en un enchaînement d'appels, pour rendre la suite des opérations plus claire (comme on le fait après tout pour le programme principal, qui appelle des procédures ... ).

    Citation Envoyé par darrylsite Voir le message
    pour éviter des problèmes liés à la portabilité du code car certains compilateurs pascal n'accepte pas les procedures internes.
    Alors ces compilateurs ne sont pas standards, car cette possibilité existe dans la grammaire basique du langage, depuis sa création. Mais peut-être n'est-ce qu'une question d'option ?
    Si les cons volaient, il ferait nuit à midi.

  7. #7
    Rédacteur
    Avatar de darrylsite
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 299
    Points : 2 501
    Points
    2 501
    Par défaut
    Citation Envoyé par droggo Voir le message
    Vai,

    Point de vue.

    Moi, j'appréciais beaucoup de pourvoir découper une procédure en un enchaînement d'appels, pour rendre la suite des opérations plus claire (comme on le fait après tout pour le programme principal, qui appelle des procédures ... ).
    Biensur, mais autant faire des procedures independantes. De plus, ça empeche de faire du code réutilisable puisqu'avec les procedure imbriquées, on sera amené à utiliser des variables globales de la procedure mere.
    Alors ces compilateurs ne sont pas standards, car cette possibilité existe dans la grammaire basique du langage, depuis sa création. Mais peut-être n'est-ce qu'une question d'option ?
    Oui, peut etre bien. J'ai travaillé tout recemment sur un systeme à microcontroleur, qui offre la possibilté de programmer en pascal. Le pascal est assez bien supporté mais les procedures internes à une autre ne peuvent etre utilisées vu que le code sera traduit ensuite en C.
    Et le nombre de ces outils, qui traduisent le pascal vers un autre langage, va en grandissant.
    Alors la question que je me pose est si on doit ecrire un programme pour etre executer uniquement sur l'outil qu'on utilise ou on doit l'ecrire pour qu'il fonctionne sur la majorité des platformes.

  8. #8
    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
    Bie,
    Citation Envoyé par darrylsite Voir le message
    Biensur, mais autant faire des procedures independantes. De plus, ça empeche de faire du code réutilisable puisqu'avec les procedure imbriquées, on sera amené à utiliser des variables globales de la procedure mere.
    Pas plus que tu n'es obligé d'utiliser des variables globales pour ton programme.

    Et le but est de structurer le code.

    Citation Envoyé par darrylsite Voir le message
    Oui, peut etre bien. J'ai travaillé tout recemment sur un systeme à microcontroleur, qui offre la possibilté de programmer en pascal. Le pascal est assez bien supporté mais les procedures internes à une autre ne peuvent etre utilisées vu que le code sera traduit ensuite en C.
    Et le nombre de ces outils, qui traduisent le pascal vers un autre langage, va en grandissant.
    Alors la question que je me pose est si on doit ecrire un programme pour etre executer uniquement sur l'outil qu'on utilise ou on doit l'ecrire pour qu'il fonctionne sur la majorité des platformes.
    Pour moi, un langage doit être utilisé en fonction de sa définition, et il faut profiter des possibilités qu'il offre.

    Les outils dont tu parles ne sont pas des compilateurs Pascal, mais des traducteurs.
    Et dans ce cas, il vaut mieux travailler directement dans le langage final, le C en l'occurrence, dans ton cas.
    Si les cons volaient, il ferait nuit à midi.

Discussions similaires

  1. [Toutes versions] coller les données d'une plage d'une cellule dans une cellule d'une autre feuille[VBA]
    Par arthson dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 24/01/2012, 17h37
  2. Réponses: 7
    Dernier message: 25/03/2011, 10h52
  3. Réponses: 4
    Dernier message: 15/10/2009, 13h33
  4. [XL-2007] Afficher une checkbox dans une feuille si une checkbox d'une autre feuille est cochée
    Par JessieCoutas dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/08/2009, 13h35
  5. Recherche une valeur d'une cellule dans une colonne d'une autre feuille
    Par kourria dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 21/06/2007, 13h48

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