void SVMUdq(double Ud, double Uq, unsigned int *Tinv) { double Angle = 0; double theta = 0; int sector = 0; double Dm = 0, Dn = 0, D0 = 0; // 占空比 Angle = fmod((10 * pi * (period_count / 1000.0)), (2 * pi)); theta = fmod(Angle,1/3.0 * pi); sector = (int)floor( Angle / (1/3.0 * pi)) + 1; Dm = M * sin(1/3.0 * pi - theta) / 2.0; Dn = M * sin(theta) / 2.0; D0 = (0.5 - Dm - Dn) / 2.0; Dm = roundn(Dm); Dn = roundn(Dn); D0 = roundn(D0); if (D0 < 0) D0 = 0; switch (sector) { case 1: Tinv[0] = period - (int)floor(period * (D0)); Tinv[1] = period - (int)floor(period * (D0 + Dm)); Tinv[2] = period - (int)floor(period * (D0 + Dm + Dn)); break; case 2: Tinv[0] = period - (int)floor(period * (D0 + Dn)); Tinv[1] = period - (int)floor(period * (D0)); Tinv[2] = period - (int)floor(period * (D0 + Dm + Dn)); break; case 3: Tinv[0] = period - (int)floor(period * (D0 + Dm + Dn)); Tinv[1] = period - (int)floor(period * (D0)); Tinv[2] = period - (int)floor(period * (D0 + Dm)); break; case 4: Tinv[0] = period - (int)floor(period * (D0 + Dm + Dn)); Tinv[1] = period - (int)floor(period * (D0 + Dn)); Tinv[2] = period - (int)floor(period * (D0)); break; case 5: Tinv[0] = period - (int)floor(period * (D0 + Dm)); Tinv[1] = period - (int)floor(period * (D0 + Dm + Dn)); Tinv[2] = period - (int)floor(period * (D0)); break; case 6: Tinv[0] = period - (int)floor(period * (D0)); Tinv[1] = period - (int)floor(period * (D0 + Dm + Dn)); Tinv[2] = period - (int)floor(period * (D0 + Dn)); } }
int main() { const char err = '#'; int cases; int i, j; char one[128]; int errors, total; gets(one); sscanf(one, "%d", &cases); for (i = 1; i <= cases; i++) { gets(one); #ifdef DEBUG printf("\tscanned: %s\n", one); fflush(stdout); #endif total = 0; errors = 0; while (one[0] != '\0') { j = 0; while (one[j] != '\0') { if (one[j] == err) errors++; total++; #ifdef DEBUG printf("\tcase %3d; char %3d; total %3d; errors %3d; effeciency %5f\n", i, j, total, errors, 100.0 * ((float) (total - errors)) / ((float) total)); fflush(stdout); #endif j++; } printf("\n"); gets(one); #ifdef DEBUG printf("\tscanned: %s\n", one); fflush(stdout); #endif } printf("The efficiency ratio is %3f%%.\n", roundn(100.0 * ((float) (total - errors)) / ((float) total), 1)); } return 0; }