Estructuras y Punteros en Lenguaje C: Registro y Cálculo de Temperaturas Semanales
Enviado por cristian y clasificado en Informática y Telecomunicaciones
Escrito el en
español con un tamaño de 5,11 KB
Implementación de Registro de Temperaturas en Lenguaje C
El siguiente programa implementa la captura, almacenamiento, visualización y procesamiento estadístico de temperaturas diarias a lo largo de una semana. Se emplean estructuras anidadas (struct), definición de tipos mediante typedef, y paso de parámetros tanto por valor como por referencia mediante punteros.
Definición de Librerías y Tipos de Datos
Se declaran las librerías estándar necesarias para operaciones de entrada/salida y llamadas al sistema, así como las estructuras para representar un día individual y la semana completa:
#include <stdio.h>
#include <stdlib.h>
struct s_TemperaturaDia {
int min; // Temperatura mínima
int max; // Temperatura máxima
};
typedef struct s_TemperaturaDia TemperaturaDia;
typedef struct s_TemperaturaDia *pTemperaturaDia;
struct s_TemperaturaSemana {
TemperaturaDia dia[7]; // Primer día de la semana, índice 0
};
typedef struct s_TemperaturaSemana TemperaturaSemana;
typedef struct s_TemperaturaSemana *pTemperaturaSemana;Funciones de Lectura y Muestra de Datos
Estas rutinas gestionan la entrada de datos por consola y la impresión organizada por día y por semana:
void LeerTemperaturaDia(pTemperaturaDia dia) {
int menor, mayor;
printf("Indique mínima: ");
scanf("%d", &menor);
printf("Indique máxima: ");
scanf("%d", &mayor);
dia->min = menor;
dia->max = mayor;
}
void PresentarTemperaturaDia(TemperaturaDia dia) {
printf("min: %d | max: %d\n", dia.min, dia.max);
}
void LeerTemperaturaSemana(pTemperaturaSemana semana) {
int i;
TemperaturaDia dia;
printf("Ingrese las temperaturas de la semana:\n");
for (i = 0; i < 7; i++) {
printf("Día %d:\n", i + 1);
LeerTemperaturaDia(&dia);
semana->dia[i].min = dia.min;
semana->dia[i].max = dia.max;
}
}
void PresentarTemperaturaSemana(TemperaturaSemana semana) {
int i;
printf("\nLas temperaturas ingresadas son:\n");
for (i = 0; i < 7; i++) {
printf("Día %d -> ", i + 1);
PresentarTemperaturaDia(semana.dia[i]);
}
}Algoritmos de Búsqueda de Extremos y Promedios
Funciones encargadas de determinar los índices de los días con valores extremos y realizar los cómputos de promedios semanales:
int DiaMayorTemperatura(TemperaturaSemana semana) {
int poMayor = 0;
int temMayor = semana.dia[0].max;
int i;
for (i = 0; i < 7; i++) {
if (semana.dia[i].max > temMayor) {
temMayor = semana.dia[i].max;
poMayor = i;
}
}
return poMayor;
}
int DiaMenorTemperatura(TemperaturaSemana semana) {
int poMenor = 0;
int temMenor = semana.dia[0].min;
int i;
for (i = 0; i < 7; i++) {
if (semana.dia[i].min < temMenor) {
temMenor = semana.dia[i].min;
poMenor = i;
}
}
return poMenor;
}
float PromedoMinima(TemperaturaSemana semana) {
int s = 0, i;
float prom;
for (i = 0; i < 7; i++) {
s = s + semana.dia[i].min;
}
prom = s / 7.0f;
return prom;
}
float PromedoSemana(TemperaturaSemana semana) {
int i;
float s = 0.0f, prom, promediodia;
for (i = 0; i < 7; i++) {
promediodia = (semana.dia[i].min + semana.dia[i].max) / 2.0f;
s = s + promediodia;
}
prom = s / 7.0f;
return prom;
}Función Principal (main)
Punto de entrada de la aplicación donde se declaran las variables, se invocan las subrutinas y se imprimen los resultados calculados:
int main(int argc, char *argv[]) {
TemperaturaSemana temsem;
LeerTemperaturaSemana(&temsem);
PresentarTemperaturaSemana(temsem);
int dm = DiaMayorTemperatura(temsem);
printf("El día de mayor temperatura es: %d\n", dm + 1);
int dme = DiaMenorTemperatura(temsem);
printf("El día de menor temperatura es: %d\n", dme + 1);
float pm = PromedoMinima(temsem);
printf("El promedio de las temperaturas mínimas es: %.2f\n", pm);
float promedio = PromedoSemana(temsem);
printf("El promedio general de los días es: %.2f\n", promedio);
system("PAUSE");
return 0;
}Aspectos Técnicos a Considerar
- Indexación de Arreglos: En C, los índices comienzan en
0y terminan en6para un vector de 7 elementos. Al mostrar los resultados por pantalla se suma1para una lectura natural. - Tipos de Retorno en Promedios: Las funciones que calculan promedios devuelven un tipo
floatpara preservar la parte decimal y evitar la pérdida de precisión por truncamiento entero. - Uso de Punteros: Se recurre al operador flecha (
->) al acceder a campos desde punteros (dia->min) y al operador punto (.) cuando se accede de forma directa (dia.min).