Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions Examen1/Estadisticos.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
Media: 4.955432
Mediana: 5.031065
Moda: 4.162632
Desviacion Estandar: 0.280655
Minimo: 4.162632
Maximo: 5.636707
Distancia Intercuartil: 0.554859
Binary file added Examen1/Examen 1 TDA (1).pdf
Binary file not shown.
Binary file added Examen1/Examen 1 TDA.pdf
Binary file not shown.
Binary file added Examen1/Examen.exe
Binary file not shown.
43 changes: 43 additions & 0 deletions Examen1/controlador.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
//
// controlador.c
//
//
// Created by Mauricio de Garay, Bernardo García and Fernando Tapia on 29/09/2020.
//
#include "controlador.h"
#define TRUE 1
#define FALSE 0


/* Function prototypes. */
/*
* La función Principal se encarga de controlar el flujo de programa, ya que ésta es la encargada de conectar a los módulos de vista y modelo, así como revisar las validaciones.
*
*
* @params

*
* @returns
void

*/
void controlador_Principal()
{
char nombreArch[50];
int Validacion;
Validacion=FALSE;
do
{
nombreArch[0]=0;
vistaSolicitarDatos(nombreArch);
strcat(nombreArch, ".csv");
Validacion=pipesDoesFileExist(nombreArch);
if(Validacion==FALSE)
{
printf("ERROR: No existe el archivo llamado %s.\n", nombreArch);
}
}
while(Validacion==FALSE);
modeloPrincipal(nombreArch);
vistaDesplegarDatos();
}
45 changes: 45 additions & 0 deletions Examen1/controlador.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
//
// controlador.h
//
//
// Created by Mauricio de Garay, Bernardo García and Fernando Tapia on 29/09/2020.
//
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <strings.h>
#include <ctype.h>
#include "vista.h"
#include "modelo.h"
#ifndef controlador_h
#define controlador_h
#ifndef controlador_IMPORT
#define EXTERN
#else
#define EXTERN extern
#endif


/* Función del módulo. */
/*
* El módulo controlador se encarga de controlar el flujo de programa, ya que ésta es la encargada de conectar a los módulos de vista y modelo, así como revisar las validaciones.
*
*
*/
/* Function prototypes. */
/*
* La función Principal se encarga de controlar el flujo de programa, ya que ésta es la encargada de conectar a los módulos de vista y modelo, así como revisar las validaciones.
*
*
* @params

*
* @returns
void

*/
EXTERN void controlador_Principal();

#undef controlador_IMPORT
#undef EXTERN
#endif
Binary file added Examen1/controlador.o
Binary file not shown.
1 change: 0 additions & 1 deletion Examen1/data.csv
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
,0
0,5.077850806
1,5.11361086
2,5.013413304
Expand Down
3 changes: 3 additions & 0 deletions Examen1/data_statistic.csv
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
4.000000 4
5.000000 45
6.000000 1
5 changes: 5 additions & 0 deletions Examen1/main.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
#include "controlador.h"
int main()
{
controlador_Principal();
}
Binary file added Examen1/main.o
Binary file not shown.
239 changes: 239 additions & 0 deletions Examen1/modelo.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,239 @@
// modelo.c
//
//
// Created by Mauricio de Garay on 08/10/2020
//
#include "modelo.h"

#include <math.h>

void modeloPrincipal(char NombreArchivo[]);
DatosCSV* modeloLeerDatosArchivo(char NombreArchivo[]);
DatosCSV* modeloObtenerDatosHistograma(DatosCSV *DatosOrigen);
/* Function prototypes. */


/*
* La función modeloPrincipal se encarga de controlar el flujo del modelo.
*
*
* @params
NombreArchivo: el nombre del archivo donde están los datos
*
* @returns


*/
void modeloPrincipal(char NombreArchivo[])
{
DatosCSV *Datos, *DatosHistograma;
Datos=modeloLeerDatosArchivo(NombreArchivo);
DatosHistograma=modeloObtenerDatosHistograma(Datos);
FILE * Archivo;
Archivo=pipesOpenFile("write", "data_statistic.csv");
int tamano=DatosHistograma[0].tamano;
pipesWriteFile(tamano, DatosHistograma, Archivo);
fclose(Archivo);
free(Datos);
free(DatosHistograma);
}
/* Function prototypes. */


/*
* La función modeloLeerDatosArchivo se encarga de Leer los datos del archivo y retornarlos como array.
*
*
* @params
NombreArchivo: el nombre del archivo donde están los datos
*
* @returns


*/
DatosCSV* modeloLeerDatosArchivo(char NombreArchivo[])
{
FILE *Archivo;
DatosCSV *Datos;
Archivo=pipesOpenFile("read", NombreArchivo);
Datos=pipesReadCSV(Archivo);
fclose(Archivo);
return Datos;
}
/* Function prototypes. */


/*
* La función modeloObtenerDatosHistograma de hacer los cálculos estadísticos.
*
*
* @params
NombreArchivo: el nombre del archivo donde están los datos
*
* @returns


*/
DatosCSV* modeloObtenerDatosHistograma(DatosCSV DatosOrigen[])
{
float Media, Mediana, Moda, std, min, max, intercuartil;
int i;
float suma=0;
Media=0;
int tamano=DatosOrigen[0].tamano;
for(i=0; i<tamano; i++)
{
suma=suma+DatosOrigen[i].valor;
}


Media=suma/(float)tamano;
float temp=0;
for(int i=0; i<tamano; i++)
{
for(int j=i+1; j<tamano; j++)
{
if(DatosOrigen[i].valor>DatosOrigen[j].valor)
{
temp=DatosOrigen[j].valor;
DatosOrigen[j].valor=DatosOrigen[i].valor;
DatosOrigen[i].valor=temp;
}
}
}

if(tamano%2==0)
{
Mediana=DatosOrigen[tamano/2].valor;
}
else
{

Mediana=(DatosOrigen[(int)(tamano/2)].valor+DatosOrigen[(int)(tamano/2)+1].valor)/2;
}
float Numeros[100], Repeticiones[100];
int totalnumeros=0, bandera=0;
for(i=0; i<tamano;i++)
{
bandera=0;
for(int j=0; j<totalnumeros; j++)
{
if(Numeros[j]==DatosOrigen[i].valor)
{
bandera=1;
}
}
if(bandera==0)
{
Numeros[totalnumeros]=DatosOrigen[i].valor;
totalnumeros+=1;
}


}

for(i=0; i<totalnumeros;i++)
{
Repeticiones[i]=0;
for(int j=0; j<tamano; j++)
{

if(Numeros[i]==DatosOrigen[j].valor)
{
Repeticiones[i]+=1;
}
}
}
int MaxRep=0;
for(i=0; i<totalnumeros; i++)
{
if(Repeticiones[i]>MaxRep)
{
MaxRep=Repeticiones[i];
Moda=Numeros[i];
}
}
float sumastd=0;
for(i=0; i<tamano;i++)
{
sumastd=sumastd+pow((DatosOrigen[i].valor-Media),2);
}
std=sumastd/tamano;
std=sqrt(std);
min=10000;
for(i=0; i<tamano; i++)
{
if(DatosOrigen[i].valor<min)
{
min=DatosOrigen[i].valor;
}
}
max=-1000;
for(i=0; i<tamano; i++)
{
if(DatosOrigen[i].valor>max)
{
max=DatosOrigen[i].valor;
}
}
int noventacinco=tamano*0.95; // %95
int venticinco=tamano*0.25; // %25
intercuartil=DatosOrigen[noventacinco].valor-DatosOrigen[venticinco].valor;
DatosCSV *Final;
int totalnumeroshisto=0;
int NumerosHisto[100], Frecuencia[100];
char stringcast[10];
int numerocast;
for(i=0; i<tamano;i++)
{
bandera=0;
stringcast[0]=0;
sprintf(stringcast, "%.0f",DatosOrigen[i].valor);

sscanf(stringcast,"%d",&numerocast);
fflush(stdin);
for(int j=0; j<totalnumeroshisto; j++)
{

if(NumerosHisto[j]==numerocast)
{

bandera=1;
}
}
if(bandera==0)
{
NumerosHisto[totalnumeroshisto]=numerocast;
totalnumeroshisto+=1;
}

}
for(i=0; i<totalnumeroshisto;i++)
{
stringcast[0]=0;
Frecuencia[i]=0;
for(int j=0; j<tamano; j++)
{

sprintf(stringcast, "%.0f",DatosOrigen[j].valor);
sscanf(stringcast,"%d",&numerocast);
fflush(stdin);
if(NumerosHisto[i]==numerocast)
{
Frecuencia[i]+=1;
}
}
}
Final=(DatosCSV*)malloc(sizeof(DatosCSV)*100);
for(i=0;i<totalnumeroshisto; i++)
{
Final[i].valor=NumerosHisto[i];
Final[i].indice=Frecuencia[i];
}
Final[0].tamano=totalnumeroshisto;
FILE *ArchEstadisticos;
ArchEstadisticos=pipesOpenFile("write", "Estadisticos.txt");
fprintf(ArchEstadisticos, "Media: %f\nMediana: %f\nModa: %f\nDesviacion Estandar: %f\nMinimo: %f\nMaximo: %f\nDistancia Intercuartil: %f\n", Media, Mediana, Moda, std, min, max, intercuartil);
fclose(ArchEstadisticos);
return Final;
}
Loading