-
Notifications
You must be signed in to change notification settings - Fork 0
Home
- Nuestro trabajo consiste un programa informático programado en C que contiene diferentes funciones que permiten al usuario elegir las operaciones que quiere realizar a partir de los datos de un fichero en formato excel.
- Originalmente, el programa consistiría en mostrar por pantalla los datos del fichero según el año, el mes y el tipo de energía elegido y, a partir de estos, realizar operaciones matemáticos y estadísticos mediante funciones. Sin embargo, finalmente nos decantamos por simplemente mostrar las energías de forma anual y realizar operaciones más generales.
El documento utilizado en el proyecto es un archivo .csv (Comma Separated Values) en el cual se recogen los datos de la producción de energía de España en gigavatios por hora entre los años 2021 y 2022. Como su nombre indica, los datos y valores del fichero están separados por comas y agrupados por filas. (Puedes ver el fichero completo aquí).
No obstante, no todos los datos que aparecen en el fichero nos resultan útiles para nuestro proyecto, por lo que debemos seleccionar y guardar los valores que realmente nos interesan.
- Como las primeras líneas no nos son relevantes, usamos un bucle
while
que cuente el número de líneas para tener claro dónde hay que empezar a escanear:
char c; //declaramos una variable char para contar los saltos de línea
int nlineas = 0; //iniciamos el contador en 0
while(fscanf(plectura, "%c", &c) != EOF)
{
if(c == '\n')
{
nlineas++;
//cada vez que encuentra un \n suma 1 al número de líneas
}
if(nlineas==5)
{
break;
//Sale del bucle al llegar a la línea 5 del fichero
}
}
- Usamos un bucle
for
que recorra desde la sexta línea del fichero hasta el final del mismo. Dentro del bucle, implementamos tresfscanf
para que escanee el nombre de la fuente de energía, la coma que separa el nombre y el primer número, y otro para los valores tipofloat
:
int i=0; //contador para el bucle for
int nfuentes = 16; //líneas con los datos con los que se va a trabajar
energia fuente[40]; //vector donde guardar los valores de las energías
for(i; i<=nfuentes; i++)
{
fscanf(plectura, "%[^,]s", fuente[i].nombre); //fscanf del tipo de energía
fscanf(plectura, "%c", &c); //fscanf para la coma que separa la fuente y los datos
fscanf(plectura, "%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f,%f",
&fuente[i].gwh[0], &fuente[i].gwh[1], &fuente[i].gwh[2], &fuente[i].gwh[3], &fuente[i].gwh[4], &fuente[i].gwh[5], &fuente[i].gwh[6], &fuente[i].gwh[7], &fuente[i].gwh[8],
&fuente[i].gwh[9], &fuente[i].gwh[10], &fuente[i].gwh[11], &fuente[i].gwh[12], &fuente[i].gwh[13], &fuente[i].gwh[14], &fuente[i].gwh[15], &fuente[i].gwh[16], &fuente[i].gwh[17], &fuente[i].gwh[18],
&fuente[i].gwh[19], &fuente[i].gwh[20], &fuente[i].gwh[21], &fuente[i].gwh[22], &fuente[i].gwh[23]);
}
- Gracias a este bucle, podemos guardar los nombres de las fuentes y de los números decimales en vectores tipo
char
y tipofloat
respectivamente, almacenados en un vector de estructuras definido al principio del trabajo.
typedef struct
{
float gwh[24];
char nombre[30];
} energia;
Para facilitarnos el trabajo, decidimos crear cinco funciones que permitieran realizar operaciones en base a los datos del documento. Como resultado, obtuvimos cuatro funciones normales y una función general. Estas funciones se declaran mediante tres números enteros:
-
numfuente
: valor que hace referencia a las líneas del fichero donde se encuentran los datos que necesitamos. El usuario debe escoger un número del 1 al 16 dependiendo del tipo de energía del que quiere ver las operaciones. -
energia vector_fuente[]
: vector donde se almacenan los datos del tipo de energía. -
x
: número del 0 al 2. Según el número introducido, se harán los cálculos de cierto año o de los dos años a la vez.-
Las funciones normales aparecen en pantalla después de haber mostrado los datos de un año y habiendo elegido la fuente de energía de la que se quiere realizar los cálculos. No obstante, también pueden utilizarse como funciones globales si se muestran los datos de 2021 y 2022 (se explicará más adelante). Son las siguientes:
-
Máximo: permite calcular el máximo de gigavatios por hora de una fuente de energía. Por ejemplo, si el usuario decide que quiere ver el máximo de 2021, primero debe teclear el número correspondiente a la fuente de la que quiere calcular el máximo. El bucle
for
recorre los datos referentes de la fuente seleccionada de ese mismo año y elif
determina el valor máximo de esa fuente. La función devuelve el valormax
, el cual es de tipofloat
.
-
Mínimo: calcula el mínimo de gigavatios por hora de un tipo de energía obtenido. Por ejemplo, si el usuario decide que quiere que se muestre por pantalla el mínimo de 2022, primero debe introducir el valor correspondiente al tipo de energía del que quiere calcular el mínimo. El bucle
for
recorre los datos mensuales de 2022, y elif
determina el valor mínimo de esa fuente. Finalmente, la función devuelve el valormin
.
-
Media: determina la media de gigavatios por hora de una fuente de energía elegida. Si, por ejemplo, el usuario quiere calcular la media de una fuente de 2021, primero debe introducir la fuente de la que quiere calcular la media. Dentro de la función, primero declara el valor
suma
como cero. Después, el buclefor
recorre uno a uno los meses de 2021, sumando los vectores. Cuando el bucle termina, se calcula la media dividiendo la suma entre los 12 meses del año. La función devuelve el valormedia
.
-
Total: calcula el total de gigavatios por hora producidos de una fuente de energía. Si, por ejemplo, el usuario quiere calcular el total de una fuente entre los dos años, primero tiene que decir la fuente de la que quiere calcular el total. En la función, primero iguala
suma
a cero, y después, en el buclefor
, recorre uno a uno los dos años, sumando los valores mensuales de la fuente seleccionada. Al terminar el bucle, la función devuelve el valorsuma
obtenido.
-
Máximo: permite calcular el máximo de gigavatios por hora de una fuente de energía. Por ejemplo, si el usuario decide que quiere ver el máximo de 2021, primero debe teclear el número correspondiente a la fuente de la que quiere calcular el máximo. El bucle
-
La función global solamente se muestra en pantalla cuando el usuario ha elegido mostrar los datos de 2021 y 2022 en el mismo programa.
-
Total global: suma los datos de todas las fuentes de un mismo año. Por ejemplo, si después de haber mostrado los datos de los dos años, el usuario quiere calcular el total anual de las fuentes de 2021: primero se iguala a cero el valor
totalGlob
, y después en el buclefor
se suman los valores de todas las fuentes de 2021. La exclusividad de esta función es que dentro del bucle usamos la funcióntotal
para ahorrar líneas de código. Finalizado el bucle, la función devuelve el valor final detotalGlob
.
-
Total global: suma los datos de todas las fuentes de un mismo año. Por ejemplo, si después de haber mostrado los datos de los dos años, el usuario quiere calcular el total anual de las fuentes de 2021: primero se iguala a cero el valor
-
(incluir vídeo) (https://github.com/aigora/tw_E10X_2022_2023-rayomcqueen95/blob/master/images/TUTORIAL_2.2.1.mp4)