Rodex_ icon

Varianz_List

Rodex_ | PRO | 02/27/17 10:37:10 AM UTC | 0 ⭐ | 239 👁️ | Never ⏰ | []
C |

3.45 KB

|

None

|

0 👍

/

0 👎

#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