diff --git a/Examen1/TDA_Statistics b/Examen1/TDA_Statistics new file mode 100755 index 0000000..97e79d1 Binary files /dev/null and b/Examen1/TDA_Statistics differ diff --git a/Examen1/TDA_Statistics.c b/Examen1/TDA_Statistics.c new file mode 100644 index 0000000..5674f2a --- /dev/null +++ b/Examen1/TDA_Statistics.c @@ -0,0 +1,9 @@ +#include"TDA_Statistics.h" + +int main(void) +{ + + vista_Menu(); + + return 0; +} diff --git a/Examen1/TDA_Statistics.h b/Examen1/TDA_Statistics.h new file mode 100644 index 0000000..c2d516b --- /dev/null +++ b/Examen1/TDA_Statistics.h @@ -0,0 +1,158 @@ +// +// TDA_Statistics.h +// +// +// Creado por Rodrigo Garcia el 8 de octubre del 2020. +// Sinceramente siento que dos horas no son suficientes para esto. Una disculpa por el estado del examen, hice todo para lo que me dio tiempo. + +#ifndef TDA_Statistics_h +#define TDA_Statistics_h + + +/* +* System headers required by the following declarations +* (the implementation will import its specific dependencies): +*/ + +#include +#include + +/* +* Application specific headers required by the following declarations +* (the implementation will import its specific dependencies): +*/ + +/* Constants declarations. */ + +/* Set EXTERN macro: */ + +#ifndef TDA_Statistics_IMPORT + #define EXTERN +#else + #define EXTERN extern +#endif + +/* Types declarations. */ + + +/* Global variables declarations. */ +#define COLUMNS 2 + + +/* Function prototypes. */ + + +/* + * + * La funcion vista_Menu proporciona al usuario un menu con la bienvenida y la forma de operar del sistema. + * Pedira el nombre del archivo y se mandara al controlador + * + * @params + * void + + * @returns + none +*/ + + +EXTERN void vista_Menu(void); + + +/* + * + * La funcion controlador_Proceso settea todas las variables correspondientes y realiza las llamadas a la funciones. + * + * + * @params + * nombre_archivo (char *): + nombre del archivo que busca abrirse + + * @returns + none +*/ + + +EXTERN void controlador_Proceso(char * nombre_archivo); + + +/* + * + * La funcion modelo_Archivo abre un archivo del nombre recibido en el modo recibido + * + * + * @params + * nombre_archivo (char *): + Nombre del archivo a abrir + * modo (char *): + modo de apertura del archivo + + * @returns + Archivo abierto en el modo indicado +*/ + + +EXTERN FILE * modelo_Archivo(char * nombre_archivo, char * modo); + + +/* + * + * La funcion modelo_Euler_Method predice la posicion de la persona en el bongee dependiendo de los valores dados + * y la regresa al controlador para ser analizada + * + * @params + * Archivo (FILE *): + Archivo que se va a leer + * dimension (int *) + Puntero a entero que se llevarà el valor del tamanño del array + + * @returns + array de floats con los valores del archivo +*/ + + +EXTERN float * modelo_Lee_Archivo(FILE * Archivo, int * dimension); + +/* + * + * La funcion modelo_Calcula_Centrales calculas las medidas de valor central del arreglo de valores + * + * @params + * array (float *): + Arreglo de los valores con lo que se haran los calculos + * dimension (int *) + Tamaño del array + + * @returns + void +*/ + +EXTERN void modelo_Calcula_Centrales(float * array, int * dimension); + + +/* + * + * La funcion modelo_Crea_Archivo crea un archivo .csv con los datos obtenidos de los calculos + * + * @params + * media (float ): + Valor de la media calculada + * mediana (float ) + Valor de la mediana calculada + * moda (float ) + valor de la moda calculado + + * @returns + void +*/ + +EXTERN void modelo_Crea_Archivo(float media, float mediana, float moda); + + + + +#undef TDA_Statistics_IMPORT +#undef EXTERN + + + +#endif /* TDA_Statistics_h */ diff --git a/Examen1/controlador_Proceso.c b/Examen1/controlador_Proceso.c new file mode 100644 index 0000000..3e2f45b --- /dev/null +++ b/Examen1/controlador_Proceso.c @@ -0,0 +1,20 @@ +#include"TDA_Statistics.h" + +void controlador_Proceso(char * nombre_archivo) +{ + int i; + + int * tamano; + FILE * Archivo = NULL; + float * array; + + Archivo = modelo_Archivo(nombre_archivo,"r"); + + array = modelo_Lee_Archivo(Archivo,tamano); + + modelo_Calcula_Centrales(array,tamano); + + free(array); + + fclose(Archivo); +} diff --git a/Examen1/data.csv b/Examen1/data.csv index a6eeb05..ba235b9 100644 --- a/Examen1/data.csv +++ b/Examen1/data.csv @@ -1,4 +1,3 @@ -,0 0,5.077850806 1,5.11361086 2,5.013413304 diff --git a/Examen1/data_statistics.csv b/Examen1/data_statistics.csv new file mode 100644 index 0000000..ab18a0d --- /dev/null +++ b/Examen1/data_statistics.csv @@ -0,0 +1,3 @@ +Media: 4.955432 +Mediana: 5.016256 +Moda: 1.000000 diff --git a/Examen1/modelo_Archivo.c b/Examen1/modelo_Archivo.c new file mode 100644 index 0000000..cee8373 --- /dev/null +++ b/Examen1/modelo_Archivo.c @@ -0,0 +1,10 @@ +#include"TDA_Statistics.h" + +FILE * modelo_Archivo(char * nombre_archivo, char * modo) +{ + FILE * Archivo = NULL; + + Archivo = fopen(nombre_archivo,modo); + + return Archivo; +} diff --git a/Examen1/modelo_Calcula_Centrales.c b/Examen1/modelo_Calcula_Centrales.c new file mode 100644 index 0000000..6a4143b --- /dev/null +++ b/Examen1/modelo_Calcula_Centrales.c @@ -0,0 +1,32 @@ +#include"TDA_Statistics.h" + +void modelo_Calcula_Centrales(float * array, int * tamano) +{ + float suma=0,media=0,mediana=0; + int i; + + for(i=0;i<*tamano;i++) + { + suma = suma + array[i]; + } + + media = suma / *tamano; + + if(*tamano % 2 != 0) + { + mediana = array[*tamano/2]; + } + + else + { + mediana = (array[(int) *tamano/2] + array[((int) *tamano/2)+1])/2; + } + + printf("Media = %f\n",media); + printf("Mediana = %f\n",mediana); + + + //Se manda un uno en el valor de la moda ya que no hubi tiempo de calcular la moda. + modelo_Crea_Archivo(media,mediana,1); + +} diff --git a/Examen1/modelo_Crea_Archivo.c b/Examen1/modelo_Crea_Archivo.c new file mode 100644 index 0000000..37464e3 --- /dev/null +++ b/Examen1/modelo_Crea_Archivo.c @@ -0,0 +1,15 @@ +#include"TDA_Statistics.h" + +void modelo_Crea_Archivo(float media, float mediana, float moda) +{ + FILE * Archivo = NULL; + + Archivo = modelo_Archivo("data_statistics.csv","w"); + + fprintf(Archivo, "Media: %f\n",media); + fprintf(Archivo, "Mediana: %f\n",mediana); + fprintf(Archivo, "Moda: %f\n",moda); + + fclose(Archivo); + +} diff --git a/Examen1/modelo_Lee_Archivo.c b/Examen1/modelo_Lee_Archivo.c new file mode 100644 index 0000000..a68d507 --- /dev/null +++ b/Examen1/modelo_Lee_Archivo.c @@ -0,0 +1,35 @@ +#include"TDA_Statistics.h" + +float * modelo_Lee_Archivo(FILE * Archivo, int * dimension) +{ + int count_datos = 0, i = 0; + + int temp; + float temp2; + + float * data_array; + + //Primero lo leemos sin guardar nada para determinar su tamaño. + while(!feof(Archivo)) + { + fscanf(Archivo,"%d,%f\n",&temp,&temp2); + count_datos++; + } + + *dimension = count_datos; + + //Con la cantidad obtenida, instanciamos el arreglo. + data_array = (float *)malloc(count_datos * sizeof(float)); + + rewind(Archivo); + + //Lo leemos nuevamente y esta vez guardamos los datos en el arreglo + while(!feof(Archivo)) + { + fscanf(Archivo,"%d,%f\n",&temp,&data_array[i]); + i++; + } + + //Lo retornamos cuando hayamos recopilado los datos. + return data_array; +} diff --git a/Examen1/vista_Menu.c b/Examen1/vista_Menu.c new file mode 100644 index 0000000..5466d82 --- /dev/null +++ b/Examen1/vista_Menu.c @@ -0,0 +1,17 @@ +#include"TDA_Statistics.h" + +void vista_Menu() +{ + char nombre_archivo[50]; + + system("clear"); + + printf("\n\nIngrese el nombre del archivo para la captura de datos."); + printf("\nNombre del archivo: "); + gets(nombre_archivo); + + controlador_Proceso(nombre_archivo); + + +} +