nva-lng1 3. sentencias. nva-lng2 asignación es una sentencia que almacena: el valor del argumento...
TRANSCRIPT
NVA-LNG 1
3. SENTENCIAS
NVA-LNG 2
Asignación
Es una sentencia que almacena:
el valor del argumento ubicado a la derecha del símbolo que la representa
En la referencia del argumento ubicado a la izquierda del mismo
NVA-LNG 3
l-valor y r-valor
l-valor: Referencia (left value)r-valor: Valor (right value)
Expresan la función que ellos desempeñan a ambos lados de un símbolo de asignación.
referencianombre Tipo valor
l-valor r-valor
NVA-LNG 4
Ejemplo
La sentencia de asignación:
x:= x+1
l-valor r-valor
Activo: se modifica
Pasivo: se utiliza su valor
NVA-LNG 5
Cada variable tiene un l-valor que designa su ubicación en memoria.
Una constante sólo tiene r-valor.
En una variable subindicada A[i], el l-valor es la ubicación en memoria del i-
ésimo elemento de A r-valor es el valor almacenado en esa
ubicación.
Consideraciones
-23
i
NVA-LNG 6
Consideraciones cont.
Si p es una variable puntero, su r- valor es la dirección a la cual p apunta l-valor es la ubicación en la cual esa dirección
se encuentra almacenada.
500p puntero 120
Gráficamente: p 5
120
q 3230
850q puntero 230
NVA-LNG 7
void main(){int *p, i=5,k; p=&i; k=*p;
*p=7; printf("%d %d\n", i,k);}
Ejemplo 1
NVA-LNG 8
void main(){int *p, *q, i=1,j=2,**t; printf("%d %d\n", i,j); p=&i; q=&j;
*p=*q; printf("%d %d\n", i,j); t=&p; **t=7;} printf("%d %d\n", i,j);}
Ejemplo 2
NVA-LNG 9
AliasPara una variable:
el l-valor es único; un l-valor puede pertenecer a más de una variable
En este, caso, x e y tienen el mismo l-valor, razón por la cual x es llamada "alias de y" e y "alias de x".
X
Y
PUNTERO
PUNTERO
500 3
NVA-LNG 10
Alias en ForTran
Equivalence Integer x,y
:
x=5
print y;
Lenguaje Fortran provee el concepto de alias a través de la sentencia Equivalence.
El cambio de valor de un ALIAS ocasionará un cambio en el valor de todos los ALIAS.
NVA-LNG 11
Implementación
El compilador genera código para calcular el r-valor de b en algún registro R.
Si los tipos de a y b son distintos, el compilador genera código para convertir en R (si es posible) el r-valor de b al tipo de a.
El compilador genera código para almacenar el contenido del registro R en el l-valor de a.
Sea la sentencia a := b;
NVA-LNG 12
Formas de Asignación C: operación binaria infija con prioridad inferior
a la de las restantes operaciones sobre tipos elementales.
a = ( b = c + d ) + ( e = f + g );
Por ejemplo:
M[++i]=i i=i+1; M[i]=i;
M[i++]=i M[i]=i; i=i+1;
NVA-LNG 13
Formas de Asignación
PL/I: permiten asignaciones de la forma
A = B
donde: A y B pueden ser de tipos estructurados compatibles
Si A es un arreglo en PL/I, la asignación A=0 lo inicializa con ceros.
NVA-LNG 14
Asignación Múltiple
La modalidad
1. p, q q, p;
2. A[i], A[j] A[j], A[i];
3. A[i], i i, A[i];
v1 , v2 , ... , vk e1 , e2 , ... , ekUtiliza la correspondencia posicional
entre l-valores y r-valores.
4. i, A[i] A[i], i;
aux=A[i];
A[i]=A[j];
A[j]=aux
NVA-LNG 15
Inicialización Proporcionar un valor a una variable antes de
comenzar la ejecución del código al cual pertenece
Inicialización
Implícita
Explícita
Asignar el valor cero a todas las variables numéricas, sin realizar una asignación
Si aparece como parte de una declaración
int v[5] = {11, 22, 33, 44, 55};
NVA-LNG 16
Inicialización Explícita
int v[5] = {11, 22, 33, 44, 55};int v[] = {11, 22, 33, 44, 55};int v[5] = {11, 22}; ¿Resto de los
elementos?
char s[] = {'A','B','C','D',0};
char s[] = {'A','B','C','D','\0'};char s[] = "ABCD";
char s[5] = "ABCD";Type
Vector = Array[1..4] of Integer;
Const
v:Vector=(5,3,8,10);
NVA-LNG 17
Control de Secuencia
Implícito Ejecución Paralela Sentencia GoTo Sentencia Selección Sentencias de Iteración Sentencias de E/S Sentencias de Invocación Sentencias Estructuradas
NVA-LNG 18
Implícito
La ejecución procede según el orden físico de las sentencias que conforman una unidad de código
NVA-LNG 19
Ejecución Paralela Ejecución paralela conceptual de un bloque de
instrucciones. Para expresar paralelismo, Dijkstra sugiere la
estructura parbegin/parend:
parbegin
S1;
S2;
···
Sn;
parend
parbegin
c[1]:= a[1] * b[1];
c[2]:= a[2] * b[2];
c[3]:= a[3] * b[3];
parend;
NVA-LNG 20
Goto
Objetivo:
Es el traspaso explícito del control a una instrucción con label desde cualquier punto de un programa.
... excepto cuando la instrucción se encuentra al interior de un bloque.
NVA-LNG 21
Goto ejemplo
label L;var A : array0..9 of integer; i : integer; begin i := 0; L :Readln(A[i]); i := i + 1; If i < 10 then goto L; end;
NVA-LNG 22
Selección
Selección simple (if-then) Selección doble (if-then-else) Selección múltiple (case)
NVA-LNG 23
Sentencias de Selección
?
S
V
F?
S1
V
S2
F
S1 S2 Sn...
?
if-then
if-then-elseCase- switch
NVA-LNG 24
Repetición
Repetición "mientras" (while) Repetición "hasta" (repeat) Repetición con variable de control
(for)
NVA-LNG 25
Sentencias de Repetición
?
S
V
F
?
S
V
F
Mientras Repeat
?
S
V
F
do--while
?
S
for
NVA-LNG 26
Entrada/Salida
Constituyen la interfaz de comunicación con:
las rutinas del sistema operativo destinadas a la transferencia de datos
NVA-LNG 27
Invocación
Constituyen el mecanismo de activación de unidades de programa
NVA-LNG 28
S. Estructuradas
Corresponde a la sentencia compuesta o bloque.
Ciertos lenguajes, como C, permiten declarar variables locales al interior de un bloque, por ejemplo:
{ int i = 0;··· { int j = 0; ··· }··· }