Cálculo de Matrícula Universitaria en C: Gestión de Costos y Créditos
Enviado por Programa Chuletas y clasificado en Informática y Telecomunicaciones
Escrito el en español con un tamaño de 5,42 KB
Problema de Cálculo de Matrícula Académica en C
El siguiente documento describe un ejercicio de programación en C para procesar datos de matrícula académica desde un fichero de texto y calcular los costos asociados.
Formato del Fichero de Entrada: matricula.txt
El fichero matricula.txt
contiene varias líneas de texto. Cada línea representa una asignatura matriculada y sigue el siguiente formato:
NOMBRE_ASIGNATURA CREDITOS CONVOCATORIA TIPO
- NOMBRE_ASIGNATURA: Es una cadena de texto sin espacios.
- CREDITOS: Un valor numérico (ej: 4.5 créditos).
- CONVOCATORIA: Un entero mayor o igual a 1 (1, 2, ...).
- TIPO: Es 1 para grado, 2 para máster, 3 para doctorado.
Ejemplo del Fichero matricula.txt
:
Fisica 4.5 1 1
Quimica 6 2 1
ElectrodinamicaCuantica 12 2 2
TeoriaDeCuerdas 7.5 1 3
Objetivo del Programa
Debe completar el siguiente programa que, tras leer el fichero, muestre por pantalla:
- Número total de créditos matriculados.
- Precio total de la matrícula.
Reglas para el Cálculo del Precio de la Matrícula
Para calcular el precio de la matrícula, hay que tener en cuenta las siguientes reglas:
- Cada crédito cuesta 20.5 euros en primera convocatoria de grado.
- Respecto al tipo de matrícula:
- Matricularse en máster es un 15% más caro que en grado.
- Matricularse en doctorado es un 30% más caro que en grado.
- Respecto al número de convocatoria:
- Matricularse en segunda convocatoria es un 20% más caro que en la primera.
- Matricularse a partir de la tercera convocatoria es un 30% más caro que en la primera.
Resultado Esperado en Pantalla
Complete el siguiente programa. Si lo resuelve correctamente, el resultado esperado en pantalla es el siguiente:
92.25 euros -> Física
147.60 euros -> Química
339.48 euros -> Electrodinámica Cuántica
199.88 euros -> Teoría de Cuerdas
En total se ha matriculado de 30.00 créditos
En total le ha costado 779.20 euros
Código Fuente en C
A continuación, se presenta el esqueleto del programa en C que debe completar:
/* El fichero "matricula.txt" contiene varias líneas de texto. Cada
línea tiene:
NOMBRE_ASIGNATURA CREDITOS CONVOCATORIA TIPO
- NOMBRE_ASIGNATURA es una cadena de texto sin espacios.
- CREDITOS: un valor numérico, ej: 4.5 créditos
- CONVOCATORIA: un entero mayor o igual a 1 (1, 2, ...)
- TIPO: es 1 para grado, 2 para máster, 3 para doctorado
Ejemplo de fichero "matricula.txt":
Fisica 4.5 1 1
Quimica 6 2 1
ElectrodinamicaCuantica 12 2 2
TeoriaDeCuerdas 7.5 1 3
Debe completar el siguiente programa que, tras leer el fichero,
muestre por pantalla:
- Número total de créditos matriculados
- Precio total de la matrícula.
Para calcular el precio de la matrícula hay que tener en cuenta:
- cada crédito cuesta 20.5 euros en 1a convocatoria de grado
- respecto al tipo de matricula:
+ matricularse en máster es un 15% más caro que en grado
+ matricularse en doctorado es un 30% más caro que en grado
- respecto al número de convocatoria:
+ matricularse en 2a convocatoria es un 20% más caro que en la
primera.
+ matricularse a partir de la 3a convocatoria es un 30% más caro que
en la primera.
Complete el siguiente programa. Si lo resuelve correctamente ha de
salir el siguiente texto por pantalla:
92.25 euros -> Física
147.60 euros -> Química
339.48 euros -> Electrodinámica Cuántica
199.88 euros -> Teoría de Cuerdas
En total se ha matriculado de 30.00 créditos
En total le ha costado 779.20 euros
*/
#include <stdio.h>
#include <stdlib.h>
/* Es OBLIGATORIO utilizar todas estas constantes donde tenga sentido: */
#define RUTAFICHERO "Root/matricula.txt"
#define PVP_BASE 20.5
#define GRADO 1
#define MASTER 2
#define DOCTORADO 3
/* Es OBLIGATORIO completar la siguiente función que recibe como
argumentos los datos necesarios para calcular el precio de
matrícula de una sola asignatura y nos devuelve su importe en
euros: */
float pvp_asignatura(float creditos, int convocatoria, int tipo) {
float pvp = PVP_BASE * creditos;
if (tipo == MASTER)
pvp = pvp*1.15;
else if (tipo == DOCTORADO)
pvp = pvp*1.30;
if (convocatoria == 2)
pvp = pvp*1.20;
else if (convocatoria >= 3)
pvp = pvp*1.30;
return pvp;
}
int main() {
char nombre[100];
float pvp, pvptotal=0, credtotal=0, cred;
int conv, tipo;
FILE *fich = fopen(RUTAFICHERO,"r");
if (fich == NULL) {
printf("Error al abrir el fichero\n");
exit(0);
}
while (fscanf(fich,"%s%f%d%d",nombre,&cred,&conv,&tipo)==4) {
credtotal = credtotal + cred;
pvp = pvp_asignatura(cred,conv,tipo);
pvptotal = pvptotal + pvp;
printf("%7.2f euros -> %s\n",pvp,nombre);
}
fclose(fich);
printf("En total se ha matriculado de %.2f créditos\n"
"En total le ha costado %.2f euros\n",
credtotal,pvptotal);
return 0;
}