nva-lng1 3. sentencias. nva-lng2 asignación es una sentencia que almacena: el valor del argumento...

28
NVA-LNG 1 3. SENTENCIAS

Upload: gilberta-pedroza

Post on 23-Jan-2016

216 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

NVA-LNG 1

3. SENTENCIAS

Page 2: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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

Page 3: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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

Page 4: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

NVA-LNG 4

Ejemplo

La sentencia de asignación:

x:= x+1

l-valor r-valor

Activo: se modifica

Pasivo: se utiliza su valor

Page 5: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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

Page 6: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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

Page 7: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

NVA-LNG 7

void main(){int *p, i=5,k; p=&i; k=*p;

*p=7; printf("%d %d\n", i,k);}

Ejemplo 1

Page 8: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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

Page 9: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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

Page 10: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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.

Page 11: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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;

Page 12: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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;

Page 13: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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.

Page 14: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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

Page 15: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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};

Page 16: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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);

Page 17: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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

Page 18: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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

Page 19: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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;

Page 20: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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.

Page 21: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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;

Page 22: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

NVA-LNG 22

Selección

Selección simple (if-then) Selección doble (if-then-else) Selección múltiple (case)

Page 23: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

NVA-LNG 23

Sentencias de Selección

?

S

V

F?

S1

V

S2

F

S1 S2 Sn...

?

if-then

if-then-elseCase- switch

Page 24: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

NVA-LNG 24

Repetición

Repetición "mientras" (while) Repetición "hasta" (repeat) Repetición con variable de control

(for)

Page 25: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

NVA-LNG 25

Sentencias de Repetición

?

S

V

F

?

S

V

F

Mientras Repeat

?

S

V

F

do--while

?

S

for

Page 26: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

NVA-LNG 26

Entrada/Salida

Constituyen la interfaz de comunicación con:

las rutinas del sistema operativo destinadas a la transferencia de datos

Page 27: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

NVA-LNG 27

Invocación

Constituyen el mecanismo de activación de unidades de programa

Page 28: NVA-LNG1 3. SENTENCIAS. NVA-LNG2 Asignación Es una sentencia que almacena: el valor del argumento ubicado a la derecha del símbolo que la representa En

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; ··· }··· }