solución

Anuncio
E.U.I.TI.
EXAMEN 12 de Junio 2003
FUNDAMENTOS DE INFORMATICA - Iº PARTE (4 puntos)
Nombre: ....................................................................................
Especialidad:..............................................................................
NOTA:
Para realizar esta parte del examen tenéis 70 minutos.
Estas preguntas se darán por buenas o malas.
1. (0,25 puntos) Enlaza las siguientes sentencias
a. La memoria RAM...
1. es un programa en lenguaje máquina
b. Un compilador...
2. es la memoria de lectura y escritura
c. Un programa ejecutable...
3. es un programa que traduce un programa
d. La memoria ROM...
fuente en un programa ejecutable
4. es la memoria de sólo lectura
2. (0,3 puntos) Indica cuántos bits hacen falta para codificar:
a. el número 260
b. el carácter ‘:’
c. el carácter ‘G’
Explica cómo has llegado a las distintas soluciones.
Para codificar el número 260 hacen falta 9 bits, ya que con 8 sólo podemos codificar
hasta el 256 (28).
Los caracteres ‘:’ y ‘G’ se encuentran en la tabla ASCII, en la cual hay 256 caracteres.
Por lo tanto, para codificar cualquier carácter ASCII hacen falta 8 bits (28 = 256)
3. (0,2 puntos) Agrupar los siguientes elementos entre componentes físicos y componentes
no físicos del ordenador:
• MODEM Componente Físico
• Turbo Pascal Componente NO Físico
• Editor de texto Componente NO Físico
• Ratón Componente Físico
• Altavoces Componente Físico
• Windows Componente NO Físico
• Ficheros Componente NO Físico
• CD Componente Físico
4. (0,25 puntos) Explica brevemente qué hacen los siguientes comandos de MS-DOS
o DEL
El comando DEL permite borrar ficheros.
o MOVE
Sirve para mover ficheros de un directorio a otro.
o TYPE
Muestra el contenido del fichero por pantalla.
5. (0,75 puntos) Hacer el diagrama de flujo y codificar un programa que realice lo
siguiente: El usuario introduce dos números inferiores a 50 por teclado. El más pequeño
aumentarlo de 5 en 5 y al mayor disminuirlo de 2 en 2. Ir imprimiendo los diferentes
valores de ambos números, hasta que el menor supere al mayor.
INICIO
program Segidak;
uses WinCrt;
A,B
var A,B,Peq, Gran:Integer;
false
true
B<A
Gran← B
Peq ← A
Gran← A
Peq ← B
true
Peq ≤ Gran
begin
write('Introduce 2 números menores de 50: ');
read(A,B);
if A>B then Begin Gran:=A; Peq:=B; end
else Begin Gran:=B; Peq:=A; end;
while Peq<Gran do
begin
writeln( Peq, ' ',Gran);
Peq:=Peq+5; Gran:=Gran-2;
end;
end.
false
Peq,Gran
Peq ← Peq+5
Gran←Gran -2
FIN
6. (0,75 puntos) Di si las siguientes afirmaciones son Verdaderas o Falsas. En caso de que
sean falsas pon un ejemplo que lo demuestre.
a)
b)
c)
d)
Todo lo que se puede hacer con un while, se puede hacer con un for
Todo lo que se puede hacer con un for, se puede hacer con un while
Todo lo que se puede hacer con un if, se puede hacer con un case
Todo lo que se puede hacer con un case, se puede hacer con uno o con varios if
a) Falso.
Read(numero);
While numero<>5 do
Begin
Write(‘No has adivinado. Intentalo otra vez!: ‘);
Read(numero);
End;
b) Verdadero
c) Falso.
If numero=3,14 then write(‘El número es PI’);
d) Verdadero.
7. (0,5 puntos) Qué es lo que saca por pantalla este programa?
program mostrar;
uses wincrt;
var I,K:Integer;
begin
for I:= 1 to 5 do
begin
for K:= 1 to I do
write ('*');
writeln;
end;
for I:= 4 downto 1 do
begin
for K:= 1 to I do
write ('*');
writeln;
end;
end.
*
**
***
****
*****
****
***
**
*
8.
(1 punto) Se ha intentado realizar un programa que nos diga cuantas veces aparece la
subsecuencia ‘ta’ en una secuencia de caracteres terminada en punto que introduce el
usuario. Sin embargo, nos da varios errores y no hace lo que nosotros queremos.
Sabemos que hay 5 errores, localizalos y corrigélos sobre el mismo programa.
Ejemplo: (* En negrita los datos introducidos por el usuario *)
Escribe una frase (el punto para terminar): abbattkktajjtaiitaktaoi.
La subsecuencia –ta– aparece 4 veces.
program examen;
uses wincrt;
var
Actual,Anterior: Char;
Anterior, ContTa:Integer;
begin
ContTa:=0;
write (‘Escribe una frase (punto para terminar): ');
Anterior:='b';
read(Actual);
while Actual <> '.' do
begin
if (Actual='a') or and(Anterior='t') do then ContTa:= ContTa+1;
Anterior:= Actual;
read(Actual);
end;
write(' La subsecuencia -ta- aparece ', 'ContTa',' veces');
end.
E.U.I.TI.
EXAMEN 12 de Junio 2003
FUNDAMENTOS DE INFORMATICA – II PARTE (6 puntos)
Desde el ayuntamiento nos han pedido que hagamos un programa que les ayude a
gestionar las farolas de cierta zona de la ciudad.
Esta zona de la ciudad tiene 5 calles, y en cada una de ellas hay15 farolas numeradas del
1 al 15.
Con el fin de ahorrar, el ayuntamiento ha decidido que no se van a encender todas las
farolas de cada calle, sino que en cada calle habrá un número máximo de farolas que
pueden estar encendidas simultáneamente. (Nosotros almacenaremos estos máximos en
un array llamado MaximoCalle)
El programa que nos piden debe realizar las siguientes tareas:
1. Leer el nº máximo de farolas que pueden estar encendidas simultáneamente en cada
calle. (0,25 puntos)
Ejemplo:
Introduzca el máximo posible de farolas encendidas de la calle 1: 2
Introduzca el máximo posible de farolas encendidas de la calle 2: 3
...
Introduzca el máximo posible de farolas encendidas de la calle 5: 15
2. Encender farolas. Avisar en caso de que se intente exceder el máximo permitido
para esa calle. (2 puntos)
Ejemplo:
Introduzca calle y farola (0 0 para terminar): 1 4
Introduzca calle y farola (0 0 para terminar): 1 3
Introduzca calle y farola (0 0 para terminar): 1 14
¡¡Error!! En la calle 1 no puede haber más de 2 farolas encendidas
Introduzca calle y farola (0 0 para terminar): 3 4
Introduzca calle y farola (0 0 para terminar): 5 11
Introduzca calle y farola (0 0 para terminar): 0 0
3. Obtener el nº de farolas encendidas en cada calle y el máximo para esa calle (1
punto)
Ejemplo:
En la calle 1 hay 2 farolas encendidas de un máximo de 2.
En la calle 2 hay 0 farolas encendidas de un máximo de 3.
En la calle 3 hay 1 farolas encendidas de un máximo de 2.
En la calle 4 hay 0 farolas encendidas de un máximo de 6.
En la calle 5 hay 1 farolas encendidas de un máximo de 15.
4. Para cada calle indica si es más seguro ir por el lado de la derecha o el de la
izquierda. Para ello, consideraremos más seguro aquel lado que tenga más farolas
encendidas. En caso de que el número de farolas encendidas en cada lado coincida,
o estén todas apagadas, diremos que los dos lados son igual de seguros. Supón que
las farolas con número par están en el lado derecho y las de número impar en el
izquierdo. (0,75 puntos)
Ejemplo:
En la calle 1 da igual ir por la derecha o por la izquierda.
En la calle 2 da igual ir por la derecha o por la izquierda.
En la calle 3 es más seguro ir por la derecha.
En la calle 4 da igual ir por la derecha o por la izquierda.
En la calle 5 es más seguro ir por la izquierda.
5. Obtener el número de calles que tienen todas las farolas apagadas. (0,5 puntos)
Ejemplo:
El número de calles con todas las farolas apagadas es 2.
6. Clasificar las calles según los siguientes criterios: (1 punto)
• Todas las farolas apagadas: 'A oscuras'
• Si hay encendidas tantas como indica su máximo de calle y hay más
encendidas que apagadas: 'Muy Luminosa'
• Si hay encendidas tantas como indica su máximo de calle, pero hay más
apagadas que encendidas: 'Luminosa'
• En cualquier otro caso: 'Tenebrosa'
Ejemplo:
La calle 1 es luminosa.
La calle 2 está a oscuras.
La calle 3 es tenebrosa.
La calle 4 está a oscuras.
La calle 5 es tenebrosa.
7. Apagar todas las farolas (0,5 puntos)
program Farolas;
uses wincrt;
const NumCalles=5;NumFarolas=15;
var FarolasCalle: array [1..NumCalles,1..NumFarolas] of Integer;
Encendidas,MaximoCalle: array [1..NumCalles] of Integer;
F,K,ContIzq,ContDcha,Apagadas: Integer;
begin
{Al principio todas las farolas están apagadas}
{En la tabla Encendidas almacenaremos cuantas farolas hay encendidas en cada
calle}
{también hay que inicializarlo }
for K:=1 to NumCalles do
begin
Encendidas[K]:=0;
for F:=1 to NumFarolas do FarolasCalle[K,F]:=0;
end;
{1-Leer el nº máximo de farolas que pueden estar encendidas simultáneamente
en cada calle. }
for K:=1 to NumCalles do
begin
write('Introduzca el máximo posible de farolas encendidas de la calle
',K);
read (MaximoCalle[K]);
end;
{2- Encender Farolas}
write('Introduzca calle y farola (0 0 para terminar):');
read (K,F);
while (K<>0) and (F<>0) do
begin
if Encendidas[k]<MaximoCalle[K] then
begin
FarolasCalle[K,F]:=1;
Encendidas[K]:= Encendidas[K]+1;
end
else
begin
writeln('
¡¡Error!!
En
la
calle',K,'no
puede
de',MaximoCalle[K],'farolas encendidas');
end;
write('Introduzca calle y farola (0 0 para terminar):');
read (K,F);
end;
haber
más
{3- Nº de farolas encendidas en cada calle}
for K:=1 to NumCalles do
begin
write(' En la calle ',K, 'hay ', Encendidas[k], ' farolas encendidas de
');
writeln('un máximo de ',MaximoCalle[K]);
end;
{4- Decir por dónde es más seguro andar}
for K:=1 to NumCalles do
begin
ContIzq:=0;
ContDcha:=0;
for F:=1 to NumFarolas do
if (F mod 2=1) and (FarolasCalle[K,F]=1)
then ContIzq:=ContIzq+1
else if (F mod 2=0) and (FarolasCalle[K,F]=1)
then ContDcha:=ContDcha+1;
if ContIzq=ContDcha
then writeln(' En la calle',K,' da igual ir por la derecha o por la
izquierda.')
else if ContIzq>ContDcha
then writeln(' En la calle',K,' es más seguro ir por la izquierda.')
else writeln('En la calle',K,' es más seguro ir por la derecha.');
end;
{5- Nº de calles con todas las farolas apagadas}
Apagadas:=0;
for K:=1 to NumCalles do
if Encendidas[k]=0 then Apagadas:=Apagadas+1;
writeln('El número de calles con todas las farolas apagadas es',Apagadas);
{6- Clasificar las calles}
for K:=1 to NumCalles do
if
(Encendidas[K]=MaximoCalle[K])
and
(Encendidas[k]>NumFarolasEncendidas[k])
then writeln('La calle',K,'es muy luminosa')
else if (Encendidas[K]=MaximoCalle[K]) and (Encendidas[k]<NumFarolasEncendidas[k])
then writeln('La calle',K, ' es luminosa')
else if Encendidas[K]=0 then writeln('La calle',K,'está a oscuras')
else writeln('La calle',K, 'es tenebrosa');
{7- Apagar las farolas}
for K:=1 to NumCalles do
begin
Encendidas[K]:=0;
for F:=1 to NumFarolas do FarolasCalle[K,F]:=0;
end;
end.
Descargar