Skip to content
ceciliabp edited this page May 29, 2023 · 42 revisions

CONTENIDO Y OBJETIVO DEL TRABAJO

  • Nuestro trabajo consiste en un programa informático programado en C que contiene diferentes funcionalidades las cuales permiten al usuario elegir las operaciones (calculadas con funciones) que quiere realizar a partir de los datos guardados de un fichero en formato excel.
  • Originalmente, el programa iba a consistir en mostrar por pantalla los datos del fichero según el año, el mes y el tipo de energía elegido por el usuario y, a partir de estos, realizar operaciones matemáticas y estadísticas mediante funciones. Sin embargo, por problemas técnicos finalmente nos decantamos por simplemente mostrar las energías de forma anual y realizar operaciones más generales.

EXPLICACIÓN DEL FICHERO

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 (en gigavatios por hora) en España durante 2021 y 2022. Como su nombre indica, los datos y valores del fichero están separados por comas y agrupados por filas y columnas. (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.

  1. 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
			}
		}
  1. Usamos un bucle for que recorra desde la sexta línea del fichero hasta el final del mismo. Dentro del bucle, implementamos tres fscanf 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 tipo float:
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]);
		}
  1. Gracias a este bucle, podemos guardar los nombres de las fuentes y de los números decimales en vectores tipo char y tipo float respectivamente, almacenados en un vector de estructuras definido al principio del trabajo.
typedef struct 
{
	float gwh[24];
	char nombre[30];
} energia;
  1. Para imprimir, por ejemplo, los datos de 2021, usamos un bucle for que recorra una por una las 16 filas con los datos de las fuentes de energía y las imprima. Primero imprime el número asociado al nombre del tipo de energía, y después imprime el mes y el valor en gigavatios por hora de cada mes. En este caso, como son los datos de 2021, los vectores empiezan en 0 y acaban en 11 (si se imprimieran los datos de 2022, los vectores irían desde el 12 hasta el 23).
for(i=0; i<=nfuentes; i++) 
	{//lave del bucle for que muestra los datos de 2021
		printf("%i) %s\n", i+1, fuente[i].nombre); //determina un número para cada energía y el nombre del tipo de energía
		printf("(Mes): (Gigavatios por hora)\n");
		printf("Enero: %f\nFebrero: %f\nMarzo: %f\nAbril: %f\nMayo: %f\nJunio: %f\nJulio: %f\nAgosto: %f\nSeptiembre: %f\nOctubre: %f\nNoviembre: %f\nDiciembre: %f\n \n", 
		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]);
	}//lave del bucle for que muestra los datos de 2021

FUNCIONES IMPLEMENTADAS

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 en el tutorial). Las funciones 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 (se verá más adelante en el tutorial). El bucle for recorre los datos referentes de la fuente seleccionada de ese mismo año y el if determina el valor máximo de esa fuente. La función devuelve el valor max, el cual es de tipo float.

      • 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 el if determina el valor mínimo de esa fuente. Finalmente, la función devuelve el valor min.

      • 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 bucle for 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 valor media.

      • 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 bucle for, 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 valor suma obtenido.

    • 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 bucle for se suman los valores de todas las fuentes de 2021. La exclusividad de esta función es que dentro del bucle usamos la función total para ahorrar líneas de código. Finalizado el bucle, la función devuelve el valor final de totalGlob.

TUTORIAL

Para que al usuario le resulte más fácil, hemos decidido hacer un tutorial general en el que se puede apreciar una forma en la que se puede usar el programa. (Como el tutorial está escrito en base al vídeo-tutorial (puedes verlo aquí), recomendamos ver el vídeo a la vez que se lee la guía para mayor comprensión del uso del programa).

  1. Nada más iniciar el programa, aparecerán las opciones de "Mostrar datos" y "Salir". Como queremos que muestre los datos, introducimos la tecla a.
  2. Tras pulsar la tecla enter, nos preguntará de qué año queremos ver los datos. En nuestro caso, queremos ver los datos de 2021, así que tecleamos 2021.
  3. Al darle al enter, el programa mostrará por pantalla los datos de producción de energía de 2021 (ordenados del 1 al 17) según el tipo de fuente de energía. También nos preguntará las operaciones que queremos realizar, a elegir entre "Máximo", "Mínimo", "Media", "Total" y la opción de "No quiero hacer más operaciones". En el vídeo queremos calcular el máximo, así que pulsamos la tecla e.
  4. Tras esto, nos pregunta de qué fuente queremos realizar la operación, teniendo que elegir según la posición en la que se muestran en pantalla. En el ejemplo, introducimos el número 16, correspondiente a "residuos renovables" (seguiremos introduciendo este número a lo largo del tutorial).
  5. El programa muestra el máximo de gigavatios por hora de residuos renovables generados en 2021. Después, se pregunta al usuario si quiere hacer más operaciones. Si se elige "No", el programa pregunta si se quiere salir del programa o si quiere ver los datos de 2022; si se elige "Sí", se vuelven a mostrar las operaciones a elegir de 2021 (igual que en el paso 3). En nuestro caso, como no queremos seguir haciendo operaciones, pulsamos la tecla n.
  6. Tras dar al enter, nos aparecerán dos opciones: "Salir del programa" y "Mostrar datos de 2022". En nuestro caso, pulsamos la tecla k para que nos muestre los datos de 2022.
  7. Por pantalla aparecerán los datos de producción de 2022, ordenados de la misma forma que aparece descrito en el paso 3. El programa nos da las opciones de salir ó de hacer operaciones. En nuestro ejemplo, pulsamos la tecla c para realizar las operaciones.
  8. Al igual que en el paso 3, nos aparecerán las opciones de "Máximo", "Mínimo", "Media", "Total" y "Salir del programa". Sin embargo, al haber mostrado los datos de 2022 y previamente los de 2021, ahora el programa nos da las opciones de "Operaciones globales" y "Total global".
  9. En el ejemplo, primero queremos ver el mínimo de producción de residuos renovales, así que primero introducimos la letra f y después el número 16. Acto seguido, nos muestra el valor mínimo.
  10. Tras mostrarnos el mínimo, el programa nos pregunta si queremos hacer otra operación, dándonos a elegir entre "Sí" y "No". Si elegimos "No", el programa finaliza. En nuestro caso, pulsamos la tecla y para indicar que queremos hacer otra operación.
  11. Ahora, nos vuelven a aparecer las opciones del paso 8. En el vídeo, como queremos determinar la media de producción de residuos renovables en los dos años, introducimos primero la letra G y después el número 16. Por pantalla se muestra la media de dicha fuente en 2021 y 2022.
  12. Después de mostrarlo por pantalla, nos vuelve a preguntar si queremos hacer otra operación. Como nuestra respuesta es "Sí", pulsamos la tecla y.
  13. Ahora, volvemos al menú de operaciones del paso 8. En el ejemplo, introducimos la letra x para calcular el total de producción de todas las fuentes de un año determinado. La siguiente opción nos da a elegir entre "total de 2021", "total de 2022" y "total de los dos años". En nuestro caso, introducimos el número 2 para calcular el total global de 2022. En la interfaz se mostrará el valor numérico del total global.
  14. Tras esto, nos pregunta si queremos hacer otra operación. Como no queremos, pulsamos la tecla n para salir del programa.

Como aclaramos al inicio del tutorial, esta es una forma general de usar el programa para que se aprecie sus distintas funcionalidades. En este caso, empezamos mostrando los datos de 2021, pero se puede hacer de forma análoga mostrando primero los datos de 2022. De la misma forma, se puede usar el programa para simplemente hacer operaciones en base a los datos mostrados de 2021 (se puede hacer igualmente para 2022).

NOTAS

  1. Al ser un vídeo grande, GitHub no permite verlo desde la web, por lo que recomendamos descargar el vídeo.
  2. En los apartados de introducir números y letras, si el usuario introduce un valor incorrecto siempre se volverá a pedir que introduzca un carácter correcto.
Clone this wiki locally