diff options
Diffstat (limited to 'fiz/naloga/podatki-obdelani/obdelaj.c')
-rw-r--r-- | fiz/naloga/podatki-obdelani/obdelaj.c | 74 |
1 files changed, 46 insertions, 28 deletions
diff --git a/fiz/naloga/podatki-obdelani/obdelaj.c b/fiz/naloga/podatki-obdelani/obdelaj.c index bc855ae..05241d7 100644 --- a/fiz/naloga/podatki-obdelani/obdelaj.c +++ b/fiz/naloga/podatki-obdelani/obdelaj.c @@ -1,4 +1,6 @@ #define _XOPEN_SOURCE +#define PRAG 0.6 +#define KOLNAZ 10 #include <stdio.h> #include <dirent.h> #include <time.h> @@ -23,17 +25,17 @@ struct poskus { long double a_k; int P_0; long double V_0; - long double t_0; /* čas, ko je prvič F_m > 0.5 N */ + long double t_0; /* čas, ko je prvič F_m > PRAG N */ }; long double /* liter */ h2v (long double /* meter */ x) { if (x > 0.245) return 1; if (x < 0.055) return 0; - return 0.106 + (0.001459010809 /* r^2 */ * 3.14159265 * (x - 0.055)); + return 0.106 + (1000*(0.001459010809 /* r^2 */ * 3.14159265 * (x - 0.055))); } int main (int argc, char ** argv) { - DIR * videod, * vagad; + DIR /* * videod, */ * vagad; struct dirent * dir; struct poskus poskus[256]; /* maks 256 poskusov */ int i = 0; @@ -50,16 +52,16 @@ int main (int argc, char ** argv) { strptime(dir->d_name, "%m%d%H%M", &poskus[i].cas); sscanf(dir->d_name, "%d-%LfL-%dbar", &poskus[i].id, &poskus[i].V_0, &poskus[i].P_0); char videofn[256], vagafn[256], buf[256], outfn[256]; - snprintf(videofn, 256, "../podatki-video/za-%d.csv", poskus[i].id); + snprintf(videofn, 256, "../podatki-video/za-%08d.csv", poskus[i].id); snprintf(vagafn, 256, "../podatki-vaga/%s", dir->d_name); if (strstr(dir->d_name, "slabfilm") || strstr(dir->d_name, "brezfilma") || dir->d_name[3] == '0') continue; FILE * vagaf = fopen(vagafn, "r"); FILE * videof = fopen(videofn, "r"); if (!vagaf || !videof) { - fclose(vagaf); - fclose(videof); fprintf(stderr, "ni uspelo odpreti %s ali %s\n", vagafn, videofn); + if (vagaf) fclose(vagaf); + if (videof) fclose(videof); continue; } int t0; @@ -76,7 +78,7 @@ int main (int argc, char ** argv) { cp++; ldbuf = strtold(cp, &cp); nmer.F_m = ldbuf*9.81; - nmer.F_alpha = 0; + nmer.F_alpha = -1; fgets(buf, 256, vagaf); poskus[i].meritevn++; } @@ -93,12 +95,13 @@ int main (int argc, char ** argv) { omer.h_alpha = strtold(cp, &cp); omer.V_alpha = h2v(omer.h_alpha); omer.F_g = 0.0005*9.81 /* teža plastenke */ + omer.V_alpha*9.81 /* teža vode */; - omer.F_alpha = omer.F_m + omer.F_g; + omer.F_alpha = omer.F_m > PRAG ? omer.F_m + omer.F_g : 0; + fgets(buf, 256, videof); } int intbuf = -1; poskus[i].t_0 = 0; for (int j = 0; j < poskus[i].meritevn; j++) { - if (intbuf != -1 && poskus[i].meritev[j].F_m < 0.5) { + if (intbuf != -1 && poskus[i].meritev[j].F_m < PRAG) { poskus[i].t_m = poskus[i].meritev[j].t_alpha - poskus[i].meritev[intbuf].t_alpha; poskus[i].F_alpha_avg = 0; for (int k = intbuf; k <= j; k++) { @@ -106,34 +109,49 @@ int main (int argc, char ** argv) { } poskus[i].F_alpha_avg /= ((j-intbuf)+1) ? (j-intbuf)+1 : fprintf(stderr, "deljenje z nič pri %s\n", vagafn); } - if (poskus[i].meritev[j].F_m > 0.5) { - intbuf /* pričetek intervala */ = j ? j - 1 : j; + if (poskus[i].meritev[j].F_m > PRAG) { + intbuf /* pričetek intervala */ = j ? j - KOLNAZ : j; poskus[i].t_0 = poskus[i].meritev[j].t_alpha; } + if (poskus[i].meritev[j].F_alpha == -1) { + poskus[i].meritev[j].F_alpha = poskus[i].meritev[j].F_m - 0.0005*9.81; + poskus[i].meritev[j].F_g = 0.0005*9.81; + } } poskus[i].a_k = 0; for (int j = 0; j < poskus[i].meritevn; j++) /* poor man's integral function */ poskus[i].a_k += poskus[i].meritev[j].F_alpha/(poskus[i].meritev[j].F_g/9.81); - snprintf(outfn, 256, "%08d-%LfL-%dbar.csv", poskus[i].id, poskus[i].V_0, poskus[i].P_0); - FILE * outf = fopen(outfn, "w"); - if (!outf) { - fprintf(stderr, "ni uspelo odpreti za pisanje datoteke %s\n", outf); - continue; - } - for (int j = 0; j < poskus[i].meritevn; j++) { - fprintf(outf, "%d,%Lf,%Lf,%Lf,%Lf,%Lf\n", - poskus[i].meritev[j].t_alpha, - poskus[i].meritev[j].F_m, - poskus[i].meritev[j].h_alpha, - poskus[i].meritev[j].F_alpha, - poskus[i].meritev[j].V_alpha, - poskus[i].meritev[j].F_g - ); + for (int odmislimo = 0; odmislimo < 2; odmislimo ++) { + snprintf(outfn, 256, "%08d-%.1LfL-%dbar%s.csv", poskus[i].id, poskus[i].V_0, poskus[i].P_0, odmislimo ? "-odmislimo" : ""); + FILE * outf = fopen(outfn, "w"); + if (!outf) { + fprintf(stderr, "ni uspelo odpreti za pisanje datoteke %s\n", outfn); + continue; + } + t0 = -1; + for (int j = 0; j < poskus[i].meritevn; j++) { + if (poskus[i].meritev[j].F_m >= PRAG || (!odmislimo && (t0 != -1 && poskus[i].meritev[j].V_alpha > 0))) { + if (t0 == -1) + t0 = poskus[i].meritev[j].t_alpha; + fprintf(outf, "%d,%Lf,%Lf,%Lf,%Lf,%Lf\n", + poskus[i].meritev[j].t_alpha - t0, + poskus[i].meritev[j].F_m, + poskus[i].meritev[j].h_alpha, + poskus[i].meritev[j].F_alpha, + poskus[i].meritev[j].V_alpha, + poskus[i].meritev[j].F_g + ); + /* + else + fprintf(outf, "%d,,,,,\n", poskus[i].meritev[j].t_alpha); + */ + } + } + fclose(outf); } fclose(vagaf); fclose(videof); - fclose(outf); - fprintf(stdout, "zabeležil %d: V_0: %Lf, P_0: %Lf, a_k: %Lf, t_m: %Lf, F_alpha_avg: %Lf\n", + fprintf(stdout, "zabeležil %d: V_0: %.1Lf, P_0: %d, a_k: %Lf, t_m: %Lf, F_alpha_avg: %Lf\n", poskus[i].id, poskus[i].V_0, poskus[i].P_0, poskus[i].a_k, poskus[i].t_m, poskus[i].F_alpha_avg); i++; } |