This repository has been archived by the owner on Dec 31, 2024. It is now read-only.
-
-
Notifications
You must be signed in to change notification settings - Fork 15
/
Copy pathEjercicio_23.c
114 lines (97 loc) · 3.98 KB
/
Ejercicio_23.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
//
// Created by Pablo on 30/11/2023.
//
/*
* AUTOR: PABLO PORTAS
* OBJETIVO:
* Plantee e implemente un programa en Lenguaje C para calcular la media de
* cuatro puntuaciones de un estudiante de un curso de informática (representadas
* por 4 enteros entre 0 y 100) introducidas por teclado. Debe incluir
* obligatoriamente los siguientes elementos:
* - Procedimiento pedirNota: solicita un entero por teclado entre 0 y 100, si no es
* correcto lo sigue pidiendo hasta que lo sea.
* - Función calculaPuntuacion: recibe un real y devuelve la letra de la nota media en
* función a la siguiente tabla.
* Media Puntuación
* [90, 100] A
* [80, 90] B
* [70, 80] C
* [60, 70] D
* [0, 60] E
* - Procedimiento que solicita al usuario cuatro notas (usando pedirNota) y calcula la
* media aritmética de las mismas, llamando además a calculaPuntuacion para obtener
* la letra de la puntuación que luego se debe mostrar en pantalla.
* in: Cuatro Notas de 0 100
* out: Letra de Puntuación Media
* NOTA1:
*/
// Librerías
#include <stdio.h>
// Constantes
#define N 4 // Número de notas (exámenes) a valorar
#define MAX 25 // Máximo de letras de un nombre y apellido
#define FORMATO "%25[^\n]" // Formato para mostrar los nombres
#define CLASE 4 // Número de alumnos por clase
// Definiciones
typedef struct {
char NombreApellidos[MAX + 1]; // Cadena para nombres y apellidos
int Notas[N]; // Vector para almacenar las Notas
float Media; // Media aritmética de las notas del alumno
} tRegAlumno; // Registro para el nombre y notas de cada alumno
typedef tRegAlumno tVAlumno[CLASE]; // Definición de tipo del vector de la estructura dada.
typedef char puntuacion;
typedef float Media;
// Definición de Funciones
tRegAlumno pedirNota(); // Pedir las notas de cada Alumno
void introducirNotasAlumnos(tVAlumno v); // Función para Introducir Notas de los alumnos
puntuacion calculaPuntuacion(Media m); // Recibiendo la nota media devolver la letra de la puntuación
void mostrarMedias(const tVAlumno v); // Muestra los nombres, la nota y la nota media de cada alumno
// Main Por si no era evidente
int main() {
tVAlumno vAlumnos; // Vector en el que guardaremos notas y nombres de todos los alumnos de la clase
puts("Bienvenida profesor/a del grupo D. Vamos introducir esas notas.");
introducirNotasAlumnos(vAlumnos);
mostrarMedias(vAlumnos);
return 0;
}
// Declaración de funciones
tRegAlumno pedirNota() {
tRegAlumno aux; // Vector Auxiliar
int sum = 0; // Sumatorio de Notas para la media
printf("Nombre y apellidos del alumno/a: ");
scanf(FORMATO, aux.NombreApellidos);
for (int i = 0; i < N; i++) {
do {
printf("Nota de la asignatura %2d: ", i + 1);
scanf("%d", &aux.Notas[i]);
} while (aux.Notas[i] < 0 || aux.Notas[i] > 100);
sum += aux.Notas[i];
while ((getchar()) != '\n'); // Limpio Buffer estilo profe Carmen
}
aux.Media = (float)(sum)/(float)N;
return aux;
}
void introducirNotasAlumnos(tVAlumno v) {
for (int i = 0; i < CLASE; i++) {
printf("Notas alumno/a Nº %2d:\n", i + 1);
v[i] = pedirNota();
}
}
puntuacion calculaPuntuacion(const Media m) {
puntuacion Letra;
if (m >= 70) {
if (m >= 80) {
if (m >= 90) Letra = 'A';
else Letra = 'B';
} else Letra = 'C';
} else {
if (m >= 60) Letra = 'D';
else Letra = 'E';
}
return Letra;
}
void mostrarMedias(const tVAlumno v) {
puts("\nMostrando medias...\n");
for (int i = 0; i < N; i++)
printf("%s\t\t\t%.2f\t\t%c\n", v[i].NombreApellidos, v[i].Media, calculaPuntuacion(v[i].Media));
}