#include #include #include struct list { double number; struct list *next; }; typedef struct list LISTE; LISTE *top = NULL; LISTE *top_middle = NULL; ///Prozedur zum hinzufügen zur Liste void push(double number) { LISTE *neuerEintrag = (LISTE *) malloc(sizeof(LISTE)); neuerEintrag->number = number; if(top == NULL) { top = neuerEintrag; neuerEintrag->next = NULL; } else { neuerEintrag->next = top; top = neuerEintrag; } } ///Prozedur zum hinzufügen zur Liste void push_middle(double number) { LISTE *neuerEintrag_middle = (LISTE *) malloc(sizeof(LISTE)); neuerEintrag_middle->number = number; if(top_middle == NULL) { top_middle = neuerEintrag_middle; neuerEintrag_middle->next = NULL; } else { neuerEintrag_middle->next = top_middle; top_middle = neuerEintrag_middle; } } ///prozedur zum wert auslesen und speicher freigeben double clear() { if(top == NULL) { return (int) NULL; } double out = top->number; if(top->next == NULL) { free(top); top = NULL; } else { LISTE *tmp = top->next; free(top); top = tmp; } return out; } ///prozedur zum wert auslesen und speicher freigeben double clear_middle() { if(top_middle == NULL) { return (int) NULL; } double out = top_middle->number; if(top_middle->next == NULL) { free(top_middle); top_middle = NULL; } else { LISTE *tmp = top_middle->next; free(top_middle); top_middle = tmp; } return out; } ///Stellt die Länge der Liste fest und gibt den Wert zurück. int size() { int size = 0; for(LISTE *i = top; i != NULL; i = i->next) { size ++; } return size; } ///Mittelwert von allen eingegebenen Zahlen berechnen double middle(int size) { double middle = 0; for(LISTE *i = top; i != NULL; i = i->next) { middle = middle + i->number; } middle = middle/size; return middle; } int main() { int count_process = 1; double eingabe = 1; double number1, mittelwert; double number2 = 0; int laenge; int count = 0; while(count_process > 0) { scanf("%lf", &eingabe); if(eingabe < 0) { laenge = size(); mittelwert = middle(laenge); while(count != laenge) { number1 = clear(); ///Von jeder eingegebenen Zahl faktor für Varianz berechnen und auf zweite Liste speichern push_middle((number1-mittelwert)*(number1-mittelwert)); count ++; } ///Die Werte addieren und in ein double speichern. for(LISTE *i = top_middle; i != NULL; i = i->next) { number2 = number2 + i->number; } number1 = number2/laenge; printf("%.2f", number1); count_process = 0; ///allocated memory wieder freigeben. for(LISTE *i = top_middle; i != NULL; i = i->next) { clear_middle(); } } else { push(eingabe); } } return EXIT_SUCCESS; }