Académique Documents
Professionnel Documents
Culture Documents
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
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)
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;
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')