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

Algorithmes et structures de données Discussion :

Délocalisation de variable (Charge du stack)


Sujet :

Algorithmes et structures de données

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Août 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2009
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Délocalisation de variable (Charge du stack)
    Bonjour,

    Je dois indiquer, lors d'un exercice, si je peux "délocaliser" une variable "k" sans modifier l'effet de la procédure.

    En réécrivant le code, j'ai trouvé si je peux ou pas. Dans mon cas, je NE PEUX PAS. Lors de la délocalisation de celle-ci, le résultat obtenu change.

    MAIS, je ne sais pas expliquer pourquoi ... Comment peut-on expliquer ceci ?

    voici mon bout de code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    	PROCEDURE CadreF1 (n: INTEGER): INTEGER;
    		PROCEDURE F1 (n: INTEGER): INTEGER;
    		VAR
    			k: INTEGER ; 	
    		BEGIN (*F1*)
    			IF n <= 1 THEN RETURN n END;
    			k := n - 2; 
    			RETURN F1(n-1) + F1(k)		
    		END F1;
    	BEGIN (*CadreF1*)
    		RETURN F1(n)
    	END CadreF1;

  2. #2
    Rédacteur
    Avatar de pseudocode
    Homme Profil pro
    Architecte système
    Inscrit en
    Décembre 2006
    Messages
    10 062
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Architecte système
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2006
    Messages : 10 062
    Points : 16 081
    Points
    16 081
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    k := n - 2; 
    RETURN F1(n-1) + F1(k)
    Avec une variable locale, le code est équivalent à

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    RETURN F1(n-1) + F1(n-2)
    Avec une variable non locale, on ne connait pas le valeur de "k" au moment de l'appel de F1(k) car l'appel de F1(n-1) à modifié cette valeur.

    C'est plus parlant si on réécrit le code comme cela:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    k := n - 2;  // ici, on affecte la valeur k
    F1a := F1(n-1)  // ici, la fonction F1() va modifier la valeur de k
    F1b := F1(k) // ici, on ne sait plus combien vaut k
    Sum :=  F1a + F1b
    RETURN Sum
    ALGORITHME (n.m.): Méthode complexe de résolution d'un problème simple.

Discussions similaires

  1. Accéder à un attribut d'une variable de la stack
    Par elendril dans le forum Struts 2
    Réponses: 1
    Dernier message: 18/06/2013, 02h03
  2. Liste variables chargées
    Par arnaudTHE dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/03/2013, 13h44
  3. PB Open.windows + prise en charge espace dans variable
    Par vanvan34 dans le forum Langage
    Réponses: 2
    Dernier message: 01/08/2006, 10h55
  4. problème "stack arround variable .. corrupted"
    Par FOX19881 dans le forum C++
    Réponses: 7
    Dernier message: 15/07/2006, 18h16
  5. Stack around the variable was corrupted
    Par tsp dans le forum C++
    Réponses: 8
    Dernier message: 05/04/2006, 16h54

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