Diferencia entre revisiones de «Práctica 1 (LyC Verano)»

De Cuba-Wiki
Línea 221: Línea 221:


== Solución ==
== Solución ==
 
mcm: N x N -> N
       Y ← X1
       Y ← X1
  [A]  Z ← multiplo(Y, X2)
  [A]  Z ← multiplo(Y, X2)
Línea 227: Línea 227:
       Y ← Y + X1  ''// Y = X1, 2X1, 3X1....''
       Y ← Y + X1  ''// Y = X1, 2X1, 3X1....''
       GOTO A
       GOTO A
MCD : N x N -> N


= Ejercicio 8 =
= Ejercicio 8 =

Revisión del 13:44 15 feb 2008

Plantilla:Back

Ejercicio 1

Sin usar macros, mostrar en un programa que compute la función vacía ; es decir, la función que no está definida para ninguna k-tupla de naturales.

Solución

     Y ← Y + 1
[A1] IF Y ≠ 0 GOTO A1


Ejercicio 2

Escribir en programas que computen los siguientes predicados.

Pueden utilizarse las macros

GOTO A

(salto incondicional),

V ← k

(asignación de constantes) y

V1 ← V2

(asignación de variables).

Ítem a

Solución

[A1] IF X1 ≠ 0 GOTO A2
     IF X2 ≠ 0 GOTO E
     Y ← Y + 1
     GOTO E
[A2] IF X1 ≠ 0 GOTO A3
     GOTO E
[A3] X1 ← X1 - 1
     X2 ← X2 - 1
     GOTO A1

Ítem b

Solución

     Y ← Y + 1
[A1] IF X1 ≠ 0 GOTO A2
     IF X2 ≠ 0 GOTO E
     Y ← Y - 1
     GOTO E
[A2] IF X1 ≠ 0 GOTO A3
     GOTO E
[A3] X1 ← X1 - 1
     X2 ← X2 - 1
     GOTO A1

Ítem c

Solución

[A1] IF X1 ≠ 0 GOTO A2
     GOTO E
[A2] IF X2 ≠ 0 GOTO A3
     Y ← Y + 1
     GOTO E
[A3] X1 ← X1 - 1
     X2 ← X2 - 1
     GOTO A1

Ítem d

Solución

[A1] IF X2 ≠ 0 GOTO A2
     GOTO E
[A2] IF X1 ≠ 0 GOTO A3
     Y ← Y + 1
     GOTO E
[A3] X1 ← X1 - 1
     X2 ← X2 - 1
     GOTO A1


Ejercicio 3

Mostrar que el lenguaje es minimal, en el sentido que ninguna de las instrucciones

V ← V + 1

,

V ← V - 1

y

IF V ≠ 0 GOTO A

pueden eliminarse del lenguaje sin perder expresividad.

Solución

Ejercicio 4

Escribir en programas que calculen las siguientes funciones.

Además, pueden utilizarse las macros

GOTO A

,

V ← k

y

V1 ← V2

.

Ítem a

(usando suma como macro)

Solución

     Z1 ← X1
[A1] IF Z1 ≠ 0 GOTO A2
     GOTO E
[A2] Y ← Y + X2
     Z1 ← Z1 - 1
     GOTO A1

Ítem b

(usando producto como macro)

Solución

     Z1 ← X2
     Y ← 1
[A1] IF Z1 ≠ 0 GOTO A2
     GOTO E
[A2] Y ← Y * X1
     Z1 ← Z1 - 1
     GOTO A1


Ejercicio 5

Demostrar que el lenguaje cumple las siguientes propiedades:

Ítem a

Las siguientes funciones son computables:

  • la función sucesor
  • las proyecciones (para tal que .
  • las funciones constantes (para cualquier ).

Solución

     Y ← X1 + 1

     Y ← Xi

     Y ← k

Ítem b

Si son computables con y para todo , entonces la composición es computable:

.

¿Cuál es el dominio de ?

Nota: hay un pequeño error en el enunciado, es computable sólo si

Solución


Ejercicio 6

Usando las macros vistas en clase, escribir programas en que computen las siguientes funciones:

Ítem a

el mayor número natural tal que

Solución

[A1] Z1 ← Z1 + 2
     Z2 ← Z1 > X1
     IF Z2 ≠ 0 GOTO E
     Y ← Y + 1
     GOTO A1

Ítem b

Solución

     IF Z2 = 0 GOTO A2 // si Z2 = 0 entonces es múltiplo de X1 
                       // voy a A2 y como Z1 = X2 = 0  devuelvo 1  
[A1] Z1 ← Z1 + X1      // Z1 guarda los múltiplos de X1
     Z2 ← Z1 < X2
     IF Z2 ≠ 0 GOTO A1
[A2] Y ← Y + 1          // se tiene Z1 = k * X1 >= X2 
     Z3 ← Z1 = X2
     IF Z3 ≠ 0 GOTO E
     Y ← Y - 1

Ejercicio 7

Escribir un programa que compute el mínimo común múltiplo y otro que compute el máximo común divisor entre dos números naturales. Se puede utilizar cualquier macro vista en clase.

Solución

mcm: N x N -> N 
     Y ← X1
[A]  Z ← multiplo(Y, X2)
     IF Z ≠ 0 GOTO E
     Y ← Y + X1   // Y = X1, 2X1, 3X1....
     GOTO A
MCD : N x N -> N

Ejercicio 8

Sean funciones computables. Usando las macros vistas en clase, escribir programas que computen las siguientes funciones:

Ítem a

Solución

[A1] Z2 ← g(X1, ..., Xn, Z1)
     Z3 ← Z2 < Y
     IF Z3 ≠ 0 GOTO A2
     Y ← Z2
[A2] Z1 ← Z1 + 1
     Z4 ← Z1 < Xn+1
     IF Z4 ≠ 0 GOTO A1

Ítem a

Solución

     Z1 ← s(Xn+1)
     Z5 ← t(Xn+1)
     Z6 ← Z1 > Z5
     IF Z6 ≠ 0 GOTO E
[A1] Z2 ← g(X1, ..., Xn, Z1)
     Z3 ← Z2 < Y
     IF Z3 ≠ 0 GOTO A2
     Y ← Z2
[A2] Z1 ← Z1 + 1
     Z4 ← Z1 < Z5
     IF Z4 ≠ 0 GOTO A1