Don't like ads? PRO users don't see any ads ;-)
Guest

Untitled

By: a guest on Jun 2nd, 2012  |  syntax: None  |  size: 2.62 KB  |  hits: 14  |  expires: Never
download  |  raw  |  embed  |  report abuse  |  print
Text below is selected. Please press Ctrl+C to copy to your clipboard. (⌘+C on Mac)
  1. /*
  2. Beschreibung:   Termin 8 Aufgabe 4:
  3.                                 Programm zum einlesen von zwei Variablen, berechnung des Mittelwertes
  4.                                 und der Standartabweichung der Variablen
  5.                                 sowie Ausgabe der eingegebenen bzw. berechneten Werte.
  6.  
  7. Ersteller:              Michael Mayerhofer PHB1B
  8. Datum:                  07.12.2010
  9. */
  10.  
  11.  
  12.  
  13. #include <stdio.h>
  14. #include <locale.h>
  15. #include <math.h>
  16.  
  17.  
  18.  
  19. int main(void) {
  20.  
  21. int iGelesen=0, iGelesenGes=0, iZeichen=0;
  22.  
  23. /* Variable zum Einlesen von double und intenger Variablen */
  24. double dZ1 = 0.0;
  25. double dZ2 = 0.0;
  26. double dMwZ2 = 0.0;
  27. double dSumZ2 = 0.0;
  28. int iAnzZ2 = 0;
  29. double dSumZ2Q = 0.0;
  30. double dStaAbZ2 = 0.0;
  31.  
  32.  
  33. setlocale(LC_ALL, ""); /* Dezimaltrennzeichen aus Systemumgebung uebernehmen */
  34.  
  35. /* Benutzerhinweise und Statusinfos. */
  36. fprintf(stderr, "Programmgeruest zum Lesen von stdin bis EOF.\n");
  37. fprintf(stderr, "Kommazahlen so %.2f oder so %.2e darstellen.\n", 12.34, 12.34);
  38. fprintf(stderr, "Zahlen bei eingabe bitte mit ; trennen\n");
  39. fprintf(stderr, "Zum Beenden der Eingabe STRG+z und [Enter].\n\n");
  40. fprintf(stderr, "x;y(x);m(y);s(y)\n");
  41.  
  42. /* Schleife zum kontinuierlich Einlesen bis EOF (End-of-File): */
  43. iGelesenGes = 0;
  44. do {                                            /* Einlesen solange kein EOF */
  45. iGelesen = scanf("%lf;%lf", &dZ1, &dZ2); /* Einlesen zweier Kommazahlen */
  46. if(iGelesen!=EOF) {
  47. do {iZeichen=getchar();}        /* Uebrige Zeichen aus stdin einlesen und verwerfen, */
  48. while(iZeichen!='\n' && iZeichen!=EOF); /* aber nur bis Zeilen- oder Dateiende */
  49. }
  50. if(iGelesen ==2) {                      /* scanf konnte etwas lesen */
  51.  
  52. dSumZ2 = dSumZ2 + dZ2;          /* bilden der Summe aller eingelesenen zweiten Zahlen*/
  53. iAnzZ2 = iAnzZ2 + 1;            /*anzahl der eingelesenen zweiten Zahlen*/
  54. dMwZ2 = dSumZ2 / iAnzZ2;        /*Mittelwert berechnung*/
  55. dSumZ2Q = dSumZ2Q + dZ2*dZ2;/*Quadratsummen bilden*/
  56.  
  57. if (iAnzZ2>1) /* Standartabweichung berechnen sobald mehr wie zwei zweite Zahlen vorhanden sind*/
  58.         {
  59.         dStaAbZ2 = sqrt((dSumZ2Q - dSumZ2 * dSumZ2 / iAnzZ2)/(iAnzZ2-1)); /* berechnung der Standartabweichung*/
  60.         printf(" %.2lf;%.2lf;%.2lf;%.2lf\n", dZ1,dZ2,dMwZ2,dStaAbZ2);     /* ausgabe der Werte mit Standartabweichung*/
  61.         }
  62. else /* Wenn nur eine zweite Zahl vorhanden ist keine Standartabweichung berechnen/ausgeben*/
  63.         {printf(" %.2lf;%.2lf;%.2lf;\n", dZ1,dZ2,dMwZ2);} /* ausgabe der Werte ohne Standartabweichung*/
  64.        
  65. iGelesenGes = iGelesenGes + iGelesen;
  66.  
  67. } else /* Fehlermeldung bei nicht korrekter eingabe*/
  68.         {
  69.         printf("Es wurden keine Zahlen eingegeben\n");
  70.         }
  71.  
  72. } while(iGelesen != EOF); /* Porgramm wird bis zum beenden durch den Benutzer wiederholt */
  73.  
  74. fprintf(stderr, "Es wurden %d Daten eingelesen.\nEnde mit [Enter] ... ", iGelesenGes);
  75. getchar();
  76.  
  77.  
  78. return 0;
  79. }