Está en la página 1de 1

a64b0469ff35958ef4ab887a898bd50bdfbbe91a-1761284

FUNDAMENTOS DE INFORMÁTICA
TEORÍA - SEPTIEMBRE 2015

DNI:
Apellidos, Nombre:
Grupo (o Profesor): ________________________________________________________________________

PROBLEMA 1. (1.5 puntos)


Dada una secuencia de números con un máximo de 50 elementos, un segmento nulo de dicha secuencia es una sucesión de
elementos consecutivos que suman 0. Implemente un programa que lea por teclado una secuencia de números acabada en cero
(supondremos que el cero no forma parte de la secuencia) y muestre por pantalla el tamaño del mayor segmento nulo contenido
en la misma, o bien un mensaje indicando que la secuencia no contiene ningún segmento nulo. Si lo desea, puede suponer que la
secuencia está ordenada. Por ejemplo:
Dada la secuencia: -9 -8 -1 1 3 5 6 0, el mayor segmento tiene un tamaño de 5
Dada la secuencia: -9 -8 -1 2 3 5 6 0, no hay ningún segmento nulo
Dada la secuencia: -9 -8 -1 1 3 5 9 0, el mayor segmento tiene un tamaño de 7

Reservados todos los derechos. No se permite la explotación económica ni la transformación de esta obra. Queda permitida la impresión en su totalidad.
PROBLEMA 2. (1.5 puntos)
Implementa una función llamada matriz_mayoritaria() que reciba como parámetro una matriz de M filas y N columnas
que contiene números naturales y devuelva una indicación de si es o no una matriz mayoritaria. Una matriz M x N es
mayoritaria, si un elemento almacenado en ella se repite más de M x N / 2 veces.

PROBLEMA 3. (3 puntos)
La gestión del tiempo y de las tareas es una competencia fundamental en cualquier empresa que desee maximizar su
productividad. Tal gestión suele realizarse manteniendo y actualizando, dos listados:
- Un primer listado con información relativa a los empleados de la empresa (se supone que la plantilla no es superior a 20
personas), que pueden acometer las tareas previstas en una jornada laboral. Sobre cada empleado, se almacena su dni,
su nombre, sus apellidos y el número de minutos que dicha persona puede emplear para completar las tareas previstas
(480 minutos como máximo, inicialmente, que corresponderían a 8 horas de una jornada laboral).
- Un segundo listado con las tareas por completar ese día en particular (un número nunca superior a 30). Cada tarea es
identificada por un código, una estimación del tiempo (en minutos) que se precisa para finalizarla y una lista con los dni
de las personas (nunca superior a 20 empleados), a las que se asigna el desempeño de la tarea.
Se pide:
a) (0.25 p.) Definir las constantes y tipos de datos necesarios para almacenar la información descrita.
b) (0.25 p.) Implementar un subprograma insertar_empleado(), que pida por pantalla los datos de una persona: su
dni, su nombre y sus apellidos e inserte sus datos en la estructura, inicializando el número de minutos que tiene
disponible a los 480 de su jornada.
c) (0.5 p.) Implementar un subprograma mostrar_lista_tareas() que, para cada tarea, muestre por pantalla el
código de la tarea y los nombres y apellidos de los empleados encargados de completarlas.
d) (1.0 p.) Implementar un subprograma mostrar_tareas_X_empleado() que, dado el dni de un empleado de la
empresa, muestre por pantalla sus datos y los códigos de las tareas en las que participa. El subprograma deberá además
devolver el número total de tareas en las que participa, considerando que si el dni no corresponde a ningún empleado,
devolverá -1.
e) (1.0 p.) Implementar un subprograma nueva_tarea() que, recibiendo como parámetros de entrada el código de una
nueva tarea y su tiempo de realización, almacene dicha tarea en la estructura de datos correspondiente y asigne de
forma automática las personas que deberán encargarse de completarla. La política de asignación es la siguiente:
- Cualquier empleado podrá colaborar en una tarea si dispone de tiempo.
- El tiempo máximo que un empleado puede dedicar a una tarea nunca será superior al 50% necesario para completar
la misma.
- Una vez se ha asignado un participante a una tarea se actualizará el tiempo del que dispone para dedicarse a otras
tareas.
Nota: para los apartados b), c), d) y e) deben pasarse todos los parámetros que se estimen oportunos, además de los indicados en
el enunciado.

PROBLEMA 4. (1 punto) - SÓLO QUIENES QUIERAN RECUPERAR DE LOS TEST 2 y 3


Hacer un programa que calcule los centros numéricos entre el número 1 y un valor n (n>0) leído por teclado. Un centro numérico
es un número que separa una lista de números enteros (comenzando en 1) en dos grupos de números, cuyas sumas son iguales.
El primer centro numérico es el 6, ya que separa la lista de 1 a 8 en dos grupos, (1, 2, 3, 4, 5) y (7, 8) cuyas sumas son iguales a
15. Por ejemplo, el número 9 no es centro numérico, ya que la suma desde 1 hasta 8 es 36, valor que no puede obtenerse al
sumar los números siguientes a 9 (10+11+12 < 36 y 10+11+12+13 > 36).

También podría gustarte