summaryrefslogtreecommitdiffstats
path: root/fiz/naloga/podatki-obdelani/obdelaj.c
diff options
context:
space:
mode:
Diffstat (limited to 'fiz/naloga/podatki-obdelani/obdelaj.c')
-rw-r--r--fiz/naloga/podatki-obdelani/obdelaj.c74
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++;
}