Está en la página 1de 4

B

NOMBRE........................................................................................................................

NÚM. de MATRÍCULA....................................................................................................

Examen Final. Fundamentos de Programación. Julio 2017


Instrucciones
 El examen consta de diez preguntas, cada una de las cuales puntuará cero o un punto.
 Se calificará con un punto si la respuesta correcta se indica en la forma más simple.
 La duración total del examen será de dos horas y media.
 Sólo se recogerá la hoja de enunciados con las respuestas. No se recogen hojas adicionales.
 Fechas: Preacta, 12/07/2017. Revisión, 18/07/2017. Acta, 19/07/2017.
 Las notas se publicarán adicionalmente en AulaWeb.
1. En un archivo de texto "deudas.txt" se guardan los pagos pendientes de clientes de acuerdo al formato
mostrado en el recuadro. En cada línea se encuentra: el número de cliente, su nombre (solo uno), su
apellido (solo uno) y la cantidad adeudada separados por espacios. 1000 Antonio Perez 1000.0
Codificar un programa para que pida introducir un número de 1041 Luis Garcia 1500.0
cliente por teclado y muestre por pantalla, si existe, todos los datos 1125 Pedro Alamo 32000.0
del cliente que se corresponde con su número o, en caso contrario, 1234 Arturo Rubio 123.0
1894 Juana Gil 650.0
escriba por pantalla "No existen deudas pendientes".
#include<stdio.h>
int main() {
int clave, cliente; char nombre[64], apellido[64]; double deuda;

2. Completar la función para que, dadas como parámetros las direcciones de memoria de 2 variables
dinámicas, retorne el resultado en otra variable dinámica teniendo en cuenta que: a) si la variable
apuntada por el segundo parámetro no existe, simplemente se devuelve la dirección de la primera
variable sin hacer nada más, b) si ambos parámetros apuntan a la misma variable, se multiplica por 3 su
valor y se devuelve su dirección de memoria y c) en cualquier otro caso se resta el valor de las variables
dinámicas, se liberan de memoria y se devuelve como resultado una nueva variable con el valor de la
resta. Nota: Se supone que la variable apuntada por el primer parámetro siempre existe.
#include <stdlib.h> /* NO se permiten includes adicionales */
float * cambia_dyn(float *p1, float *p2) {
3. Se ha diseñado un tipo de dato entero en complemento a 2 que utiliza los 7 últimos bits (intervalo de
representación del +63 al -64) del tipo signed char de manera que cumple que la codificación de
cualquier número dentro de este intervalo de representación coincide exactamente con la codificación
del mismo número en el tipo signed char. Completa el siguiente fragmento de código para que guarde
en la variable overflow el valor 1 (verdadero) si el resultado de la suma, variable suma, ha desbordado
el intervalo de representación y 0 (falso) si está dentro del intervalo de representación.
SOLAMENTE se permite utilizar operadores de bit, es decir: & | ^ << >>.
signed char a, b, suma; int overflow;
a = /* asigna valor entre +63 y -64 */;
b = /* asigna valor entre +63 y -64 */;
suma = a + b; /* suma ambos números y hay que comprobar si hay desbordamiento: */

overflow =

4. En un array, v, se almacena el valor facial en céntimos (en orden decreciente) de las 8 diferentes
monedas de curso legal de la zona euro. Codificar la función convert para que al ejecutarse almacene en
otro array, m, el número de monedas de cada tipo cuyo valor total sea igual a una cantidad de x
céntimos, de forma que minimice el número total de monedas. Por ejemplo: 99 céntimos equivalen a 1
moneda de 50, 2 de 20, 1 de 5 y 2 de 2 céntimos. Nota: el número de monedas de 200 céntimos (2€) se
debe guardar en m[0], las de 100 céntimos (1€) en m[1], las de 50 céntimos en m[2] y así sucesivamente.
#include <stdio.h>
> Aqui iría la definición de la función convert
int main() {
int v[8] = {200, 100, 50,
20, 10, 5, 2, 1};
int m[8] = {0};
int i, x;
printf("Total de centimos: ");
scanf("%d", &x);
convert(v, m, x);
printf("Desglose de monedas:\n");
for (i=0; i<8; i++)
printf("%8d %8d\n", v[i], m[i]);
return 0;
}

5. Completar el programa para que guarde en la cadena frase de tamaño TAM un máximo de n palabras (se
pide por teclado) separadas por un único espacio en blanco. El programa debe pedir por teclado cada
palabra y construir la cadena frase. Es irrelevante si después de la última palabra hay o no un espacio.
La construcción de la frase debe interrumpirse cuando no se pueda añadir una palabra más dentro de la
frase. Por ejemplo, si n es 4 y se quiere construir la frase con las palabras "Hola", "que", "tal",
"estas" y el tamaño TAM de la cadena frase fuese 10 entonces frase es "Hola que ".
#include<stdio.h>
#include<string.h>
#define TAM 50
int main() {
char frase[TAM]="", palabra[10];
int i, n, terminar=0;

printf("\nLa frase es: \"%s\"\n", frase);


return 0;
}
6. Dada una matriz cuadrada a de elementos reales de dimensión DIM, 2 3 5 8 ……………
desarrollar la función asigna para que asigne valor por teclado a los 1 2 4 0 ……………
elementos de la submatriz principal de la matriz a de dimensión dada n 4 7 0 0 ……………
6 0 0 0 ……………
(0<n≤DIM). La submatriz resultante debe ser triangular superior respecto la ………………………………………………
diagonal secundaria (recuadrada por el paralelogramo), es decir, los valores ………………………………………………
por debajo de la diagonal secundaria de la submatriz de dimensión n deben
ser todos nulos. Se da un ejemplo para n=4, en la figura de la derecha.
#include<stdio.h>
#define DIM 50

int main() {
double a[DIM][DIM]; int n,i,j;
printf("\nDame la dimension de la submatriz: "); scanf("%d",&n);
asigna(a,n);
return 0;
}
7. La función modf de la librería estándar de C se declara en math.h como:
double modf (double x, double* intpart);
Esta función descompone un número en coma flotante (parámetro double x) en su parte entera (retorno
de la función) y su parte fraccionaria (que se asigna a una variable double apuntada por intpart).
Utilice dicha función para escribir la función calcular_med de forma que, dados dos parámetros de tipo
coma flotante, calcule y permita obtener la media geométrica de sus partes enteras por el retorno de la
función y la media aritmética de sus partes fraccionarias mediante un parámetro por referencia.
#include <math.h> /* NO se permite includes adicionales */

8. Escribir una función divisores para que cree un nuevo vector dinámico y asigne a sus componentes
todos los divisores de un número entero, num, no primo, (con num > 0), excluidos el 1 y el propio
número. La función tiene dos parámetros: el entero, num, y otro número entero que se pasa por
referencia donde se almacenará la dimensión del vector. La función retorna la dirección de memoria
del nuevo vector. Nota: se recomienda, en primer lugar, contar el número de divisores.
#include <stdlib.h> /* NO se permiten includes adicionales */
9. En un array de elementos struct apunte se almacenan las aportaciones anuales realizadas por
diferentes empresas a una ONG. El array está ordenado alfabéticamente según el campo empresa.
Construir una función que retorne el máximo de los totales de aportaciones realizadas por una misma
empresa siendo los parámetros: el array y el número n (con n>0) de elementos. Por ejemplo, en el caso
del array de 7 elementos de la figura, la función debería retornar el valor 450.0:
#include <string.h>
struct apunte {
char empresa[21];
double aportacion;
int anho;
};

10. En un archivo cuyo formato se muestra en el recuadro, donde,


Archivo de notas de prácticas:
en cada línea se encuentra: el nº de matrícula de un alumno, el 18001 4 9 9 6 6
nº de prácticas que ha realizado y la nota de cada una de ellas. 18002 6 1 10 9 4 0 4
Escribir una función para que, dado el archivo anterior ya 18003 0
abierto, escriba un nuevo archivo de texto, "aprobados.txt", 18004 7 1 2 7 7 5 8 2
que contenga los datos que se observan en el recuadro, es decir, 18005 3 10 2 1
18006 2 7 7
se escribirán los datos de los alumnos aprobados, en cada
línea: su nº de matrícula, el nº de prácticas a las que ha asistido, Archivo aprobados.txt
y la suma acumulada de todas sus notas de prácticas. Para 18001 4 30
aprobar un alumno debe acumular 30 o más puntos en las 18004 7 32
prácticas realizadas. Finalmente se escribirá el número de Aprobados: 2
aprobados.
#include <stdio.h>
void practicas(FILE *f){

También podría gustarte