Answer Key for Exam A

Anuncio
Answer Key for Exam A
1.
Si la entrada al siguiente programa es -23, ¿cuál es la salida?
PROGRAM Absoluto;
VAR Digito: INTEGER;
FUNCTION Dificil(Numero:INTEGER):INTEGER;
begin
Numero := SQR(Numero);
Dificil:= TRUNC(SQRT(Numero));
end;
PROCEDURE Facil(var Numero:INTEGER);
BEGIN
Numero := ABS(Numero)
END;
BEGIN
READLN(Digito);
WRITELN(Dificil(Digito));
Facil(Digito);
WRITELN(0-Digito)
END.
(a)
(b)
(c)
2.
23
-23
23
23
El programa tiene errores de sintaxis y no compila
El fichero que almacenaba el programa “Barcos” (ver pregunta 15) ha perdido información, y en lugar
de los caracteres originales aparecen tres signos de interrogación seguidos de un número. Sabiendo que
el programa compilaba y ejecutaba sin error, ¿qué habı́a en lugar de “???2” ?
(a)
10
(b)
’b’
(c)
rangoColumnas
1
3.
¿Qué hace el programa Manipula?
PROGRAM Manipula;
CONST MAX = 10;
TYPE Datos = array[1..MAX] of INTEGER;
VAR Guarda : Datos;
i,j
: INTEGER;
PROCEDURE Cambia(VAR Elemento1, Elemento2 : INTEGER);
VAR Temp : INTEGER;
BEGIN Temp:= Elemento1;
Elemento1:= Elemento2;
Elemento2:= Temp
END; { Cambia }
BEGIN for i:= 1 to MAX do
READ (Guarda[i]);
READLN;
FOR i :=1 to (MAX div 2) do BEGIN
j:=2*i;
Cambia(Guarda[j], Guarda[MAX - j +1])
END;
FOR i :=1 to MAX do
WRITE (Guarda[i], ’ ’);
WRITELN
END.
4.
(a)
Imprime los números pares que se han introducido
(b)
Imprime invertida la secuencia de los números introducidos
(c)
Añade un valor fijo a los numeros introducidos y los imprime
El fichero que almacenaba el programa “Barcos” (ver pregunta 15) ha perdido información, y en lugar
de los caracteres originales aparecen tres signos de interrogación seguidos de un número. Sabiendo que
el programa compilaba y ejecutaba sin error, ¿qué habı́a en lugar de “???3” ?
(a)
estado
(b)
hundido
(c)
estadoCasilla
2
5.
Si la salida del siguiente programa es 15 12 20 10 64 36 18 24 21. ¿Cuál es el contenido del fichero
datosb?
PROGRAM REPETICION;
VAR fichero : FILE OF INTEGER;
VAR i,N,M
: INTEGER;
BEGIN
ASSIGN(fichero,’datosb’);
RESET(fichero);
FOR i:=1 TO 5 DO BEGIN
READ(fichero,N,M);
IF N=1 THEN WRITE (2*M, ’ ’)
ELSE IF N=2 THEN WRITE (M*M, ’ ’)
ELSE IF N=3 THEN WRITE (M+3, ’ ’);
IF ODD(N) THEN WRITE (M, ’ ’);
END;
CLOSE(fichero);
END.
6.
(a)
3 12 1 10 2 8 1 18 3 21
(b)
3 12 1 10 2 8 1 19 3 21
(c)
15 20 64 36 24 21
¿Cuál de las siguientes afirmaciones es falsa?
(a)
El programa Redefino de la pregunta 13 se puede implementar en el lenguaje C.
(b)
Podemos implementar en C sólo aquellos programas escritos en Pascal que no involucren gestión
dinámica de memoria.
El programa Manipula de la pregunta 3 se puede implementar en el lenguaje C.
(c)
7.
8.
¿Cuál de las siguientes afirmaciones es incorrecta?
(a)
Un compilador es capaz de traducir el código de un lenguaje de alto nivel al lenguaje máquina.
(b)
El montador-linkador interpreta en tiempo real el código fuente.
(c)
El compilador verifica la sintaxis del código.
¿Cuál de las afirmaciones sobre el siguiente programa es falsa?
PROGRAM MTPI;
TYPE
frase = String[30];
VAR
a: frase;
BEGIN {MTPI}
a:= ’Esto no es una frase’;
WriteLn(Ord(a[0]))
END.
(a)
la variable a ocupa en memoria 31 Bytes.
(b)
La instrucción WriteLn(Ord(a[0])) imprime “30” por pantalla.
(c)
La longitud máxima de a es de 30 caracteres.
3
9.
¿Cuál es la salida del siguiente programa?
PROGRAM musica;
VAR Radio, CD, Cinta, MP3: boolean;
BEGIN
Radio := true;
CD := Not Radio;
Cinta := CD or Radio;
MP3 := Not Cinta;
If Radio and Not MP3
then If MP3 and Cinta
then writeln (’Suena bien’)
else writeln (’Suena muy bien’)
else writeln(’Suena genial’)
end.
10.
(a)
Suena bien
(b)
Suena muy bien
(c)
Suena genial
La última salida del programa
Program BB;
Var
a, b , z : Integer;
Function Calculo (a:Integer; Var c,d : Integer): Integer;
Var
z : Integer;
Begin
z:= 1;
c:= c - 1;
Calculo := a + b + c - z - d;
WriteLn(’Calc : ’,a:4,b:4,c:4,d:4)
End;
Begin
a:= 12; b := 3; z := 6;
WriteLn;
Repeat
z := Calculo(a,b,z);
b := b - 2;
WriteLn(’Principal: ’, z:6);
Until ( z < 9)
End.
es
(a)
Principal: 9
(b)
Calc: 12 2 2 6
(c)
Principal: 0
4
11.
Dado el siguiente fragmento de código:
float a=0.001;
float *b=NULL;
float *c=NULL;
b=&a;
c=b;
a=*c+*b;
¿ Cuál de las afirmaciones es cierta ?
12.
(a)
Las variables a y c se almacenan en la misma dirección de memoria
(b)
La sentencia *c=4 modifica el contenido de la variable a
(c)
c almacena la dirección de la variable b
Si la entrada del siguiente programa es 10000 <enter> 0.06. ¿Cuál es la salida?
PROGRAM Compra;
VAR Oportunidad, Extra : real;
PROCEDURE Costeactual(VAR Coste : real; Estima: integer);
BEGIN
Estima:=Estima+trunc(Coste/100);
Coste:=(Estima div 10)*(10*Coste)
end; { Costeactual }
PROCEDURE Tasacoste(var Tasa : real; Dinero:real);
var Porcentaje : real;
BEGIN
READLN(Porcentaje);
Tasa:=Porcentaje*Dinero
END; { Tasacoste }
BEGIN
readln(Oportunidad);
Costeactual(Oportunidad,1);
Tasacoste(Extra, Oportunidad);
writeln(Extra:6:2, ’ ’,Oportunidad:6:2)
END.
(a)
0.06 10000.00
(b)
6.00 2.00
(c)
60000.00 1000000.00
5
13.
¿Cuál es la salida del programa Redefino?
PROGRAM Redefino;
VAR B : INTEGER;
PROCEDURE A(Var C: INTEGER);
FUNCTION B(A : INTEGER):INTEGER;
BEGIN
IF A > 8 Then B:=A
ELSE
B:=B(A+1)
END; { B }
BEGIN
C:=B(C);
END;
BEGIN
B:=2;
A(B);
Writeln(B);
END.
14.
(a)
2
(b)
8
(c)
9
A que equivale la expresión
vector[i]
(a)
*(vector+i)
(b)
*vector + i
(c)
&(vector +i)
6
15.
El fichero que almacenaba el código del programa “Barcos” ha perdido información, y en lugar de
los caracteres originales aparecen tres signos de interrogación seguidos de un número. Sabiendo que el
programa compilaba y ejecutaba sin error, ¿qué habı́a en lugar de “???1” ?
Program Barcos;
Const
MAX_TIRADAS = 100;
MAX_JUEGOS = 20;
Type
rangoFilas = ’a’..’j’;
rangoColumnas = 1..10;
estado = (noAtacada,agua,tocado,hundido);
Casilla = Record
ocupadaPorBarco : Boolean;
estadoCasilla
: estado;
End;
Tablero = Array [rangoFilas] Of Array [rangoColumnas] Of Casilla;
Coordenadas = Record
fila
: rangoFilas;
columna : rangoColumnas;
End;
JuegoBarcos = Record
ID1: Integer;
ID2: Integer;
partida: Tablero;
tirada : Array[1..MAX_TIRADAS] Of Coordenadas;
Finalizada:Boolean;
End;
CampeonatoBarcos =
Array [1..MAX_JUEGOS] Of JuegoBarcos;
Var
C1 : CampeonatoBarcos;
f : File Of CampeonatoBarcos;
Begin
C1[MAX_JUEGOS-1].tirada[1].fila := ???1 ;
C1[MAX_JUEGOS-1].tirada[1].columna := ???2 ;
C1[MAX_JUEGOS-1].partida[C1[MAX_JUEGOS-1].tirada[1].fila,3].estadoCasilla := ???3 ;
Assign(f,’BARCOS.OUT’);
ReWrite(f);
Write(f,C1);
Close(f);
End.
(a)
’b’
(b)
fila
(c)
rangoFilas
7
16.
17.
¿ Cual es el tamaño de un puntero a un long y a un double ?
(a)
El tamaño de un puntero a long es la mitad que el tamaño de un puntero a un double
(b)
Los 2 punteros tienen el mismo tamaño
(c)
El tamaño de un puntero a un long es el doble que el tamaño de un puntero a un double
Se nos pide diseñar una función que realice una estimación numérica del valor de la serie
∞
X
1
4
n
n=1
con un error menor que una tolerancia especificada (por ejemplo con una precisión de milésimas, es
decir, con un error menor que 0.001). La estructura de programación más apropiada para esta tarea
es
18.
(a)
Una estructura de iteración que utilice la instrucción for
(b)
Una estructura de iteración que utilice la instrucción while
(c)
Una estructura de control de flujo con un if
Dado el siguiente fragmento de programa
int v[10]={1,2,3,4,5,6,7,8,9,10};
int i,*a=NULL;
for (i=0;i<10;i++) {
a=&v[i];
*a=v[0]+i;
}
¿ Cuál de las siguientes afirmaciones es cierta ?
19.
20.
(a)
v[5]=5
(b)
v[3]=4
(c)
La asignación a=&v[i] es incorrecta
¿De qué tamaño es el fichero BARCOS.OUT después de ejecutar el programa “Barcos” (ver pregunta 15) ?
(a)
8100 Bytes
(b)
No es posible saberlo porque puede haber sido creado por otro programa.
(c)
405 Bytes
Dadas las siguientes definiciones y declaraciones:
type enlacepunt = ^enlace;
enlace = record
dato : integer;
sig : enlacepunt
end;
var ptr: enlacepunt;
nodo: enlace;
¿Cuál de los siguientes usos de new o del manejo de punteros es incorrecto?
(a)
new(ptr);
(b)
ptrˆ:=nodo;
(c)
nodoˆ.sig:=NIL;
8
21.
¿Qué hace el programa Textos suponiendo que tipoconjunto se ha definido como set of char?
PROCEDURE Textos(conjunto: tipoconjunto);
VAR Temp, Sal: char;
BEGIN
Sal:= ’ ’;
FOR Temp:= ’Z’ DOWNTO ’A’ DO
IF Temp IN conjunto THEN
Sal:=Temp;
WRITELN(Sal)
END;
22.
23.
(a)
Encuentra los caracteres blancos en conjunto
(b)
Encuentra la letra mayúscula menor en orden alfabético que haya en conjunto
(c)
Encuentra todas las letras mayúsculas que haya en conjunto
¿ Cuál de las siguientes expresiones permite reservar memoria para un vector que contenga números
de tipo float ?
(a)
(float*) malloc(10*sizeof(float *))
(b)
(float*) malloc(10)
(c)
(float*) malloc(10*sizeof(float))
¿ Cuantas veces se ejecuta la función printf en el siguiente fragmento de programa ?
a=9;
for (i=0;i<100;i++)
if ((0==a%4) || (i%2)==0)
printf("%d %d\n",a,i);
24.
25.
26.
(a)
100
(b)
50
(c)
0
Dada la sentencia char cadena[]=”maria”;. ¿Cual es el tamaño reservado por el compilador para la
variable cadena ?
(a)
5 bytes
(b)
6 bytes
(c)
La sentecia es incorrecta
Sabiendo que los tipos enumerados y Booleanos ocupan 1 Byte ¿Qué tamaño ocupa en la memoria la
variable C1, utilizada en el programa “Barcos” (ver pregunta 15) ?
(a)
8100 Bytes
(b)
405 Bytes
(c)
210 Bytes
¿Cuál de las siguientes acciones puede conducir a un error de programación de difı́cil detección?
(a)
Se asigna un puntero a una dirección de memoria de una variable no inicializada.
(b)
Se asigna un puntero al valor de otro puntero ya inicializado.
(c)
Un puntero se inicializa con un valor numérico entero arbitrario.
9
27.
¿Qué instrucción del programa genera un error?
Program AAA;
Var
a: Integer;
d,f: ^Integer;
Begin
{1} a:=201;
{2} New(d);
{3} d^ := a;
{4} f := d;
{5} d := @a;
{6} dispose(f);
{7} dispose(d)
End.
28.
(a)
La instrucción { 7 }.
(b)
La instrucción { 6 }.
(c)
La instrucción { 3 }.
¿Cuáles de los siguientes trozos de código son equivalentes?
{A}
while not eoln do begin
read(c);
if not eoln then read(c);
write(c)
end;
{B}
while not eoln do begin
if not eoln then read(c);
read (c);
write(c)
end;
{C}
while not eoln do begin
read(c);
read(c);
write(c)
end;
(a)
AyB
(b)
ByC
(c)
A, B y C son equivalentes
10
29.
Dada una matriz de 4 × 4 cuyos elementos están todos inicializados con un valor igual a 2. ¿ Cuál
será el valor final de la variable tot después de ejecutar el siguiente fragmento ?
for (i=tot=0;i<4;i++)
for (j=0;j<i;j++)
tot+=matriz[i][j];
30.
(a)
12
(b)
20
(c)
16
Dado el siguiente fragmento de programa
float media(int a,float *x);
int n;
float v[25];
float m;
¿ Cuál de las siguientes llamadas a la función media es correcta ?
(a)
m=media(n,v[25])
(b)
m=media(n,*v)
(c)
m=media(n,v)
11
Descargar