-
Notifications
You must be signed in to change notification settings - Fork 0
/
focn.c
116 lines (91 loc) · 3.96 KB
/
focn.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*FOCn by Dietmar G. SCHRAUSSER (C) 2000*/
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define SIZE 64 /*globale feldgroessen def, n=64 leads max*/
void _err_msg (char *PszProgName); /*prozedur fehlermeldung und usage instruktion*/
void _head(struct _iobuf *stream); /*prozedur für kopfzeilen*/
char dbuffer [9],tbuffer [9]; /*buffer fuer time und date*/
main(int argc, char *argv[]) /*main übernimmt n argumente im vektor argv*/
{
FILE *inStream, *outStream,*logStream; /*streams*/
float feld[SIZE],xValue = 0, xMax = -100, xMin=100, yfn = 0;
int iLauf=0, jLauf=1;
if (argc != 5) /*was wenn keine oder zuwenig, zuviel argumente?*/
{
printf("ERROR, check arguments!\n");
_err_msg(argv[0]);
}
/*def von input und outputdatei:
argument 1:input; argument 2:output*/
inStream = fopen( argv[1], "r" );
outStream = fopen( argv[2], "w" );
logStream = fopen( "focn.rep", "a+" );
if (inStream == NULL) /*was wenn keine datendatei*/
{
printf("ERROR, check file %s!\n", argv[1]);
_err_msg(argv[0]);
}
_head(logStream);
/*berechnung von yfn*/
for (jLauf = 1; jLauf <= atoi(argv[3]); jLauf++) /*jlauf: anzahl der fälle=argument 3*/
{
for (iLauf = 0; iLauf <= (atoi(argv[4]) - 1); iLauf++) /*ilauf: anzahl der leads=argument 4*/
{
fscanf(inStream,"%f", &feld[iLauf]); /*einlesen der werte x pro lead von instream*/
}
for (iLauf = 0; iLauf <= (atoi(argv[4]) - 1); iLauf++)
{
feld[iLauf] = feld[iLauf] * -1; /*umpolung erd auf ers*/
if (feld[iLauf] <= 0 ) feld[iLauf]= 0; /*ERS auf 0*/
if (xMax <= feld[iLauf]) xMax = feld[iLauf]; /*find xmax*/
if (xMin >= feld[iLauf]) xMin = feld[iLauf]; /*find xmin*/
}
for (iLauf = 0 ;iLauf <= (atoi(argv[4]) - 1); iLauf++)
{
if(xMax > 0 && xMin < 100)
xValue += 1 - ( (feld[iLauf] - xMin) / (xMax - xMin) ); /*berechnung und summierung von 1-((xi-min)/(xmax-min))*/
else
xValue += 0; /*wenn max=0 +0*/
}
yfn = xValue / ( atoi(argv[4]) - 1 ); /*berechnung von yf=x/n-1*/
printf("case%i\n", jLauf); /*bildschirmausgabe*/
fprintf(outStream,"%f\n",yfn); /* ausgabe in outstream*/
fprintf(logStream,"case%i: xmax=%f yfn=%f\n",jLauf,xMax,yfn); /* ausgabe in logstream*/
xValue = 0;
xMax = -100, xMin = 100; /*reset von 1-xi/xmax, xMax, xMin*/
}
printf("\nwriting file:\nfocn.rep\n%s",argv[2]); /*bildschirmausgabe*/
fclose( inStream );
fclose( outStream );
fclose( logStream );
return 0;
}
/*allgemeine fehlerroutine*/
void _err_msg(char *pszProgName)
{
printf("-----------------------------------------------------------\n");
printf("Usage: focn [input] [output] n k\n ");
printf(" [input]... Input File, Format ASCII tab. (eg. data.dat)\n");
printf(" [output].. Output File\n");
printf(" n........ number of cases\n");
printf(" k........ number of leads\n");
printf("-----------------------------------------------------------\n");
printf("FOCn by d.schrausser\n");
printf("compiled on %s @ %s\n", __DATE__, __TIME__);
exit(EXIT_FAILURE);
}
void _head(struct _iobuf *logStream)
{
printf("FOCn by d.schrausser\n"); /*titelzeile bildschirmausgabe*/
printf("compiled on %s @ %s\n\n", __DATE__, __TIME__);
printf("computing yfn:\n");
fprintf(logStream,"\n************************************\n"); /*titelzeile in logstream*/
fprintf(logStream,"Report: FOCn \n");
_strdate( dbuffer );
fprintf(logStream,"%s ", dbuffer);
_strtime( tbuffer );
fprintf(logStream,"%s\n", tbuffer);
fprintf(logStream,"------------------------------------\n");
}