Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** //
- // ** // ** // ** // Código fuente de programa que recibe 1 conjunto de datos // ** // ** // ** //
- // ** // ** // ** // a 2 columnas, donde la primer columna es el índice y la // ** // ** // ** //
- // ** // ** // ** // * segunda columna son los datos, generando a partir de * // ** // ** // ** //
- // ** // ** // ** // * ambas columnas el histograma respectivo y el análsis * // ** // ** // ** //
- // ** // ** // ** // ** // ** // ** estadístico de los datos ** // ** // ** // ** // ** // ** //
- // ** // ** // ** // * Licenciado bajo GNU General Public License (GPL) 3.0 * // ** // ** // ** //
- // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** //
- // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** //
- /* ** // ** // ** // ** // ** // F v q __ U k r a i N a z i s ! // ** // ** // ** // ** // ** */
- /* ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** */
- /* ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** // ** */
- #include <stdio.h>
- #include <float.h>
- #include <stdlib.h>
- #define div 10
- int countlines(FILE *fp);
- float Q_sqrt(float number);
- float comparaMax(float x, float y);
- float comparaMin(float x, float y);
- int clasificador(float min, float sec, float dato);
- int main(int argc, char *argv[]){
- int *index = NULL,*secciones = NULL,lineas = 0,a = 0, freqAcum=0;
- float *arrDatos = NULL, datoMax = 0.0, datoMin = FLT_MAX, tamSeccion = 0.0, prom = 0.0, desvEst = 0.0, varianza=0.0, ErrorProm=0.0;
- secciones = (int*)calloc(div+1, sizeof(int));
- FILE *archivo = NULL, *salida = NULL, *tabla = NULL;
- archivo = fopen(argv[1], "r+");
- salida = fopen("Histograma.data", "w");
- tabla = fopen("Tabla.csv", "w");
- if (archivo == NULL || salida == NULL || tabla == NULL) {
- perror("Error al abrir archivos");
- exit(-1);
- }
- lineas = countlines(archivo);
- index = (int*)calloc(lineas, sizeof(int));
- arrDatos = (float*)calloc(lineas,sizeof(float));
- printf("Renglones = %i\n",lineas);
- printf("Contenido del archivo de datos:\n");
- for(a = 0; a<lineas; a++){
- fscanf(archivo, "%i,%f", (index+a), (arrDatos+a));
- printf("Dato %i: %4.2f\n", *(index+a),*(arrDatos+a));
- datoMax = comparaMax(datoMax,*(arrDatos+a));
- datoMin = comparaMin(datoMin,*(arrDatos+a));
- prom = prom + arrDatos[a];
- }
- prom = prom/a;
- rewind(archivo);
- tamSeccion = (datoMax - datoMin)/div;
- printf("Dato mínimo: %f\nDato máximo: %f\nTamaño de intervalos: %f\n", datoMin,datoMax,tamSeccion);
- /*********************************************************/
- for(a = 0; a <= lineas; a++) desvEst += ((prom - arrDatos[a]) * (prom - arrDatos[a]));
- desvEst = desvEst/a;
- desvEst = Q_sqrt(desvEst); /*Esta línea se separó en 2, esta y la anterior, porque al querer evaluar todo en el argumento, el pinche valor se bugueaba y aparte de salir mal, salía negativo xdddd*/
- rewind(archivo);
- /*********************************************************/
- for(a = 0; a<lineas; a++) (secciones[clasificador(datoMin,tamSeccion,arrDatos[a])])++;
- printf("Intervalo Repeticiones Probabilidad Freq-Acum\n");
- fprintf(tabla, "Intervalo,Repeticiones,Probabilidad,Freq Acum\n");
- for(a = 0; a<div; a++) {
- freqAcum=freqAcum+secciones[a];
- printf("%4i:\t\t%i\t%f\t%i\n",a+1,secciones[a],(((float)secciones[a])/100),freqAcum);
- fprintf(salida, "%i %i\n", a+1, secciones[a]);
- fprintf(tabla, "%i, %i, %f, %i\n", a+1, secciones[a], (((float)secciones[a])/100), freqAcum);
- }
- rewind(archivo);
- /*********************************************************/
- varianza = Q_sqrt(desvEst);
- ErrorProm = varianza/Q_sqrt(lineas);
- /*********************************************************/
- printf("El promedio es: %4fmm\n", prom);
- printf("La Desviación Estándar es: %4f\n", desvEst);
- printf("La varianza (o sigma) es: %4f\n", varianza);
- printf("El error del promedio es: %4f\n", ErrorProm);
- fprintf(tabla, "Promedio,%f\n", prom);
- fprintf(tabla, "Desviación Estándar, %f\n", desvEst);
- fprintf(tabla, "Varianza,%f\n", varianza);
- fprintf(tabla, "Error Promedio,%f\n", ErrorProm);
- fclose(archivo);
- fclose(salida);
- fclose(tabla);
- free(arrDatos);
- free(index);
- free(secciones);
- return 0;
- }
- int countlines(FILE *fp){
- int lines=0;
- while(!feof(fp)) if(fgetc(fp) == '\n') lines++;
- rewind(fp);
- return lines;
- }
- float comparaMax(float x, float y){
- return (x>y)?x:y;
- }
- float comparaMin(float x, float y){
- return (x<y)?x:y;
- }
- int clasificador(float min, float sec, float dato){
- if (min <= dato && dato < (min + sec)) return 0;
- if (min + sec <= dato) return 1 + clasificador(min + sec, sec, dato);
- return -1 /* Dato fuera de rango, no debería ocurrir si los datos son correctos */
- }
- float Q_sqrt(float number){
- long i=0.0;
- float x2=0.0, y=0.0;
- const float threehalfs = 1.5F;
- x2 = number * 0.5F;
- y = number;
- i = *(long *)&y; // interpret bit pattern as integer
- i = 0x5f3759df - (i >> 1); // initial guess for Newton's method
- y = *(float *)&i; // interpret back as float
- y = y * (threehalfs - (x2 * y * y)); // Newton's method iteration
- return (1/y);
- }
Add Comment
Please, Sign In to add comment