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;
}

Entradas relacionadas: