- /*
- Beschreibung: Termin 8 Aufgabe 4:
- Programm zum einlesen von zwei Variablen, berechnung des Mittelwertes
- und der Standartabweichung der Variablen
- sowie Ausgabe der eingegebenen bzw. berechneten Werte.
- Ersteller: Michael Mayerhofer PHB1B
- Datum: 07.12.2010
- */
- #include <stdio.h>
- #include <locale.h>
- #include <math.h>
- int main(void) {
- int iGelesen=0, iGelesenGes=0, iZeichen=0;
- /* Variable zum Einlesen von double und intenger Variablen */
- double dZ1 = 0.0;
- double dZ2 = 0.0;
- double dMwZ2 = 0.0;
- double dSumZ2 = 0.0;
- int iAnzZ2 = 0;
- double dSumZ2Q = 0.0;
- double dStaAbZ2 = 0.0;
- setlocale(LC_ALL, ""); /* Dezimaltrennzeichen aus Systemumgebung uebernehmen */
- /* Benutzerhinweise und Statusinfos. */
- fprintf(stderr, "Programmgeruest zum Lesen von stdin bis EOF.\n");
- fprintf(stderr, "Kommazahlen so %.2f oder so %.2e darstellen.\n", 12.34, 12.34);
- fprintf(stderr, "Zahlen bei eingabe bitte mit ; trennen\n");
- fprintf(stderr, "Zum Beenden der Eingabe STRG+z und [Enter].\n\n");
- fprintf(stderr, "x;y(x);m(y);s(y)\n");
- /* Schleife zum kontinuierlich Einlesen bis EOF (End-of-File): */
- iGelesenGes = 0;
- do { /* Einlesen solange kein EOF */
- iGelesen = scanf("%lf;%lf", &dZ1, &dZ2); /* Einlesen zweier Kommazahlen */
- if(iGelesen!=EOF) {
- do {iZeichen=getchar();} /* Uebrige Zeichen aus stdin einlesen und verwerfen, */
- while(iZeichen!='\n' && iZeichen!=EOF); /* aber nur bis Zeilen- oder Dateiende */
- }
- if(iGelesen ==2) { /* scanf konnte etwas lesen */
- dSumZ2 = dSumZ2 + dZ2; /* bilden der Summe aller eingelesenen zweiten Zahlen*/
- iAnzZ2 = iAnzZ2 + 1; /*anzahl der eingelesenen zweiten Zahlen*/
- dMwZ2 = dSumZ2 / iAnzZ2; /*Mittelwert berechnung*/
- dSumZ2Q = dSumZ2Q + dZ2*dZ2;/*Quadratsummen bilden*/
- if (iAnzZ2>1) /* Standartabweichung berechnen sobald mehr wie zwei zweite Zahlen vorhanden sind*/
- {
- dStaAbZ2 = sqrt((dSumZ2Q - dSumZ2 * dSumZ2 / iAnzZ2)/(iAnzZ2-1)); /* berechnung der Standartabweichung*/
- printf(" %.2lf;%.2lf;%.2lf;%.2lf\n", dZ1,dZ2,dMwZ2,dStaAbZ2); /* ausgabe der Werte mit Standartabweichung*/
- }
- else /* Wenn nur eine zweite Zahl vorhanden ist keine Standartabweichung berechnen/ausgeben*/
- {printf(" %.2lf;%.2lf;%.2lf;\n", dZ1,dZ2,dMwZ2);} /* ausgabe der Werte ohne Standartabweichung*/
- iGelesenGes = iGelesenGes + iGelesen;
- } else /* Fehlermeldung bei nicht korrekter eingabe*/
- {
- printf("Es wurden keine Zahlen eingegeben\n");
- }
- } while(iGelesen != EOF); /* Porgramm wird bis zum beenden durch den Benutzer wiederholt */
- fprintf(stderr, "Es wurden %d Daten eingelesen.\nEnde mit [Enter] ... ", iGelesenGes);
- getchar();
- return 0;
- }