Está en la página 1de 4

Primer Parcial.

Programación 1 Nombre Número


Instituto de Computación CI parcial
Curso 2009

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 instrucción 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 Considere el siguiente código: Ejercicio 4 Dadas las siguientes declaraciones de


var suma, i, j : integer; constantes, tipos y variables:
begin CONST MAX1 = 100;
suma := 1; TYPE
for i := 1 to 5 do Rango1 = 1 .. MAX1;
for j := i+3 downto 5 do Elemento = record
suma := suma + 1; cam1 : Integer;
writeln(suma) cam2 : Char;
end cam3 : Boolean
Indique la salida que corresponde: end;
Lista = array [Rango1] of Elemento;
a 4 VAR lis : Lista;
e : Elemento;
b 7 num : Integer;
ind : Rango1;
c 11
Diga cuál asignación producirá un error de compilación.
d 16 (Se asume que ind tiene valores dentro de su rango.)
e Ninguna de las anteriores a lis[ind].cam3 := e.cam1>0
b lis[1].cam1 := ord(e.cam2)
Ejercicio 2 Dadas las siguientes declaraciones: c lis[2].cam2 := succ(lis[1].cam2)
type x = array ['a'..'f'] of Boolean;
var a:x; d lis[ind].Elemento.cam1 := num mod e.cam1

¿Cuál asignación es correcta? e lis[ind] := e

a a['f'] := a['g'] Ejercicio 5 Indique cuál es la salida que produce el


siguiente fragmento de programa. La variable a es entera.
b a['b'] := a['h'] and a['b']
a:= 4;
c a['a'] := not a['f'] if a <= 10 then
write('hola,');
d a[false] := true if a <= 4 then
case (a mod 3) of
e a['c'..'d'] := false..true 0: write('pedro');
1: write('juan')
Ejercicio 3 Sean m y n variables enteras y b variable else
booleana en las declaraciones siguientes: write('mario')
PROCEDURE proc (a, b : Integer; VAR x: boolean); end
else if sqr(a) <= 20 then
FUNCTION func (v, w:Integer) : boolean;
write('pablo');
Diga cuál de las siguientes instrucciones es válida:
a func := proc(m,n,b) a hola,pablo
b if (func (m,n)) then write ('si')
else write ('no') b hola,juan
c proc(2.5,5,b) c hola,pedro
d proc(m,n, proc(3,1,b)) d hola,mario
e proc(12,15,b) := func(12,15) e hola,juanpablo
Ejercicio 6 Sean las siguientes declaraciones de
Ejercicio 9 ¿cuál es la salida del siguiente programa?:
variables:
program progCruces;
var k: integer; const
p: boolean; N = 3;
c: char; CRUZ = '+';
var
Indique cuál de las siguientes instrucciones no provoca cruces : array[1..N] of integer;
un error al compilar: i,j : integer;
case not p of true: write(ord(c)) begin
a for i:=1 to N do
else read(k) end
cruces[i] := 2*i;
b k:= ord(p) or p < 1 writeln;
c for i:=1 to N-1 do
p:= p or k < 1 begin
d for j:=cruces[i] to cruces[i+1] do
writeln('valor ', sqrt(ord(p)) div k)
write(CRUZ);
e succ(c) := 64 writeln
end
end.
Ejercicio 7 Dadas las siguientes declaraciones de
a +++
variables: +++
b ++
VAR
++++
cantidad, promedio, total : Integer;
c +
valor : Real;
+
c1, c2 : Char;
d ++
¿Cuál instrucción es válida? ++
e ++
a chr(c1)
b promedio := cantidad / total
Ejercicio 10 Dadas las siguientes declaraciones:
c c2 := 'c1'
CONST
d c2 := c1 + 1 CANT_COL = 8;
TYPE
e valor := total Color = (rojo,azul,blanco,verde,amarillo,
negro, celeste, violeta);
VAR
Ejercicio 8 Sea el programa: i : Integer;
var col1, col2 : Color;
i,k,suma,prod : integer;
begin Diga qué fragmento de código compila y se ejecuta en
i:= 4; forma correcta:
suma:= 0;
while (i<=15) and (i mod 7 > 0) do a col1 := Color(0) + 1
begin col1 := rojo;
prod:= 1; b for i:=1 to CANT_COL do
for k:= i downto 5 do col1 := succ(col1)
prod:= prod + k; for i:=0 to CANT_COL-1 do
i:= succ(i); c
writeln(Color(i))
suma:= suma + prod col1 := Color(0);
end; d
col2 := succ(col1)
writeln(suma) col1 := 'rojo';
end. e
col2 := succ(col1)
Indique cuál afirmación de las siguientes se cumple:
a El programa compila correctamente pero
produce un error en tiempo de ejecución Ejercicio 11 Considere el siguiente código:
b El programa ejecuta sin errores, pero no termina var suma, num, i : integer;
nunca. begin
c El programa ejecuta sin errores y despliega el suma := 0;
valor 19 i := 0;
read(num);
d El programa compila y despliega el valor 12 while (num < 10) or (i <= 3) do
begin
e El programa compila y despliega el valor 17 suma := suma + num;
i := i + 1;
read(num)
end;
writeln(suma)
end
Diga cuál es el valor que se desplegará si la
entrada es: 5 6 11 4 12
a 11 Ejercicio 15 Sean las declaraciones:
b 22 var mes1,mes2: 1..12;
dia1,dia2: 1..31;
c 26
de manera tal que los pares (dia1,mes1) y (dia2,mes2)
d 38 representan dos fechas dentro del mismo año. Indique
e Ninguna de las anteriores cuál fragmento de código despliega:
• 'antes' si la fecha (dia1,mes1) es anterior o igual
a la fecha (dia2,mes2).
Ejercicio 12 Considere las siguientes declaraciones de
• 'después' si la fecha (dia1,mes1) es posterior a
variables:
la fecha (dia2,mes2).
var a,b: integer;
x,y: real;
f,g: boolean; if (mes1<=mes2) and (dia1<=dia2) then
a writeln('antes')
Indique cuál de las siguientes es una expresión de tipo else
writeln('después')
integer: if (mes1 = mes2) and (dia1 <= dia2) then
a b writeln('antes')
a + b * (a div b) * x else
b abs(x) / abs(y) + a writeln('despues')
if mes1 = mes2 then
c a mod b - ord(f) * ord(g) if dia1 <= dia2 then
c write('antes')
d sqrt(a) * x else
write('despues')
e sqr(a) * exp(b) else write('despues')
case (mes1*31 - mes2*32 + dia1 - dia2)
of
Ejercicio 13 Diga qué se despliega en la salida al 0,1,2: write('antes');
d -1 : write('despues')
ejecutarse el siguiente programa: else
PROGRAM Prog(OUTPUT); write('despues')
VAR a : Integer; end
FUNCTION f(x, y:Integer) : Integer; if (mes1 < mes2) or
BEGIN (mes1 = mes2) and (dia1 <= dia2)
y := y+2; e then
x := a+3; write('antes')
a := a+1; else
f := a+x write('despues')
END;
PROCEDURE p(VAR x:Integer); Ejercicio 16 Dado el siguiente programa:
VAR v : Integer;
BEGIN PROGRAM principal (input, output);
v := f(x,x); VAR x, y : Integer;
a := 5 + v - x PROCEDURE a1 (VAR a : Real);
END; VAR z : char;
BEGIN PROCEDURE a2 (b : char);
a := 2; VAR j : Integer;
p(a); BEGIN
WriteLn(a) . . .
END. END;
BEGIN
a 5 . . .
END;
b 2 PROCEDURE b1;
VAR k : Integer;
c 10 BEGIN
d . . .
12 END;
e 8 BEGIN
. . .
END.

Ejercicio 14 ¿Cuál de las siguientes declaraciones de


sub-rangos es válida? Diga cuál afirmación es correcta:
a Type Rango = 1..5,101..105; a x no puede referenciarse dentro del
procedimiento a1.
b Type Rango = a-f;
b y no puede referenciarse dentro del
c Type Rango = 1..5,6; procedimiento a2.
d c z no puede referenciarse dentro del
Type Rango = -99..0;
procedimiento a2.
e Type Rango = 'a','e','i','o','u'; j puede referenciarse dentro del procedimiento
d
a1.
e k nopuede referenciarse dentro del
procedimiento a2.
Ejercicio 17 Dado el programa: Ejercicio 19 Dadas las declaraciones
PROGRAM Parcial(output); var A : array[1..5] of integer;
VAR m,n :Integer; i, j, aux, suma : integer;
PROCEDURE proc(a, b: Integer; VAR x: Integer);
BEGIN y los códigos siguientes (suponga que el arreglo ya ha
if a = b then x:= a+b
else x:=a-b sido inicializado):
END; i) suma := 0;
FUNCTION func(v, w: Integer): Integer; for i := 1 to 5 do
BEGIN begin
if w mod 2 = 0 then suma := suma + A[i];
begin A[i] := suma
proc(v+1,w,w); end
func:= w ii) suma := 0;
end for i := 1 to 5 do
else begin begin
proc(v-1,w,w); aux := A[i];
func:=w A[i] := suma;
end suma := suma + aux
END; end
BEGIN iii) suma := 0;
read(m,n); for i := 5 downto 1 do
WriteLn(func(m,n)) begin
END. for j := 1 to i do
suma := suma + A[j];
Diga cuál de las siguientes afirmaciones es correcta: A[i] := suma
end
a El cabezal de la función func provoca un error iv) suma := 0;
de compilación. for i := 5 downto 1 do
b Alguna de las invocaciones del procedimiento begin
proc provoca un error de compilación. suma := suma + A[5-i];
A[i] := suma
c La invocación de la función func provoca un end
error de compilación.
d El programa compila y termina siempre que se Diga qué códigos producen el siguiente resultado: cada
ingresen datos enteros. celda del arreglo a[i] debe contener la suma de los
e El programa compila pero no termina para m y n valores que originalmente estaban contenidos en las
negativos. celdas a[1] hasta a[i] (inclusive):

Ejercicio 18 Indique cuál de los siguientes códigos deja a solo i)


el valor de 'a' elevado a la 'b' en la variable 'pot' para un b solo ii)
valor 'a' real cualquiera y un valor 'b' entero no negativo
c ii) y iv)
cualquiera. Se supone que todas las variables fueron
declaradas correctamente. d i) y iii)
pot:= 1; e i) y iv)
while b > 0 do
a begin
pot:= pot * pot;
a:= b - 1;
end; Ejercicio 20 Se definen las siguientes constantes:
pot:= a; const MaxI = 23;
b for i:= 2 to b do MaxR = 23.23;
pot:= pot * a; MaxCh = 'Z';
pot:= 1; Indique cuál de las siguientes declaraciones de tipos es
repeat
c b:= b-1; correcta:
pot:= pot * a
until b <= 0;
a arr1 = array [1..MaxR] of Char;
pot:= 1; b arr2 = array [1..MaxI] of MaxCh;
while b > 0 do
d begin c arr3 = array ['A'..MaxCh] of 1..MaxInt;
pot:= pot * a;
b:= b-1 d arr4 = array [MaxI..MaxR] of char;
end;
pot:= 1; e arr5 = array [3..MaxI] of 4..MaxR;
e for i:= 1 to trunc(a) do
pot:= pot * b;

También podría gustarte