#include <stdio.h>
#include <stdlib.h>
#include <string.h>
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;
}
Comments