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 :

Récup d'une variable globale apres une procedure l'utilisant


Sujet :

Langage Pascal

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Récup d'une variable globale apres une procedure l'utilisant
    Bonsoir bonsoir..

    j'aimerais savoir comment faire pour garder la valeur d'une variable globale utilisée dans une procédure.

    je m'explique: j'initialise une variable x au début de mon prog et je crée une procédure nécéssitant la valeur d'une variable éxtérieure, ici, ma variable x ( procédure ma_proc (var1:type), puis je l'utilise dans le prog principal ma_proc(x); ). En fait, j'ai créé une procédure qui modifie la valeur de x, et cette valeur, j'aimerais bien la récuperer dans mon prog principal, apres l'execution de cette procédure..

    merci bien d'av,

    +

  2. #2
    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
    Hé bien, après l'appel à ta_proc(x) , x aura la valeur que ta_proc() lui a assignée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    x := 1;
    ta_proc(x);  { ta_proc() multipliue le paramètre par 2 }
    ...
     
    { ici x vaut 2 et non plus 1 }
    M.Dlb - Modérateur z/OS - Rédacteur et Modérateur Pascal

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    oui mais non en fait, .. je pensais que ça fonctionnait comme cela aussi, ça me paraissait effectivement tres logique aussi.. mais ça fonctionne pas ^^ .. j'ai peut-être fais une bête erreur dans mon script mais je ne pense pas, l'ayant relu qques fois avec attention...

    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
    Program cryptage;
    uses crt;
    var word1,code1 : string;
        i : integer;
        char_ : char;
    const alpha=['a'..'z'];
          num=['0'..'9'];
    procedure enterword(word0:string);
    	 begin
    	      word0:='';
    	      repeat
    	  	    char_:=readkey;
    	  	    if char_ in alpha then begin
    	  	      write(char_);
    	  	      word0:=word0+char_;
    	  	    end;
    	      until (ord(char_)=13) and (word0<>'');
    	      writeln(word0);
    	end;
    procedure entercode(word0,code0:string);
             begin 
                  code0:='';
                  for i:=1 to length(word0) do begin
                     repeat 
                           char_:=readkey;
                     until char_ in num;
                     write(char_);
                     code0:=code0+char_;
                  end;
                  writeln;
             end;
    Begin
         clrscr;
         writeln(word1);
         writeln('enterword');
         enterword(word1);
         writeln(word1);
         writeln('entercode');
         entercode(word1,code1);
         readkey;
    End.
    voilou c'est un simple début de prog, j'ai mis qques writeln pour être sur que c'était éffectivement ce que j'ai expliqué le problème: càd que ma varible word1 est toujours vide apres l'execution de ma proc enterword..

    so...

  4. #4
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    Evidement!
    la routine ne enterword déclare pas son paramètre comme variable. Elle restitue donc sa valeur d'origine en sortie!
    il faut déclarer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    procédure enterword(var word0:string);
    ou alors utiliser le variable globale dans enterword sans paramètre
    on change alors la variable globale en y faisant un accès directe

  5. #5
    Membre éclairé Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Points : 770
    Points
    770
    Par défaut
    ben si 'jai bien compris tu dois simplement rajouter un 'var' devant tes variables dans l'en tetede la procédure sinon la modification n'a lieu qu'a l interieur de la procédure et les variables gardent leurs valeurs intiales en dehors ^^

    en gros le var écrase la valeur quand il y amodifcation tandis que si tu ne mets pas de var, la procedure prend une copie de la valeur des variables passées en paramètre et modifie cette copie qui est affacée a la fin dl aprocédure
    ★ Pascal/Java/C/xhtml,css/SQL/Mips
    ★ Linux/unix

  6. #6
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    hmmm, je crois comprendre ce que vous voulez dire mais en fait, le truc c'est que j'aimerais utiliser ma procédure plusieurs fois avec un nombre illimité de word possible et qu'ils puissent tous être modifié et sauvegardés..

    bon, ça je pourrais le faire avec une fonction mais avec une procédure je pourrais (si j'arrivais à faire ce que je viens de dire) modifier plusieurs variables d'un coup au lieu de ne retourner qu'une valeur grace à la fonction.

    soo..

  7. #7
    Membre éclairé Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Points : 770
    Points
    770
    Par défaut
    alors soit tu mets un var devant chaque 'word' nécéssaire
    soit tu utilises le résultat de chaque word dans la procédure meme et pas en dehors comme ca cela peut etre une vazriable locale sans var ^^
    ★ Pascal/Java/C/xhtml,css/SQL/Mips
    ★ Linux/unix

  8. #8
    Membre éclairé
    Inscrit en
    Juin 2005
    Messages
    644
    Détails du profil
    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2005
    Messages : 644
    Points : 754
    Points
    754
    Par défaut
    C'EST FACILE !!!
    par exemple le code suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var t : textfile;
    Procedure lire_n_lignes( n : integer);
    var i : integer; s : string;
       begin
       for i:=1 to n do 
          readln(t ,s);
       end;
    begin
    assign(t,'my_file.txt');
    reset(t);
    lire_n_ligne(4);
    close(t);
    end.
    On ne passe pas n comme variable : Cela devient un "paramètre " de la routine appelée. Le compilateur va créer en local un integer qu'il va charger avec la valeur n et ne va par toucher à la valeur de l'appelant. Cela permet de passer des valeurs sans variable comme dans cet exemple 4. On aurait pu aussi déclarer un integer j faire j:=4; et appeler lit_n_ligbes(j);

    par contre le code suivant

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    var t : textfile;
    Procedure lit_string( var S : string );
       begin
       readln(t,s);
       end;
    var Name : String;
    begin
    assign(t,'My_file.txt');
    reset(t);
    lit_string(Name);
     
    close(t);
    end.
    permet d'accéder à Name depuis l'appelant.
    Ici il serait impossible d'utiliser lit_string('toto');
    le compilateur réclame que la variable soit décrite ailleurs et, à travers l'information "var" on passe à la routine l'adresse où il faut écrire le résultat dans le codage correspondant au type, record, ... de la variable.
    Ici il n'y a plus création d'un buffer dans la routine appelée mais accès direct via l'adresse transmise à la variable. Cela implique qu'elle sera changée.
    On a la même philosophie en C. Pour changer une valeur il faut la passer via un pointer, si non cela devient un paramètre de la routine appelée et sa valeur n'est pas affectée en retour

  9. #9
    Membre éclairé Avatar de Tuxico
    Profil pro
    Étudiant
    Inscrit en
    Août 2003
    Messages
    662
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2003
    Messages : 662
    Points : 770
    Points
    770
    Par défaut
    waip c'est ce que je disais en plus complet
    ★ Pascal/Java/C/xhtml,css/SQL/Mips
    ★ Linux/unix

  10. #10
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    6
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    merci à vous !

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

Discussions similaires

  1. Réponses: 15
    Dernier message: 27/03/2009, 13h37
  2. Réponses: 3
    Dernier message: 20/03/2009, 15h44
  3. Accéder à une variable globale d'une DLL
    Par eric_marciano dans le forum Windows
    Réponses: 4
    Dernier message: 07/08/2008, 16h09
  4. Créer une variable globale après un window.opener
    Par renaud26 dans le forum Général JavaScript
    Réponses: 16
    Dernier message: 29/08/2006, 10h49
  5. Réponses: 11
    Dernier message: 08/02/2006, 16h59

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