#include #include #include int calcE12Base(int n) { int value = -1; if(n >= 1 && n <= 12) { value = round(10 * pow(10, (n-1)/12.0)); } return value; } int realE12Base(int n) { int value; switch(n) { case 1: value = 10; break; case 2: value = 12; break; case 3: value = 15; break; case 4: value = 18; break; case 5: value = 22; break; case 6: value = 27; break; case 7: value = 33; break; case 8: value = 39; break; case 9: value = 47; break; case 10: value = 56; break; case 11: value = 68; break; case 12: value = 82; break; default: value = -1; } return value; } double E12Value(int n, int p, bool calculate) { double value = -1.0; if(calculate) { value = calcE12Base(n); } else { value = realE12Base(n); } if(value > 0 && p >= -3 && p <= 9) { value *= pow(10, p); } return value; } void printResistorValue(double value) { double exponent = log10(value); int base1000exponent = (int) floor(exponent/3); char metricPrefix; value /= pow(10, base1000exponent * 3); switch (base1000exponent) { case -1 : metricPrefix = 'm'; break; case 0 : metricPrefix = ' '; break; case 1 : metricPrefix = 'k'; break; case 2 : metricPrefix = 'M'; break; case 3 : metricPrefix = 'G'; break; } if(value < 10) { printf("%3.1f%c", value, metricPrefix); } else { printf("%3.0f%c", value, metricPrefix); } } void printE12(bool calculate) { for(int p = -3; p <= 9; p++) { for(int n = 1; n <= 12; n++) { printResistorValue(E12Value(n, p, calculate)); printf(" "); } printf("\n"); } } int main() { printE12(true); printf("\n"); printE12(false); return 0; }