Vous êtes sur la page 1sur 6

Primer Parcial.

Programación 1 Nombre Número


Instituto de Computación CI parcial
Octubre 2006

Observaciones generales:
 Cada ejercicio tiene una única opción correcta.
 Una respuesta correcta vale 2 puntos.
 Una respuesta incorrecta implica restar 0.5 puntos.
 Un ejercicio sin respuesta lleva 0 punto.
 Debe entregar la planilla con las respuestas junto con la letra.
 Debe poner nombre completo, cédula y número de parcial en la planilla y en la letra.
Observaciones sobre el lenguaje de programación:
Los ejercicios se basan en el lenguaje Pascal tal como fue dado en el curso. Éste es el Pascal estándar con los siguientes
agregados:
 Utilización de ELSE en la instrucción CASE. Si no se especifica ELSE, se ejecutará la sentencia siguiente al
CASE, en caso de no coincidir con ninguna de las etiquetas.
 Evaluación por circuito corto de las operaciones booleanas (AND y OR condicional).

Ejercicio 1 Dados los siguientes fragmentos de código Ejercicio 2 Dadas las siguientes declaraciones, indique
Pascal, donde N es una constante mayor que 0 y las cuál de ellas es válida:
variables son de tipo Integer, diga cuáles producen la VAR
misma salida, independientemente del compilador. a tiempo, espacio: real;
velocidad: real;
(1) CONST
FOR i := 0 TO N DO num1 = 100;
BEGIN b
VAR
a := i + 1; num1, num2 : real;
WriteLn(i,a) CONST
END; program = 24;
WriteLn(i+1,a+1) c
VAR
linea, palabra : integer;
(2) CONST
FOR i := 0 TO N+1 DO fin = '$';
BEGIN d
VAR
a := i + 1; letra1; letra2 : char;
WriteLn(i,a) CONST
END e
mayor := maxint;
(3)
i := 0;
WHILE (i < N+1) DO Ejercicio 3 Para el siguiente código, donde N es una
BEGIN constante mayor que 0 y las variables son de tipo Integer,
WriteLn(i,i+1) diga cuál afirmación es correcta.
END
cont := 0;
(4) WHILE (cont < N) OR (x <> 8) DO
i := 0; BEGIN
REPEAT read(x);
a := i + 1; IF x = 8 THEN
WriteLn(i,a); cont := 0
i := i + 1; ELSE
UNTIL (i > N+1) cont := cont + 1
END;
a (1) y (4) write(x)
b (2) y (4) a Se despliega el último valor leído.
c (1) y (3) b La iteración es infinita.
d (3) y (4) c La variable cont nunca va a tener el valor N.
e (1) y (2) d Se despliega el último valor leído distinto de 8.
e El cuerpo del WHILE se ejecuta N veces.

1
Ejercicio 4 Indique a cuál de los siguientes lenguajes no Ejercicio 7 Considere los siguientes fragmentos de
pertenece la tira “11110001″. código donde la variable n es de tipo Integer.
a L1 = {'10' | '11'} ['0' '0' | '1'] {'1'}. (1)
IF (n >= 10) THEN
b L4 = {'11110001'}. n := n * 4;
ELSE
c L3 = {'0' '1'} ['0' '1']. n := n div 2;
n := n * 5;
WriteLn(n);
d (2)
IF (n < 10) THEN
BEGIN
n := n div 2;
e L2 = {'0' | '1' | '2'}. n := n * 5;
END
ELSE
Ejercicio 5 Se supone un programa que define las n := n * 4;
WriteLn(n);
siguientes variables:
VAR c : char; (3)
x,y: integer; IF (n >= 10) THEN
e : real; BEGIN
n := n * 5;
Luego de ejecutar una secuencia de instrucciones las n := n div 2;
END;
variables quedan con los siguientes valores: ELSE
c='-', x=-1, y=12, e=-1.9 n := n * 4
WriteLn(n);
La entrada del programa es la siguiente:
a12 -1 (4)
-12 55 IF (n < 10) THEN
-1.9 12 -1 BEGIN
n := n * 5;
Indique cuál fragmento de código deja las variables con n := n div 2;
los valores de arriba. END;
IF (n >= 10) THEN
a Read(c,x,y),ReadLn(e) n := n * 4;
WriteLn(n);
b ReadLn(c); Read(y); ReadLn(e,y)
(5)
c Read(c); ReadLn; Read(c); ReadLn(e,y,x) IF (n < 10) THEN n := n * 5;
IF (n < 10) THEN n := n div 2;
d ReadLn; ReadLn(c); ReadLn(e,y,x) IF (n >= 10) THEN n := n * 4;
WriteLn(n);
e ReadLn(c,x,y),ReadLn(e)
Indique cuál de las siguientes afirmaciones es correcta:
a Los fragmentos (2) y (3) producen la misma
Ejercicio 6 Sea el siguiente código: salida para cualquier valor de n.
a:= '*'; b Los fragmentos (3) y (4) producen la misma
WriteLn(a,'-',a); salida para cualquier valor de n y el (5) no.
Write(a); Los fragmentos (1) y (2) producen la misma
a:= '-'; c
Write(a,'*',a); salida para cualquier valor de n.
WriteLn; d Los fragmentos (3), (4) y (5) producen la
WriteLn(a) misma salida para cualquier valor de n.
Indique cuál de las siguientes salidas genera. e Ninguna de las afirmaciones anteriores es
El símbolo □ representa un espacio.
E correcta.
*-*
a *-*- Ejercicio 8 Considere el lenguaje L sobre el vocabulario
- {0, 1, 2} definido por la siguiente EBNF:
b *-*
*-*-- L = ({'2'} | {'1'}) {'0' | '1'}.
*-*
c *-** Indique cuál de las siguientes tiras no pertenece a L.
*
*-* a 12
d *
-*- b <nula>
-
*□-□* c 21
e *-□*□-
-
d 22
e 11

2
Ejercicio 9 Dada la siguiente declaración de variables: Ejercicio 12 Dadas las siguientes declaraciones, indique
VAR x,y,z : Integer; cuál de las expresiones de tipo boolean no es válida.
VAR
y las siguientes instrucciones: a, b : integer;
read(x); p, q : boolean;
readln(x); separa, c1 : char;
read(y,z)
a a DIV b = 0
Indique los valores que quedan cargados en las variables
b TRUE <> (q AND p)
x, y, z, al ejecutarse las instrucciones anteriores en
FreePascal y suponiendo que el usuario ingresa las c ord (separa) > ord (c1)
siguientes líneas: d separa > c1
1 2 3
4 5 6 e NOT a > b AND p
7 8 9

a x=1, y=4, z=5 Ejercicio 13 Se desea implementar en Pascal un


b x=4, y=7, z=8 programa que despliegue la cantidad de números pares
c leídos de la entrada. Todos los números están entre 1 y
x=2, y=5, z=8 100. El fin de la entrada está indicado por el número
d x=2, y=4, z=5 1000 que no debe ser considerado (centinela). Para
e resolver el problema se propone el siguiente programa
x=2, y=5, z=6
incompleto:
PROGRAM cant_num_1_100(INPUT,OUTPUT);
Ejercicio 10 Dadas las siguientes expresiones en Pascal: VAR cant, num : Integer;
BEGIN
(1) 2*2 <fragmento>
(2) 2*SQRT(4) WriteLn('Cantidad = ',cant)
END.
(3) (ROUND(-65.3) < TRUNC (-65.3)) AND p
(4) (ABS(k) = k) OR (ABS(k) = -k) Diga cuál de los siguientes fragmentos sirve para
(5) ORD(‘z’) - ORD(‘a’) completar el programa.
Indique cuál de las siguientes afirmaciones es correcta. cant := 0;
REPEAT
a Para que la expresión (3) tenga tipo correcto, la a read(num);
IF num MOD 2 = 0 THEN
variable p puede ser de tipo entero. cant := cant + 1
b Para que la expresión (4) tenga tipo correcto, la UNTIL num = 1000;
variable k debe ser de tipo boolean. cant := 0;
c read(num);
La expresión (5) no tiene tipo correcto. WHILE (num <> 1000) AND
d La expresión (1) es de tipo real. b (num MOD 2 = 0) DO
BEGIN
e La expresión (2) es de tipo real. cant := cant + 1;
read(num)
END;
cant := 0;
Ejercicio 11 Considere el lenguaje L definido por el FOR i := 0 TO 1000 DO
siguiente diagrama sintáctico: BEGIN
c read(num);
IF num MOD 2 = 0 THEN
cant := cant + 1;
i := num
END;
cant := 0;
read(num);
WHILE num <> 1000 DO
d BEGIN
IF num MOD 2 = 0 THEN
¿Cuál de las siguientes propiedades no cumple L? cant := cant + 1;
El largo de cada tira es múltiplo de la cantidad de read(num)
a END;
ocurrencias del símbolo '1'. read(num);
b La tira vacía pertenece a L. REPEAT
IF (num <> 1000) THEN
c El lenguaje tiene una cantidad infinita de e IF (num MOD 2 = 0) THEN
elementos. cant := cant + 1;
Ninguna tira tiene 3 ocurrencias seguidas del read(num)
d UNTIL (num = 1000);
mismo símbolo.
e El lenguaje tiene al menos 3 tiras diferentes de
largo 3.

3
Ejercicio 14 Dadas las siguientes declaraciones: Ejercicio 17 Indique cuál de las siguientes opciones no
VAR x, y : Integer; produce un error de compilación. Suponemos las
p, q : Boolean; variables:
y el siguiente fragmento de código: VAR
a,b : real;
x := 2; i,j : integer;
p := x-2 > 5; c : char;
x := 10;
q := p AND x = 10; a Read(a:2)
y := EXP(x)
b Read(a,b,'c')
Indique cuál afirmación es correcta.
c Write((a+b/ord('c')):10:2,c)
a Para evaluar q es necesario evaluar ambos
operandos del AND. d Write('i=' j:10)

b La segunda asignación de x (x:=10) altera el e Write(j:10;i::4)


valor de p.
c La asignación para la variable y es incorrecta.
Ejercicio 18 Dados los siguientes fragmentos de código,
d p y q evalúan a distintos valores booleanos. donde N es una constante mayor que 0, diga cuál
e El valor de q depende del orden de los afirmación es correcta.
operandos del AND.
(1)
x := 0;
FOR i := 1 TO N DO
Ejercicio 15 Considere el siguiente fragmento de código BEGIN
donde MAX es una constante con valor 3 y las variables x := x + 2;
son de tipo Integer. Para la secuencia dada de valores de WriteLn(x)
entrada, diga cuál es la salida que se desplegará. END

FOR i := 1 TO MAX DO (2)


BEGIN x := 0;
read(num); WHILE x <= N DO
WHILE num <> -1 DO BEGIN
BEGIN x:= x + 2;
WriteLn(i , ',' , num , '/'); WriteLn(x)
read(num) END
END
END; (3)
FOR x := 0 TO N DO
Entrada: BEGIN
x := x + 2;
3 4 −1 8 9 0 −1 −1 7 −2 10 −1 9 9 0 −1
WriteLn(x)
a END
1,3/2,4/3,8/
b 1,3/1,4/2,8/2,9/2,0/ a (3) y (2) despliegan la misma salida para
cualquier valor de N.
c 1,2/2,4/3,-1/ (1) y (2) despliegan la misma salida para
b
d 1,3/1,4/2,8/2,9/2,0/3,7/3,-2/3,10/ cualquier valor de N.
c (2) solamente despliega los números pares entre
e 1,3/1,4/1,-1/2,8/2,9/2,0/2,-1/3,-1/ 2 y N.
d Ningún fragmento despliega el valor N*2.
Ejercicio 16 Diga cuál afirmación no es correcta. e Para algún valor de N, (1) despliega la misma
cantidad de líneas que (2).
a La varibale de control del For puede ser de
cualquier tipo que permita la operación suma.
b La variable de control del For queda con valor
indefinido luego del ciclo.
c En una iteración con While, antes de cada paso
se evalúa la condición que controla el ciclo.
En una iteración con Repeat, luego de cada
d paso se evalúa la condición que controla el
ciclo.
e La variable de control del FOR no puede
utilizarse para lectura dentro del ciclo.

4
Ejercicio 19 Considere los siguientes códigos PASCAL: Ejercicio 21 Para las siguientes declaraciones, indique
cuál asignación compila correctamente.
(1)
IF (a > b) THEN CONST separa = ' ';
IF (d = 4) THEN d:= d+1 VAR
else a,b : integer;
Write('Escribiendo...') x,y : real;

(2) a a:= b MOD (trunc(x) / 2)


IF (a > b) THEN
begin b y:= b MOD trunc(x) / 2
IF (d = 4) THEN
d:= d+1 c a:= (b MOD trunc(x)) / 2
else
Write('Escribiendo...')
d y:= b MOD (trunc(x) / 2)
end e y:= b MOD (trunc(y) / 2)
(3)
IF (a > b) THEN
begin Ejercicio 22 Para el siguiente código donde las variables
IF (d = 4) THEN son de tipo Integer, diga cuál afirmación es correcta.
d:= d+1
end x := 2;
else y := 10;
Write('Escribiendo...') WHILE (x > 0) OR (y MOD x = 0) DO
x := x - 1;
(4) writeln(x);
IF (a > b) and (d = 4) THEN
d:= d+1 a El cuerpo de la iteración se ejecuta 3 veces.
else IF not (a > b) THEN
Write('Escribiendo...') b La condición del WHILE siempre vale TRUE.
Indique cuál afirmación es válida. c La condición del WHILE da error la primera
vez que es evaluada.
a Todas las opciones producen la misma salida. d La iteración es infinita.
b (1) y (4) producen la misma salida. e Se produce un error en la ejecución.
c (3) y (4) no producen la misma salida.
d (1) y (2) producen la misma salida. Ejercicio 23 Dada la siguiente declaración de variables:
e (1), (2) y (3) producen la misma salida. VAR n,a,x : Integer;

y los siguientes fragmentos de código:


Ejercicio 20 Considere los siguientes fragmentos de (1)
código PASCAL: IF x > 0 THEN
(1) IF a/x > 1 THEN
IF (a<>3) AND (a DIV (9 - sqr(a))<>0) THEN IF a > 0 THEN
WriteLn('a no es 3'); Write(n+3);
(2) (2)
IF (a DIV (9 - sqr(a))<>0) AND (a<>3) THEN IF (a > 0) AND (a/x > 1) AND (x > 0) THEN
WriteLn('a no es 3'); Write(n+3);
(3)
IF (a <> 0) AND ( 8 DIV a = 2) THEN (3)
IF (a = 0 ) OR (a DIV (a-a) = 1) THEN IF x > 0 THEN n:=n+1;
WriteLn('¿Contradicción?'); IF a/x > 1 THEN n:=n+1;
IF a > 0 THEN Write(n+1);
Indique cuál es la opción correcta.
(4)
El único caso en el cual se produce un error en IF x > 0 THEN
a la ejecución en el código (1) es para a= 3 y IF a/x > 1 THEN
IF a > 0 THEN
evaluación por circuito completo. Write(n+3)
El código (3) produce el mismo resultado si se ELSE
b evalúa mediante circuito corto o circuito Write('z');
completo, para cualquier valor de a. Indique cuál afirmación es correcta.
En (3) la sentencia WriteLn(‘¿Contradicción?’)
c sólo se ejecuta si se evalúa mediante circuito a Los fragmentos de código (1) y (2) producen la
corto. misma salida para cualquier valor de n, a y x.
(1) y (2) producen el mismo resultado si se b Los fragmentos de código (1) y (3) producen la
d evalúan mediante circuito corto para cualquier misma salida para cualquier valor de n, a y x.
valor de a. c En el código (4), se imprime una z cuando x > 0
(1) y (2) producen el mismo resultado si se y a/x <= 1.
e evalúan por circuito completo para cualquier d En el código (4), se imprime una z cuando
valor de a. x <= 0.
e Ninguna de las afirmaciones anteriores es
correcta.

5
Ejercicio 24 Considere los siguientes fragmentos de
código PASCAL, donde la variable a es de tipo Integer.

(1)
CASE a OF
a = 3 : WriteLn('El valor de a es 3');
a <> 3: WriteLn('El valor de a no es 3');
END;

(2)
IF (a = 3) THEN
WriteLn('El valor de a es 3')
ELSE
WriteLn('El valor de a no es 3');

(3)
CASE a OF
0,1,2,3,4: WriteLn('a es menor que 5')
ELSE WriteLn('a es mayor que 4')
END;

(4)
IF (a < 5) THEN
WriteLn('a es menor que 5')
ELSE
WriteLn('a es mayor que 4')

Indique cuál de las siguientes opciones es correcta:


a En (3) y (4) se produce la misma salida para
cualquier valor de a.
b (1) produce la misma salida que (2) y ambos
compilan correctamente.
El código en (4) se comporta diferente si se
c evalúa por circuito corto o por circuito
completo.
d El código en (3) no compila correctamente.
e (3) y (4) sólo producen la misma salida si
a >= 0.

Vous aimerez peut-être aussi