#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <assert.h>
typedef union tagVxValue {
int per;
double val;
} VxValue;
#define REC_PER 0
#define REC_VAL 1
typedef struct tagVx {
double max;
int rec;
VxValue vxv;
} Vx;
typedef struct tagFlow {
double q;
double s;
double vx;
} Flow;
void set_flow(Flow *pf)
{
if (pf)
pf->q = pf->s * pf->vx;
}
void print_flow(Flow *pf)
{
if (pf) {
printf( "%15s: %.2f\n"
"%15s: %.2f\n"
"%15s: %.2f\n",
"S", pf->s,
"Vx", pf->vx,
"Q", pf->q);
printf("-------------------------\n");
}
}
int main(int argc, char *argv[])
{
// vx1 & f1
Vx vx1 = { 200, REC_PER, { .per = 25 } };
Flow f1;
f1.s = 0.1;
f1.vx = vx1.rec ?
vx1.vxv.val :
(vx1.vxv.per / 100.0 * vx1.max);
set_flow(&f1);
print_flow(&f1);
// vx2 & f2
Vx vx2 = { 200, REC_VAL, { .val = 50 } };
Flow f2;
f2.s = 0.1;
f2.vx = vx2.rec ?
vx2.vxv.val :
(vx2.vxv.per / 100.0 * vx2.max);
set_flow(&f2);
print_flow(&f2);
// f1.q should equals f2.q
assert(f1.q == f2.q);
return 0;
}