Sei sulla pagina 1di 8

Ejercicios resueltos sobre el tema 1 1

EJERCICIOS RESUELTOS TEMA 1


EJERCICIO 1

El objetivo de este ejercicio es ejecutar manualmente un algoritmo. Si tienes un mnimo de


prctica trabajando con las estructuras clsicas de programacin puedes saltrtelo porque no
te aportar nada nuevo.

Dado el siguiente pseudocdigo, escribe el valor que tendr la variable "a" una vez ejecutado
el algoritmo.

a <= 25;
For i in 0 to 4 loop
For j in 0 to 4 loop
If (i=j) then a <= a + 1;
elsif (j = 4) then a <= a + 2;
end if;
end if;
end loop;
end loop;
a <= a + 10;

Para facilitar las explicaciones, numeremos como sigue las instrucciones del pseudocdigo:

1: a <= 25;
2: For i in 0 to 4 loop
3: For j in 0 to 4 loop
4: If (i=j) then a <= a + 1;
5: elsif (j = 4) then a <= a + 2;
6: end if;
7: end if;
8: end loop;
9: end loop;
10: a <= a + 10;

Inicialmente a toma el valor 25 y los ndices i y j toman el valor 0:

a i j Comentarios
25 0 0

La condicin del if de la lnea 4 se cumple (i=j) y en consecuencia a se incrementa en 1. A


continuacin se vuelve a ejecutar el loop del for de las lneas 3 a 8, incrementando j en 1:

a i j Comentarios
25 0 0
26 0 0 If (i=j) then a <= a + 1;
26 0 1 end loop de la lnea 8

Elena Valderrama, Jean-Pierre Deschamps, Merc Rulln


Ejercicios resueltos sobre el tema 1 2

Se vuelve a ejecutar el if de la lnea 4, pero ahora ij y j4, de modo que el if no realiza


ninguna accin sobre a. Como en el caso anterior, se vuelve a ejecutar el for de la lnea 3,
incrementando j en 1:

a i j Comentarios
25 0 0
26 0 0 If (i=j) then a <= a + 1;
26 0 1 end loop de la lnea 8
a no cambia de valor porque no se cumple ninguna
de las condiciones del if:

26 0 2 If (i=j) then a <= a + 1;


elsif (j = 4) then a <= a + 2;
y j se incrementa en 1 al volver a ejecutarse el loop
de las lneas 3-8.

Esta situacin se repite para j=3, pero cuando j=4 la condicin del elsif de la lnea 5 se
cumple y a se incrementa en 2:

a i j Comentarios
25 0 0
26 0 0 If (i=j) then a <= a + 1;
26 0 1 end loop de la lnea 8
a no cambia de valor porque no se cumple ninguna
de las condiciones del if:
If (i=j) then a <= a + 1;
26 0 2
elsif (j = 4) then a <= a + 2;
y j se incrementa en 1 al volver a ejecutarse el loop
de las lneas 3-8.
26 0 3
28 0 4 elsif (j = 4) then a <= a + 2;

En este punto se vuelve a ejecutar el loop del for de las lneas 2 a 9, incrementando i en 1;
y se vuelve inicializa de nuevo el forde la lnea 4 (j=0):

a i j Comentarios
25 0 0
26 0 0 If (i=j) then a <= a + 1;
26 0 1 end loop de la lnea 8
26 0 2
26 0 3
28 0 4 elsif (j = 4) then a <= a + 2;
28 1 0

No se cumple ninguna de las condiciones de los ifs, de modo que a no cambia de valor y j
se incrementa en 1:

a i j Comentarios
25 0 0
26 0 0 If (i=j) then a <= a + 1;
26 0 1 end loop de la lnea 8
26 0 2
26 0 3
28 0 4 elsif (j = 4) then a <= a + 2;
28 1 0

Elena Valderrama, Jean-Pierre Deschamps, Merc Rulln


Ejercicios resueltos sobre el tema 1 3

28 1 1

En este caso se cumple i=j, as que a se incrementa en 1, y j se vuelve a incrementar.


Mientras j vale 2 o 3 el valor de a no se modifica:

a i j Comentarios
25 0 0
26 0 0 If (i=j) then a <= a + 1;
26 0 1 end loop de la lnea 8
26 0 2
26 0 3
28 0 4 elsif (j = 4) then a <= a + 2;
28 1 0
28 1 1
29 1 2
29 1 4

Cuando j = 4, se cumple la condicin del elsif de la lnea 5 y a se incrementa en 2:

a i j Comentarios
25 0 0
26 0 0 If (i=j) then a <= a + 1;
26 0 1 end loop de la lnea 8
26 0 2
26 0 3
28 0 4 elsif (j = 4) then a <= a + 2;
28 1 0
28 1 1
29 1 2
31 1 4

Podemos seguir estos mismos razonamientos:

a i j Comentarios
25 0 0

31 1 4
31 2 0
31 2 1
32 2 2
32 2 3
34 2 4
34 3 0
34 3 1
34 3 2
35 3 3
37 3 4
37 4 0
37 4 1
37 4 2
37 4 3
En este caso se cumple la condicin del if de la
38 4 4
lnea 4 (i=j) y por tanto a se incrementa en 1.

Elena Valderrama, Jean-Pierre Deschamps, Merc Rulln


Ejercicios resueltos sobre el tema 1 4

Finalmente se acaban ambos loops y a se incrementa en 10 (lnea 10), con lo que el valor
final de a que se pide es 48:

a i j Comentarios
25 0 0

En este caso se cumple la condicin del if de la


38 4 4
lnea 4 (i=j) y por tanto a se incrementa en 1.
48 4 4 a <= a + 10;

[Respuesta: 48]

EJERCICIO 2

Dados dos nmeros X e Y = y3103 + y2102 + y110 + y0, el producto P = XY se puede expresar
como P = (((y3X)10 + y2X)10 + y1X)10 + y0X, Cul o cules de los siguientes algoritmos
calcula/n P?

1) P <=0; 2) P <=0;
for i in 0 to 3 loop for i in 2 downto 0 loop
P <=(P*10) + (y(i)*X); P <=(P*10) + (y(i)*X);
end loop; end loop;
3) P <=0; 4) P <=y(3)*X;
for i in 3 downto 0 loop for i in 2 downto 0 loop
P <=(P*10) + (y(i)*X); P <=(P*10) + (y(i)*X);
end loop; end loop;

Analicemos el funcionamiento, por ejemplo, del algoritmo 3:


Inicialmente,

i P Comentarios
0 (P <= 0)

En la primera iteracin del loop,

i P Comentarios
0 (P <= 0)
3 y3.X Iteracin 1

Y en las siguientes iteraciones,

i P Comentarios
0 (P <= 0)
3 y3.X Iteracin 1
2 (y3.X).10 + y2.X Iteracin 2
1 ((y3.X).10 + y2.X).10 + y1.X Iteracin 3
0 (((y3.X).10 + y2.X).10 + y1.X).10 + y0.X Iteracin 4

Al acabar el loop, P contiene el valor correcto.

Elena Valderrama, Jean-Pierre Deschamps, Merc Rulln


Ejercicios resueltos sobre el tema 1 5

Cada uno delos algoritmos puede analizarse de una manera similar. El algoritmo 1 realiza un
clculo parecido pero el valor de i va de 0 a 3, con lo que acaba generando la funcin
(((y0.X).10 + y1.X).10 + y2.X).10 + y3.X, mientras que el algoritmo 2 se olvida del trmino
y(3)*X, generando la funcin ((y2.X).10 + y1.X).10 + y0.X. Finalmente, el algoritmo 4 tambin es
correcto e incluso ms eficiente por cuanto comienza inicializando P al valor y3.X y requiere
ejecutar el for loop una vez menos que el algoritmo 3.

[Respuesta: 3 y 4]

EJERCICIO 3

Se desea disear un circuito que controle la apertura de una puerta de acceso de vehculos
cuando el conductor del mismo pulse un botn (REQ=1). El sistema a disear recibe 4 seales
de entrada:
a. REQ: Esta seal viene de un pulsador. REQ toma el valor 1 mientras el pulsador est
pulsado y 0 en caso contrario.
b. UPPER: Esta seal viene de un sensor colocado en la puerta y vale 1 cuando la puerta
est totalmente abierta (subida),
c. LOWER: Esta seal viene de un sensor colocado en la puerta y vale 1 cuando la puerta
est totalmente cerrada (bajada),
d. SENSORS: Esta seal viene de unos sensores colocados en el rea de puerta (ver
dibujo) y vale 0 cuando dicha rea est libre de vehculos.
Y genera dos seales de salidas que controlan el motor de la puerta:
a. ON/OFF: Vale 0 cuando el motor est apagado y 1 cuando est en marcha.
b. UP/DOWN: Indica la direccin de movimiento de la puerta.
Para abrir la puerta UP/DOWN=0 (y ON/OFF=1)
Para cerrar la puerta UP/DOWN=1 (y ON/OFF=1)
Escribe un algoritmo que realice la siguiente secuencia de operaciones:
1. Espera a que se reciba una peticin de apertura de la puerta (REQ=1)
2. Abre la puerta
3. Espera a que la puerta est totalmente abierta
4. Espera a que el rea de puerta est libre de vehculos y comienza a cerrar la puerta
5. Espera a que la puerta est totalmente cerrada y vuelve al estado inicial, a la espera
de una nueva peticin de paso.
No se debe atender ninguna nueva peticin de acceso hasta que la secuencia de operaciones
anterior haya finalizado.

Elena Valderrama, Jean-Pierre Deschamps, Merc Rulln


Ejercicios resueltos sobre el tema 1 6

Veamos una posible solucin (la solucin no es nica): El algoritmo debe repetir continua e
indefinidamente los pasos 1 a 5, as que incluiremos dichas acciones dentro de un loop:

loop
(acciones 1 a 5)
end loop;

La accin 1 dice espera a que REQ=1. Esto lo podemos escribir de diversas maneras; una de
ellas es mediante la pseudo-instruccin wait until (condicin);. Otra manera sera dicindoles
no hagas nada hasta que mediante una instruccin while (condicin) loop noop;, donde
noop significa no-operacin, una forma comn de decir algortmicamente no hagas nada.
Fjate que la condicin sera distinta en cada caso: En el caso del wait la condicin sera
REQ=1 (espera hasta que haya una peticin de apertura de puerta), mientras que en el while
la condicin sera REQ=0 (no hagas nada mientras no hay peticin de apertura de puerta).
Nosotros utilizaremos la primera opcin:

loop
wait until REQ=1;
(acciones 2 a 5)
end loop;

Las acciones 2 y 3 abre la puerta completamente las describiremos diciendo que (i) abra la
puerta (ON/OFF=1 y UP/DOWN=0), (ii) espere a que el sensor UPPER detecte que la puerta
est totalmente abierta, y (iii) pare el motor cuando la puerta est totalmente abierta
(ON/OFF=0):

loop
wait until REQ=1;
ON/OFF <= 1 ; UP/DOWN <= 0 ;
wait until UPPER = 1;
ON/OFF <= 0;
(acciones 4 y 5)
end loop;

La accin 4, espera a que el rea de puerta est libre de vehculos y comienza a cerrar la
puerta los escribiremos como wait until SENSORS=0; y ON/OFF<=1, UP/DOWN<=1.

loop
wait until REQ=1;
ON/OFF <= 1; UP/DOWN <= 0;
wait until UPPER = 1;
ON/OFF <= 0;
wait until SENSORS = 0;
ON/OFF <= 1; UP/DOWN <= 1;
(accin 5)
end loop;

Elena Valderrama, Jean-Pierre Deschamps, Merc Rulln


Ejercicios resueltos sobre el tema 1 7

Finalmente la accin 5, espera a que la puerta est totalmente cerrada y vuelve al principio a
esperar una nueva seal de REQ la escribiremos diciendo que (i) espere a que la puerta est
totalmente cerrada wait until LOWER=1;, (ii) pare el motor de la puerta (ON/OFF=0) y (iii)
acabe el loop actual:

[Respuesta:]

loop
wait until REQ=1;
ON/OFF <= 1; UP/DOWN <= 0;
wait until UPPER = 1;
ON/OFF <= 0;
wait until SENSORS = 0;
ON/OFF <= 1; UP/DOWN <= 1;
wait until LOWER = 1;
ON/OFF <= 0;
end loop;

EJERCICIO 4

Escribe la tabla de entradas y salidas que define el funcionamiento del siguiente circuito:

Vdd1=V3 v.

VIN1 VIN2 VIN3

VOUT

VIN1

VIN2

VIN3

Gnd 0= V0 v.

Estudiemos qu pasa cuando alguna de las entradas VIN1, VIN2 o VIN3 est a 0 voltios:
1) Supongamos que inicialmente VOUT = 0v. Puesto que VIN1, VIN2 o VIN3 est a 0v., al menos
un transistor P se pone en conduccin, y al menos un transistor N se pone en corte. Se
dara una situacin como la mostrada en la siguiente figura, en la que se establece una
corriente I desde Vdd al nodo de salida VOUT a travs de todos aquellos transistores P que
estn en conduccin. Esta corriente acaba por subir la tensin de VOUT a un valor cercano
a la tensin de alimentacin (en este caso 3v), valor que se interpreta como un 1 lgico.

Elena Valderrama, Jean-Pierre Deschamps, Merc Rulln


Ejercicios resueltos sobre el tema 1 8

El paso de corriente hacia Gnd queda


interrumpido por haber al menos un transistor
N en corte

2) Por otro lado, si inicialmente VOUT 3v, a pesar de estar algn transistor P en conduccin
el valor de la tensin de salida no se modificara puesto que la diferencia de tensin entre
Vdd y VOUT sera 0.

Tenemos pues el siguiente funcionamiento:

VIN1 VIN2 VIN3 VOUT


0 0 0 1
0 0 1 1
0 1 0 1
0 1 1 1
1 0 0 1
1 0 1 1
1 1 0 1

3) Cuando las tres entradas tienen el valor lgico 1, es decir, cuando las tensiones VIN1, VIN2 y
VIN3 tienen valores cercanos a Vdd, la situacin es la inversa: Los tres transistores P estn
en corte y los 3 transistores N estn en conduccin. Si VOUT est a 1 (VOUT 3v.) se
establece una corriente I que acaba por llevar VOUT a un valor cercano a Gnd (0 v.). De la
misma forma que en el caso anterior, si inicialmente VOUT 0v. no hay diferencia de
potencial entre VOUT y Gnd, y por tanto no se establece corriente alguna, conservando
VOUT su valor 0:

VIN1 VIN2 VIN3 VOUT


1 1 1 0

La tabla siguiente recoge los casos estudiados. Como puede verse, el circuito funciona como
una puerta NAND de 3 entradas.

[Respuesta:]
VIN1 VIN2 VIN3 VOUT
0 0 0 1
0 0 1 1
0 1 0 1
0 1 1 1
1 0 0 1
1 0 1 1
1 1 0 1
1 1 1 0

Elena Valderrama, Jean-Pierre Deschamps, Merc Rulln

Potrebbero piacerti anche