Advertisement
hpolzer

Widerstandsreihen

Dec 13th, 2019
1,033
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.71 KB | None | 0 0
  1. /*
  2.     Berechnung von Widerstandswerten in E-Reihen mit ANSI C,
  3.     HP, 13. Dezember 2019
  4.  
  5.     Uebersetzen mit: gcc -ansi -pedantic -o wr wr.c
  6.     9.19 in der E192-Reihe wird vom Programm auf 9.20 korrigiert.
  7. */
  8.  
  9. #define WPZ 12  /* ausgegebene Werte pro Zeile */
  10.  
  11. #include <math.h>
  12. #include <stdio.h>
  13. #include <stdlib.h>
  14.  
  15. int main (int argc, char *argv[])
  16. {
  17.     int i,n=0,z=1;  /* i,z=Zaehlvariablen, n=Reihe */
  18.     double k,       /* konstanter Faktor */
  19.            t,       /* Toleranz */
  20.            ww;      /* Widerstandswert */
  21.  
  22.     if (argc==2) n=atoi(argv[1]);
  23.  
  24.     if ((n==3)||(n==6)||(n==12)||   /* Gueltige Eingabe */
  25.         (n==24)||(n==48)||(n==96)||(n==192)) {
  26.       k=pow(10,(double)1/n); /* n. Wurzel aus 10 ziehen */
  27.       /* Formel fuer Toleranzberechnung aus
  28.       https://en.wikipedia.org/wiki/E_series_of_preferred_numbers,
  29.       abgerufen am 13.12.2019: */
  30.       t=(k-1)/(k+1)*100; /* i.d. Praxis aber gerundete Toleranzen! */
  31.       printf ("E%d-Reihe (%.1lf%% rechnerische Toleranz):\n",n,t);
  32.       for (i=1;i<=n;i++) {
  33.         ww=pow(k,i-1);
  34.         /* Ggf. auf in der Elektronik gebraeuchliche Werte runden: */
  35.         if ((n<48)&&(ww>2.6)&&(ww<4.7)) ww=ww+.1; else
  36.           if ((n<48)&&(ww>8.2)&&(ww<8.3)) ww=ww-.1;
  37.         /* Rundungsabweichung in E-192-Reihe korrigieren: */
  38.         if ((n==192)&&((ww>9.19)&&(ww<9.20))) printf ("9.20"); else
  39.           /* Reihen 3 bis 24: eine Nachkommastelle: */
  40.           if (n<48) printf ("%.1lf",ww); else
  41.             /* Reihen >= 48: zwei Nachkommastellen: */
  42.             printf ("%.2lf",ww);
  43.         /* Punkt, Komma, Zeilenumbruch: */
  44.         if (z==n) printf ("."); else /* letzter Wert gezaehlt: Ende der E-Reihe */
  45.          if (z%WPZ) printf (", "); else /* Werte getrennt ausgeben */
  46.             printf ("\n"); /* folgende Ausgaben in neue Zeile */
  47.         z++;
  48.       } /* for */
  49.       printf ("\t(%d Werte)\n", n);
  50.       return 0;
  51.     } /* if */
  52.       else {    /* Keine oder ungueltige Eingabe: */
  53.           printf ("Gueltige Werte: 3,6,12,24,48,96,192.\n");
  54.           return -1;
  55.     } /* else */
  56. } /* main */
  57.  
  58. /*
  59. Moegliche Ausgaben des Programms:
  60.  
  61. E3-Reihe (36.6% rechnerische Toleranz):
  62. 1.0, 2.2, 4.7.  (3 Werte)
  63.  
  64. E6-Reihe (19.0% rechnerische Toleranz):
  65. 1.0, 1.5, 2.2, 3.3, 4.7, 6.8.   (6 Werte)
  66.  
  67. E12-Reihe (9.6% rechnerische Toleranz):
  68. 1.0, 1.2, 1.5, 1.8, 2.2, 2.7, 3.3, 3.9, 4.7, 5.6, 6.8, 8.2. (12 Werte)
  69.  
  70. E24-Reihe (4.8% rechnerische Toleranz):
  71. 1.0, 1.1, 1.2, 1.3, 1.5, 1.6, 1.8, 2.0, 2.2, 2.4, 2.7, 3.0
  72. 3.3, 3.6, 3.9, 4.3, 4.7, 5.1, 5.6, 6.2, 6.8, 7.5, 8.2, 9.1. (24 Werte)
  73.  
  74. E48-Reihe (2.4% rechnerische Toleranz):
  75. 1.00, 1.05, 1.10, 1.15, 1.21, 1.27, 1.33, 1.40, 1.47, 1.54, 1.62, 1.69
  76. 1.78, 1.87, 1.96, 2.05, 2.15, 2.26, 2.37, 2.49, 2.61, 2.74, 2.87, 3.01
  77. 3.16, 3.32, 3.48, 3.65, 3.83, 4.02, 4.22, 4.42, 4.64, 4.87, 5.11, 5.36
  78. 5.62, 5.90, 6.19, 6.49, 6.81, 7.15, 7.50, 7.87, 8.25, 8.66, 9.09, 9.53. (48 Werte)
  79.  
  80. E96-Reihe (1.2% rechnerische Toleranz):
  81. 1.00, 1.02, 1.05, 1.07, 1.10, 1.13, 1.15, 1.18, 1.21, 1.24, 1.27, 1.30
  82. 1.33, 1.37, 1.40, 1.43, 1.47, 1.50, 1.54, 1.58, 1.62, 1.65, 1.69, 1.74
  83. 1.78, 1.82, 1.87, 1.91, 1.96, 2.00, 2.05, 2.10, 2.15, 2.21, 2.26, 2.32
  84. 2.37, 2.43, 2.49, 2.55, 2.61, 2.67, 2.74, 2.80, 2.87, 2.94, 3.01, 3.09
  85. 3.16, 3.24, 3.32, 3.40, 3.48, 3.57, 3.65, 3.74, 3.83, 3.92, 4.02, 4.12
  86. 4.22, 4.32, 4.42, 4.53, 4.64, 4.75, 4.87, 4.99, 5.11, 5.23, 5.36, 5.49
  87. 5.62, 5.76, 5.90, 6.04, 6.19, 6.34, 6.49, 6.65, 6.81, 6.98, 7.15, 7.32
  88. 7.50, 7.68, 7.87, 8.06, 8.25, 8.45, 8.66, 8.87, 9.09, 9.31, 9.53, 9.76. (96 Werte)
  89.  
  90. E192-Reihe (0.6% rechnerische Toleranz):
  91. 1.00, 1.01, 1.02, 1.04, 1.05, 1.06, 1.07, 1.09, 1.10, 1.11, 1.13, 1.14
  92. 1.15, 1.17, 1.18, 1.20, 1.21, 1.23, 1.24, 1.26, 1.27, 1.29, 1.30, 1.32
  93. 1.33, 1.35, 1.37, 1.38, 1.40, 1.42, 1.43, 1.45, 1.47, 1.49, 1.50, 1.52
  94. 1.54, 1.56, 1.58, 1.60, 1.62, 1.64, 1.65, 1.67, 1.69, 1.72, 1.74, 1.76
  95. 1.78, 1.80, 1.82, 1.84, 1.87, 1.89, 1.91, 1.93, 1.96, 1.98, 2.00, 2.03
  96. 2.05, 2.08, 2.10, 2.13, 2.15, 2.18, 2.21, 2.23, 2.26, 2.29, 2.32, 2.34
  97. 2.37, 2.40, 2.43, 2.46, 2.49, 2.52, 2.55, 2.58, 2.61, 2.64, 2.67, 2.71
  98. 2.74, 2.77, 2.80, 2.84, 2.87, 2.91, 2.94, 2.98, 3.01, 3.05, 3.09, 3.12
  99. 3.16, 3.20, 3.24, 3.28, 3.32, 3.36, 3.40, 3.44, 3.48, 3.52, 3.57, 3.61
  100. 3.65, 3.70, 3.74, 3.79, 3.83, 3.88, 3.92, 3.97, 4.02, 4.07, 4.12, 4.17
  101. 4.22, 4.27, 4.32, 4.37, 4.42, 4.48, 4.53, 4.59, 4.64, 4.70, 4.75, 4.81
  102. 4.87, 4.93, 4.99, 5.05, 5.11, 5.17, 5.23, 5.30, 5.36, 5.42, 5.49, 5.56
  103. 5.62, 5.69, 5.76, 5.83, 5.90, 5.97, 6.04, 6.12, 6.19, 6.26, 6.34, 6.42
  104. 6.49, 6.57, 6.65, 6.73, 6.81, 6.90, 6.98, 7.06, 7.15, 7.23, 7.32, 7.41
  105. 7.50, 7.59, 7.68, 7.77, 7.87, 7.96, 8.06, 8.16, 8.25, 8.35, 8.45, 8.56
  106. 8.66, 8.76, 8.87, 8.98, 9.09, 9.20, 9.31, 9.42, 9.53, 9.65, 9.76, 9.88. (192 Werte)
  107. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement