• No se han encontrado resultados

Tema 2: El lenguaje GOTO

N/A
N/A
Protected

Academic year: 2022

Share "Tema 2: El lenguaje GOTO"

Copied!
20
0
0

Texto completo

(1)

Tema 2:

El lenguaje GOTO

Antonio de J. P´erez Jim´enez

Dpto. Ciencias de la Computaci´on e Inteligencia Artificial Universidad de Sevilla

Computaci´on Curso 2007–08

(2)

Modelos de Computaci´ on

Un Modelo de Computaci´on proporciona una definici´on matem´atica precisa del concepto de algoritmo.

Un Programa es la expresi´on formal de un algoritmo en un modelo.

Caracter´ısticas generales:

1 Especificaci´on:

Datos de entrada y salida (suelen ser del mismo tipo).

Operaciones b´asicas.

Acciones primitivas que act´uan sobre los datos de entrada.

2 Implementaci´on e Interpretaci´on:

Sintaxis: reglas gramaticales para la construcci´on, a partir de las operaciones b´asicas, de los procedimientos mec´anicos (programas).

Sem´antica: definici´on l´ogico-matem´atica de las funciones o relaciones que definen los procedimientos.

(3)

Funciones Computables

Un modelo de computaci´on, M, viene dado por:

Un conjunto de datos de entrada y salida, DM.

Un conjunto de programas PM (descrito por la sintaxis de M) Una descripci´on del modo en que cada programa calcula una funci´on.

Sea P un programa en un modelo de computaci´on M.

Asociamos a P una funci´on sobre la estructura de datos [[P]]M : D− −→ D donde, D = [

k∈N−{0}

Dk [[P]]M(d )= resultado de ejecutar P sobre el dato d . Donde para cada aridad k, [[P]](k)M = [[P]]M Dk

Una funci´on k-aria f : Dk− −→ D es M–computable si existe un M-programa p, [[P]](k)= f . Designaremos por M–COMP al conjunto de funciones M–computables

(4)

Modos de Computaci´ on

Asocian a la sem´antica del modelo una definici´on de soluci´on.

Modo secuencial-determinista.

La ejecuci´on sobre un dato es ´unica. Resuelve el problema de manera exacta.

Modo paralelo. Ejecuta diversas tareas en procesadores distintos. Resuelve el problema de manera exacta.

Modo no determinista.

Admite instrucciones que pueden elegir entre dos o m´as opciones. Resuelve un problema si entre sus posibles soluciones proporciona una soluci´on exacta del mismo.

Modo probabilista.

Los programas son deterministas, pero se admite como soluciones programas que, con cierta probabilidad, proporcionan una soluci´on exacta del problema.

(5)

El Lenguaje GOTO

Es un modelo secuencial y determinista con conjunto de datos: N.

Sintaxis:

1 Variables:

De entrada: X1(= X ), X2, X3, ...

De salida: Y

Auxiliares: Z1(= Z ), Z2, Z3, ...

2 Etiquetas: A1, B1, C1, D1, E1, A2, B2, C2, D2, E2, . . . Notaci´on: A = A1, B = B1, C = C1, D = D1, E = E1.

3 Instrucciones: Para cada variable V y cada etiqueta L:

Incremento: V ←− V + 1 Decremento: V ←− V − 1 Condicional: IF V 6= 0 GOTO L Skip: V ←− V

Instrucciones etiquetadas: Para cada etiqueta K : [K ] V ←− V + 1

[K ] V ←− V − 1 [K ] IF V 6= 0 GOTO L [K ] V ←− V

(6)

Programas GOTO

Un programa GOTO (un G–programa) es una sucesi´on finita de instrucciones del lenguaje GOTO, P = I1, I2, .., In, cuya

´

ultima instrucci´on NO es Y ←− Y .

Si P = I1, . . . , In es un programa GOTO el n´umero n se denomina longitud del programa y se denota por |P|.

Caso l´ımite: el Programa Vac´ıo (con 0 instrucciones).

Notaci´on: Denotaremos por GOTOP al conjunto de G-programas.

Ejemplo:

p

[A] X ←− X − 1 Y ←− Y + 1 IF X 6= 0 GOTO A

Cada programa expresa un procedimiento para calcular una cierta funci´on (parcial) de Nk en N. El modo en que cada programa lleva a cabo esto se determina mediante la sem´antica del lenguaje GOTO.

(7)

Descripciones instant´ aneas

Sea P un programa GOTO.

var (P) conjunto de variables que aparecen en P.

Un estado de P es una aplicaci´on σ : VAR → N tal que para cada variable V /∈ var (P), σ(V ) = 0.

Un estado es, esencialmente, una tabla variable–valor que guarda el valor de las variables del programa en un momento dado. Por ello, a veces, escribiremos V = m en lugar de σ(V ) = m.

Una descripci´on instant´anea, (d.i.) de P, es un par s = (i , σ) donde 1 ≤ i ≤ |P| + 1 y σ es un estado de P.

Cuando i = 1, la d.i. se denomina inicial.

Cuando i = |p| + 1, la d.i. se denomina terminal.

Si s = (i , σ), escribiremos s(V ) en lugar de σ(V ).

(8)

Sem´ antica

Sea P un programa y s = (j , σ) y s0= (j0, σ0) descripciones instant´aneas de P con j 6= |p| + 1.

Diremos que s0 es la siguiente de s en la computaci´on de P, y escribimos s `p s0, si:

Caso 1: Ij ≡ V ←− V + 1, s(V)=m. Entonces j0 = j + 1 y σ0 es σ sustituyendo V = m por V = m + 1.

Caso 2: Ij ≡ V ←− V − 1, s(V)=m. Entonces j0 = j + 1 y Si m > 0, σ0 es σ sustituyendo V = m por V = m − 1.

Si m = 0, σ0= σ

Caso 3: Ij es de tipo SKIP. Entonces j0 = j + 1 y σ0= σ.

Caso 4: Ij ≡ IF V 6= 0 GOTO L. Entonces σ0 = σ y Si s(V ) = 0, entonces j0= j + 1

Si s(V ) 6= 0

Si existe k tal que Ik es la primera instrucci´on etiquetada con L, entonces j0= k

Si no existe tal k, j0= |p| + 1

(9)

Computaci´ on de un programa

Una computaci´on de un programa P es una sucesi´on de d.i. de P, s = s1, . . . , sk, . . . tal que:

s1= (1, σ);

Para todo k, con sk no terminal, existe k + 1 tal que sk `psk+1

Una computaci´on s de p es finita si y s´olo si existe k tal que sk es terminal. En tal caso, escribiremos P(s) ↓ y diremos que dicha computaci´on para. En caso contrario, la computaci´on s es infinita;

escribiremos P(s) ↑ y diremos que no para.

Lema. Para todo P ∈ GOTOP se verifica:

Ausencia de bloqueo: Para toda d .i ., s, no terminal, existe s0 tal que s `ps0.

Determinismo: Para cada d .i . inicial existe una ´unica computaci´on.

(10)

Ejemplo

[A] IF X 6= 0 GOTO B Z −→ Z + 1 IF Z 6= 0 GOTO E [B] X −→ X − 1

Y −→ Y + 1 IF X 6= 0 GOTO A

s1= (1, {X = 3, Y = 0, Z = 0}) s2= (4, {X = 3, Y = 0, Z = 0}) s3= (5, {X = 2, Y = 0, Z = 0}) s4= (6, {X = 2, Y = 1, Z = 0}) s5= (1, {X = 2, Y = 1, Z = 0}) s6= (4, {X = 2, Y = 1, Z = 0}) s7= (5, {X = 1, Y = 1, Z = 0}) s8= (6, {X = 1, Y = 2, Z = 0}) s9= (1, {X = 1, Y = 2, Z = 0}) s10= (4, {X = 1, Y = 2, Z = 0}) s11= (5, {X = 0, Y = 2, Z = 0}) s12= (6, {X = 0, Y = 3, Z = 0}) s13= (7, {X = 0, Y = 3, Z = 0})

(11)

Funciones GOTO–computables

Sea P un G–programa. La funci´on de aridad n calculada por P es la funci´on [[P]](n): Nn − → N definida como sigue:

Dado ~a = (a1, . . . , an) ∈ Nn,

1 Sea σ el estado de P dado por:

σ(Xi) = ai (1 ≤ i ≤ n)

σ(V ) = 0 para toda V ∈ var (P) \ {X1, . . . , Xn}.

2 Sea ahora s1 = (1, σ). Entonces [[P]](n)(~a) =

sk(Y ) si existe s1, . . . , sk finita de p a partir de s1

↑ e.c.o.c.

Definici´on. Diremos que una funci´on f : Nn − → N es GOTO–computable (f ∈ G –COMP), si existe un programa GOTO, P tal que f = [[P]](n).

Designaremos por G –COMP(n) al conjunto de funciones computables de aridad n.

(12)

Ejemplos

La funci´on identidad IdN : N → N es GOTO–computable.

IF X 6= 0 GOTO B Z ←− Z + 1 IF Z 6= 0 GOTO E [B] X ←− X − 1

Y ←− Y + 1 IF X 6= 0 GOTO B La funci´on vac´ıa f es GOTO–computable:

[A] Z ←− Z + 1 IF Z 6= 0 GOTO A La funci´on nula O : N −→ N O(x) = 0 es GOTO–computable.

La funci´on nula es calculada por cualquier programa que pare siempre y en el que no aparezca la variable de salida Y .

(13)

Macros

Existen bloques de instrucciones que podemos considerar como

“nuevas instrucciones” ya que podemos utilizarlos en cualquier programa para realizar una cierta subtarea. Veamos algunos ejemplos de esto:

El bloque de instrucciones:

Z ←− Z + 1 IF Z 6= 0 GOTO L

nos permite realizar un salto incondicional a la instrucci´on etiquetada por L (o terminar la ejecuci´on del programa).

Podemos poner a cero una variable V mediante el siguiente bloque de instrucciones:

[L] V ←− V − 1 IF V 6= 0 GOTO L

(14)

Macros (II)

Es ´util introducir abreviaturas para poder usar c´omodamente los bloques anteriores en la descripci´on de un programa.

Dichas abreviaturas se denominan macros y para poder usarlas debemos especificar con precisi´on la forma en que dichas abreviaturas se reemplazan por verdadero c´odigo.

GOTO L

| {z } MACRO

=⇒ Zk ←− Zk + 1 IF Zk 6= 0 GOTO L



| {z }

EXPANSION V ←− 0

| {z } MACRO

=⇒

 [K ] V ←− V − 1 IF V 6= 0 GOTO K

| {z }

EXPANSION

En el primer caso Zk debe ser una variable que no aparece ne el programa en que realizamos la expansi´on. En el segundo caso K es una etiqueta que no aparece en dicho programa.

(15)

Macros. Asignaci´ on

La macro V ←− V0 asigna a V el valor de V0, conservando V0 su valor.

V ←− 0

[A] IF V0 6= 0 GOTO B GOTO C

[B] V0 ←− V0− 1 V ←− V + 1 Z ←− Z + 1 GOTO A





Copia V0 en V y en Z y

Pone V0 a cero [C ] IF Z 6= 0 GOTO D

GOTO L [D] Z ←− Z − 1

V0←− V0+ 1 GOTO C









Copia Z en V0 Pone Z a cero

(16)

Uso de las macros

La funci´on suma: Sum : N2−→ N Sum(x, y) = x + y

P+

















Y ←− X1 Z ←− X2

[B] IF Z 6= 0 GOTO A GOTO E

[A] Z ←− Z − 1 Y ←− Y + 1 GOTO B

Ejercicio: Prueba de la correcci´on para la suma.

(∀x , y ∈ N)([[P+]](2)(x , y ) = x + y ) (por inducci´on d´ebil sobre la segunda variable).

(17)

Uso de macros (II)

La funci´on producto. Prod : N2 −→ N ·(x, y) = x·y

p×

















Z2 ←− X2

[B] IF Z26= 0 GOTO A GOTO E

[A] Z2 ←− Z2− 1 Z1 ←− X1+ Y Y ←− Z1

GOTO B

Nota: Z1 ←− X1+ Y es una macro ejecuta el programa Suma y asigna el resultado a la variable Z1.

(18)

Expansi´ on de macros (I)

Sean f ∈ GCOMP(n) y P ∈ GOTOP tales que [[P]](n)= f . Veamos una expansi´on para la macro: W ←− f (V1, . . . , Vn).

1 Renombrando las etiquetas de P si fuese necesario, podemos suponer que la ´unica etiqueta de salida de P es E y todas las dem´as etiquetas de P son A1, .., Ar.

2 Renombrando variables podemos suponer que las ´unicas variables de entrada que aparecen en P son X1, . . . , Xn y las

´

unicas variables auxiliares Z1, . . . , Zk.

3 Podemos expresar la situaci´on anterior escribiendo P ≡ P(Y , X1, . . . , Xn, Z1, . . . , Zk; E , A1, . . . , Ar)

4 Dado m ∈ N podemos obtener un nuevo programa

Qm ≡ P(Zm, , Zm+1, .., Zm+n, Zm+n+1, .., Zm+n+k; Em, Am+1, .., Am+r) sustituyendo en P cada variable y cada etiqueta por la

correspondiente de Qm.

(19)

Expansi´ on de macros (II)

Para expandir la macro en un programa P0, tomamos m ∈ N suficientemente grande para que Qm y P0 no tengan variables ni etiquetas comunes. Una vez determinado m reemplazamos la macro por:

W ←− f (V1, . . . , Vn)





































Zm←− 0 Zm+1←− V1 ...

Zm+n←− Vn ...

Zm+n+1←− 0 ...

Zm+n+k ←− 0 Qm

[Em] W ←− Zm

(20)

Macros condicionales

Si P(V1, . . . , Vn) es un predicado G-computable:

macroexpansi´on macro Z ←− P(V1, . . . , Vn)

IF Z 6= 0 GOTO L



IF P(V1, . . . , Vn) 6= 0 GOTO L Ejemplo: IF V = 0 GOTO L

V = 0 ≡ P(v ) =

 1 si v = 0 0 si v 6= 0

donde P(v ) es G-computable:

 IF X 6= 0 GOTO E Y ←− Y + 1

Referencias

Documento similar

Prueba que la soluci´on encontrada es ´unica, usando la identidad de Green-Lagrange o mediante el m´etodo de energ´ıa.. Aplicando el principio de Duhamel, resuelve el siguiente problema

Este cap´ıtulo examina los requisitos para las funciones de interpolaci´ on en t´ erminos de la exactitud de la soluci´ on y la convergencia hacia la soluci´ on exacta de un

Del mismo modo que los números enteros se obtienen al hacer todas las diferencias de números naturales, consideramos ahora todos los posibles cocientes de números enteros, para

Se resuelve el Problema de consecución del esfuerzo eficiente pero el agente asume todo el riesgo si el agente es averso: compensación por riesgo contrato

Si un problema de decisi´ on es resoluble en tiempo polinomial por una familia de de sistemas P b´ asicos de transici´ on reconocedores, entonces existe una MTD que resuelve el

Este procedimiento proporciona una interpretaci´ on geom´ etrica muy clara del problema y de su soluci´ on, pero exige conocer la soluci´ on completa del sistema

Adem´ as, la resoluci´ on de un problema de este tipo nos proporciona una cota m´ınima del coste de la soluci´ on ´ optima al TSP: n´ otese que si se elimina un arco del

A diferencia de un problema de valor inicial, en un problema de contorno puede ocurrir que exista una ´ınica soluci´ on, que no exista soluci´ on o que existan infinitas