You are on page 1of 7

Tcnicas Avanzadas de Programacin

E.P.E.T N 20

MBITO DE VARIABLES
El mbito de una variable (en ingls: scope) es el contexto del programa en que ella puede ser
utilizada.
MBITOS GLOBAL Y LOCAL
Pascal tiene dos mbitos: el global y el local.
Tienen mbito local las variables locales de los subprogramas (funciones y
procedimientos). stas variables pueden ser utilizadas slo dentro del subprograma en
que fueron declaradas.
Las variables locales son:

las declaradas en la seccin var del subprograma;

los parmetros del subprograma; y que actan como variables globales

Por ejemplo, consideremos las dos siguientes declaraciones de subprogramas:


function F(a: Integer; var b: Integer): Integer;
var
c: Integer;
begin
{...}
end;
procedure P(x: Integer; var y: Integer);
var
z: Integer;
begin
{...}
end;
Las variables locales de la funcin F son: a, b, c y F. Las variables locales del procedimiento
P son: x, y y z.
Por otra parte, las variables de mbito global son las que son declaradas en la seccin var del
programa.

Tcnicas Avanzadas de Programacin

E.P.E.T N 20

Las variables globales pueden ser usadas desde cualquier parte del programa, tanto el
cuerpo del programa como dentro de las funciones.
REGLAS DE MBITO
Todos los lenguajes de programacin tienen sus propias reglas de mbito que indican qu
variables tienen preferencia en caso que haya variables con el mismo nombre en distintos
mbitos.
En Pascal, cuando hay una variable global y una local que tienen el mismo nombre, dentro del
subprograma la variable global no es visible. Esto no significa que la variable global no
exista; simplemente no es visible: todas las ocurrencias del nombre dentro del subprograma se
refieren a la variable local. Cuando el compilador busca una variable mencionada en un
subprograma busca primero entre las variables globales, luego entre los parmetros y por
ltimo en las variables globales ; es decir de lo ms cercano a lo ms lejano.
Como ejemplo, consideremos el siguiente programa:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23

program Ambitos;
var
w, x, y: Integer;
procedure P(y: Integer; z: Integer);
var
v, w: Integer;
begin
v := 5;
w := 6;
x := 7;
z := 8;
WriteLn('Dentro de P:');
WriteLn(' v = ', v);
WriteLn(' w = ', w);
WriteLn(' x = ', x);
WriteLn(' y = ', y);
WriteLn(' z = ', z);
end;
begin
2

Tcnicas Avanzadas de Programacin

24
25
26
27
28
29
30
31
32
33

E.P.E.T N 20

w := 0;
x := 1;
y := 2;
P(3, 4);
WriteLn('Fuera de P:');
WriteLn(' w = ', w);
WriteLn(' x = ', x);
WriteLn(' y = ', y);
end.

Este programa tiene tres variables globales: w, x e y. El procedimiento P tiene cuatro


variables locales: v, w, y y z.
Las asignaciones funcionan as:

En las lneas 23 a 25, se modifica slo variables globales. Las variables locales de P
no existen fuera de la funcin.

En la lnea 9, se modifica la variable local v.

En la lnea 10, se modifica la variable local w, ya que la variable global w queda


oculta.

En la lnea 11, se modifica la variable global x, ya que no hay ninguna variable local
con el mismo nombre.

En la lnea 12, se modifica la variable local z.

Al terminar la llamada al procedimiento, las variables locales dejan de existir.


La salida del programa es:
Dentro de P:
v=5
w=6
x=7
y=3
z=8
Fuera de P:
w=0
x=7
y=2
3

Tcnicas Avanzadas de Programacin

E.P.E.T N 20

Este programa tiene tres variables globales: w, x e y. El procedimiento P tiene cuatro


variables locales: v, w, y y z.
Las asignaciones funcionan as:

En las lneas 23 a 25, se modifica slo variables globales. Las variables locales de P
no existen fuera de la funcin.

En la lnea 9, se modifica la variable local v.

En la lnea 10, se modifica la variable local w, ya que la variable global w queda


oculta.

En la lnea 11, se modifica la variable global x, ya que no hay ninguna variable local
con el mismo nombre.

En la lnea 12, se modifica la variable local z.

TRABAJO PRACTICO N 4: AMBITO DE LAS VARIABLES


4

Tcnicas Avanzadas de Programacin

E.P.E.T N 20

1.-Realizar la traza de los siguientes programas; indicar en cada uno cuales son
las variables locales y cuales las globales
a.Program Prueba;
var
a,b,x,y:integer;
Procedure mezcla(var q,a:integer;b,r:integer);
var
x,z:integer;
begin
x:=3;
z:=x;
x:=x+1;
q:=q*2+a;
b:=1+z-(2*x);
writeln(q,a,b,r,x,z);
end;
begin
a:=1;
b:=2;
x:=7;
y:=11;
writeln(a,b,x,y);
mezcla(a,b,x,y);
writeln(a,b,x,y);
mezcla(a,b,x-y,y);
writeln(a,b,x,y);
end.
b) program Ambitos;
var
z, p, q: Integer;
procedure P(var y: Integer; k: Integer);
var
p: Integer;
begin
k := 5;
q := 7;
p:= 13;
y := 8+p;
WriteLn('Dentro de P:');
WriteLn(' z = ', z);
WriteLn(' p = ', p);
WriteLn(' q = ', q);
WriteLn(' y = ', y);
WriteLn(' k = ', k);
end;

Tcnicas Avanzadas de Programacin

E.P.E.T N 20

begin
z := 16;
p := 1;
q := 2;
P(z, p);
WriteLn('Fuera de P:');
WriteLn(' z = ', z);
WriteLn(' p = ', p);
WriteLn(' q = ', q);
end.
c.program NOSE;
uses crt;
var
h,p,i:integer;
procedure xxx(var m:integer;j,k:integer);
var
h:integer;
begin
m:=m+1;
h:=k;
k:=i;
writeln('En xxx ',m,' ',h,' ',k);
end;
begin
clrscr;
p:=3;
i:=1;
repeat
h:=i+1;
xxx(p,h,i);
i:=p*2;
writeln('En principal ',p,' ',h,' ',i);
until (p=5)
end.

2) En el siguiente ejemplo:
6

Tcnicas Avanzadas de Programacin

E.P.E.T N 20

Programa A
Var

k,l,m,n:integer
Procedure B
Var
k,o,p,r:integer
Begin

End;

Procedure C
Var

p,s:integer
Begin

End;
Begin

.
End.

El programa A tiene como procedimientos el B y C


a) Indicar cules son las variables locales y cuales son globales
b) Indicar cul es el mbito de cada una de las variables declaradas en
este esquema en una tabla

You might also like