Ej- 12.
1
Desarrollar la función acertantes para que obten-
ga como resultado el número de acertantes de
14 resultados de una quiniela. Los resultados de la
quiniela están en un archivo de texto con los 14 car-
acteres de los resultados, sólo con los caracteres ‘1’,
‘X’ y ‘2’. Las quinielas de los jugadores se encuen-
tran en un archivo de texto y cada línea contiene
los 14 caracteres que el jugador ha propuesto en
su quiniela. Los archivos existen, no están vacíos y
están correctamente generados. Los parámetros
de la función son los nombres de los dos archivos.
m
Se desconoce el número de jugadores. Para los
.co
ejemplos de los archivos de las figuras el resultado
il
de la función acertantes es 3.
ma
g
5@
#include<stdio.h>
0
#include<string.h>
nio
to
an
de
ra
lau
1
Ej- 12.2
Se desea trabajar con un archivo de texto plano por líneas y cuyo formato viene dado por:
a) Que cada línea empieza por una cadena alfanumérica de longitud máxima igual a 4,
b) y una sucesión de números reales (coma flotante) positivos que finaliza en -1.0; se sabe
que esta sucesión tiene al menos 1 elemento.
Todos los datos se separan por espacios y/o tabuladores. Se debe guardar los datos de cada línea
en las variables cuyo identificador se indica encima de los datos del ejemplo. Se puede suponer
que si una línea de texto existe su formato es el correcto (cumple con las reglas dadas respecto
de los datos que contiene).
m
Completar la función (leer) para que, dado un archivo como el descrito, ya abierto:
.co
c) Lea los datos de todas las líneas y las guarde en las variables indicadas.
il
ma
d) Muestre por pantalla: el valor de la variable (cod) seguido de salto de línea y
g
5@
e) retorne el número total de valores de la sucesión (Ai) que están en el intervalo [0,1] ó en el
0
intervalo [10,11]. Se deben contar todos, estén en la línea que estén.
nio
Se pueden declarar discrecionalmente otras variables.
to
an
Ejemplo:
de
cod Ai Ai Ai Ai Ai Ai
ra
------------------------------------------------------------------
lau
Tres 0.4 26.4 -1.0;
Quad 3.4 0.5 3.2 2.2 -1.0;
2Dos 9.4 6.4 0.7 -1.0;
ht4 10.3 39.4 9.7 13.2 0.8 -1.0;
Salida por pantalla del ejemplo:
Tres
Quad
2Dos
ht4
En [0,1] o [10, 11]: 5
2
Ej- 12.3
Se desea trabajar con un archivo de texto plano por líneas y cuyo formato viene dado por:
a) Que cada línea empieza por una letra,
b) seguida de 2 números reales (coma flotante)
c) y una sucesión de números reales (coma flotante) positivos que finaliza en -1.0, se sabe que
esta sucesión tiene al menos 1 elemento.
Todos los datos se separan por espacios y/o tabuladores. Se debe guardar los datos de cada línea
en las variables cuyo identificador se indica encima de los datos del ejemplo. Se puede suponer
que si una línea de texto existe su formato es el correcto (cumple con las reglas dadas respecto
de los datos que contiene).
SE PIDE:
m
.co
Completar la función (leer) para que, dado un archivo como el descrito, ya abierto:
a) Lea los datos de todas las líneas y las guarde en las variables indicadas.
il
ma
b) Muestre por pantalla el valor de la variable (cod) seguido de salto de línea y
g
c) retorne la suma de todos las valores de la expresión:
5@
a+b
0
-----
nio
Xi + 1
to
para los valores de a, b y Xi (estén en la línea que estén) Se pueden declarar discrecionalmente
an
otras variables.
de
Ejemplo:
Salida por pantalla del ejemplo:
ra
cod a b Xi Xi Xi Xi Xi Xi
a
lau
------------------------------------------------------------------
c
a 5.2 13.2 3.5 6.7 -1.0
f
c -4.2 3.6 2.9 12.2 9.3 6.4 5.6 -1.0
j
f 1.2 3.2 7.1 8.6 6.6 -1.0
La suma es: 8.412961
j 5.2 -3.2 3.3 15.1 9.3 -1.0
3
#include <stdio.h>
double leer(FILE *g) {
char cod; double a, b, Xi;
m
.co
il
}
g ma
int main() {
5@
char filename[] = “[Link]”;
FILE *g = fopen(filename, “r”);
0
if ( g != NULL ) {
nio
double suma = leer(g);
printf(“La suma es: %f”, suma);
to
fclose(g);
an
}
else {
de
printf(“No se puede abrir ‘%s’\n”, filename);
ra
}
return 0;
lau
4
Ej- 12.4
Cada dígito de un valor entero positivo se almacena en una componente de un vector de en-
teros. La dimensión máxima del vector es 100. El dígito de menor peso (100=1) ocupa la compo-
nente de índice 0 del vector, el de peso 101 ocupa la componente de índice 1 y así sucesivamente.
Construir la función producto para que tras la llamada producto(num,d,res); multiplique num,
un número de 99 dígitos como máximo, por un dígito decimal d (0-9) y devuelva el resultado en
res, otro vector de dimensión 100 y que guarda el número de la misma manera que num.
void producto(int num[100], int d, int res[100]) {
m
.co
il
g ma
5@
}
0
nio
Ej- 12.5
to
Dado un formato de representación binaria de un valor numérico real en coma flotante normali-
an
zada con 9 bits, 5 para mantisa y 4 para exponente, ambos en complemento a 2:
de
ra
a) representar en este formato binario el valor decimal -0.25 y
lau
b) indicar, en el sistema numérico decimal, el valor positivo más grande (el de mayor valor
absoluto) que se puede representar.
Ej- 12.6
Escribe la respuesta a las siguientes cuestiones
a) Codifica tu número de matrícula en hexadecimal (ejemplo de solución para
22000)
b) Si la frecuencia de reloj de sincronización del procesador de tu ordenador es de
500 MHz, entonces su tiempo de ciclo en nanosegundos es…
c) Si se tienen ocho bits para la representación de un valor numérico entero en
complemento a dos, ¿cuál es el mayor número positivo que se puede representar?
(indicar el resultado en el sistema numérico decimal)
d) El intervalo de posibles valores del resultado de la expresión (rand()%6 +1) +
(rand()%6 +1) es...
5
Ej- 12.7
Escribir una función crecientes que, al ejecutarse, pida al usuario introducir por teclado valores
estrictamente positivos que sean asignados a los n primeros elementos de un array v de datos
de tipo double. La petición de valor para su asignación a cada elemento del array se debe repetir
si el valor introducido no es estrictamente mayor que el anterior. Por lo tanto, al terminar la eje-
cución de la función los n primeros valores del array deben tener valores estrictamente positivos
en orden estrictamente creciente. v y n son los dos parámetros de la función. Nota: se supone
que n es siempre mayor que 0.
m
.co
il
g ma
5@
0
nio
to
an
de
ra
lau
6
Ej- 12.8
Construir una función contiene que indique si todos los caracteres de una cadena s1 se encuen-
tran en otra s2. En este caso, la función debe retornar el valor 1 y, en caso contrario, debe retor-
nar el valor 0. s1 y s2 son los parámetros de la función. Si s1 está vacía la función debe retornar el
valor 1. Por ejemplo, la llamada a contiene(“ella”, “clave”) debe retornar el valor 1, mientras que
contiene(“bola”, “pelota”) debe retornar el valor 0. Nota: puede emplearse la librería string.h.
m
.co
il
g ma
5@
0
nio
to
an
de
ra
lau
7
Ej- 12.9
La ley de Ohm establece que la intensidad de corriente (en amperios) que atraviesa un conduc-
tor es directamente proporcional a la diferencia de potencial (en voltios) entre sus extremos e
inversamente proporcional a la resistencia (en ohmios) que presenta el conductor. Desarrollar
la función ohm, para que recibiendo mediante tres parámetros formales por referencia los va-
lores reales de dos de las tres magnitudes en sus unidades correspondientes, calcule y actualice
la tercera, sea cual fuere la incógnita. Nota importante: la variable incógnita a calcular se iden-
tificará por contener un valor negativo al realizar la llamada a la función, mientras que las otras
dos contendrán un valor positivo. En cualquier otro caso, la función no calcula, ni modifica nada
y debe mostrar por pantalla la cadena Datos erroneos.
m
.co
il
g ma
5@
0
nio
to
an
de
ra
lau
8
Ej- 12.10
Construir una función que retorne el número de cifras diferentes de un número entero positivo
(mayor o igual que 0) dado como parámetro. Por ejemplo: para el valor 0 la función retorna 1,
para 12348 retorna 5, para 3934539 retorna 4 y para 888 retorna 1.
m
.co
il
g ma
5@
0
nio
to
an
de
ra
lau
9
Ej- 12.11
Construir una función balanceo para que, dada como parámetro una expresión matemática
almacenada en una cadena, compruebe si el balanceo de paréntesis es correcto (se abren y se
cierran correctamente). Para ello es necesario comprobar que: (a) el número de cierres nunca es
superior al de aperturas durante todo el recorrido del primero al último carácter de la cadena y
(b) el total de aperturas y el total de cierres es el mismo al finalizar el recorrido. Si el balanceo es
correcto entonces debe retornar el valor 1 y, en caso contrario, retorna el valor 0. Por ejemplo, la
llamada a balanceo(“a*(b+(c-d)/e)”) debe retornar el valor 1 y balanceo(“a*(b+)c)-d(/e)”) debe retor-
nar el valor 0. Nota: no puede emplearse ninguna función de la librería string.h.
m
.co
il
gma
5@
0
nio
to
an
de
ra
lau
10
Ej- 12.12
Escribir una función equals para que retorne 1 si los valores de to-
dos los campos respectivos de dos parámetros de tipo struct item
son iguales y 0 en caso contrario. La declaración del tipo de dato
struct item se facilita a la derecha. Nota: puede emplearse la librería
string.h.
m
.co
il
g ma
5@
0
nio
to
an
de
ra
lau
11
Ej- 12.13
Escribir un programa que pida al usuario introducir por teclado una cadena de caracteres (de
tamaño máximo 20) y, a continuación, un carácter. Seguidamente debe mostrar por pantalla el
número de caracteres de la cadena diferentes al carácter introducido y la propia cadena modi-
ficada sustituyendo todas las veces que aparezca dicho carácter dado por ‘#’. Por ejemplo: si el
usuario introduce “Barrida” y ‘a’, entonces se mostrará por pantalla 5 y “B#rrid#”. Nota: puede
emplearse la librería string.h.
m
.co
il
g ma
5@
0
nio
to
an
de
ra
lau
12
Ej- 12.14
Construir una función que retorne el elemento que almacene la hora
más tardía de los n primeros elementos de un array t formado con
elementos de tipo struct hora. El campo hh puede almacenar valores
entre 0 y 11, el campo mm guarda valores entre 0 y 59 y el campo ap
puede almacenar el valor “AM” (Ante Meridiem) o “PM” (Post Meridi-
em). t y n son los dos parámetros de la función. Nota 1: Como ejemplo
de comparación, la hora {0, 0, “PM”} es posterior a la hora {11, 59, “AM”}.
Nota 2: Si n vale 0 entonces debe retornar un elemento con el valor {0,
0, “AM”}. Nota 3: si es necesario puede emplearse la librería string.h.
m
.co
il
g ma
5@
0
nio
to
an
de
ra
lau
13
Ej- 12.15
Una empresa desea incentivar la productividad de sus empleados. Para ello, realiza una moni-
torización de los equipos para ver el tiempo dedicado a navegar por Internet. Se dispone de un
archivo de texto con: i) el nombre de usuario (máxi-
mo, 20 caracteres), ii) identificador MAC del equipo
(17 caracteres) y iii) número de minutos de naveg-
ación (valor entero), en cada línea como, a modo de
ejemplo, se muestra en la figura de la derecha. SE
PIDE: construir una función monitorizar que, dada la
ruta o vía de acceso del archivo, devuelva el nombre
del usuario y el MAC del equipo con menos minutos
de uso de Internet mediante otros dos parámetros. Si el archivo no existe o está vacío entonces
m
debe devolver dos cadenas vacías.
.co
il
g ma
5@
0
nio
to
an
de
ra
lau
14