Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Preprozessor-Anweisungen
- #include <stdio.h>
- #include <stdlib.h>
- #include <strings.h>
- #include <unistd.h>
- /*
- Name: Niklas Martin Haiden
- Klasse / Katalognr.: 1BHIF / 8
- Aufnahmenummer: 20170023
- Abgabe-Datum: 26.4.2018
- Programmname: POSHÜ_6_HAIDEN
- --------------------------------------------------------
- Beschreibung:
- Es ist ein Programm zu schreiben, durch welches der User Datenwerte
- einlesen kann und durch verschiedene Kommandos statistisch auswerten kann.
- */
- ///Defines & andere Preprozessor-Befehle
- ///****************************************************
- #define gross 50 ///<-- Größe des f & fcopy Arrays
- ///****************************************************
- ///====================================================================================
- ///Funktionsprototypen
- ///====================================================================================
- void displayIntArr(const int *f, size_t n);
- void deletedata(int *f, size_t n);
- int spberechnung(const int *f, size_t n);
- void werteEinlesen(int *f, int *weing);
- void sortfeld(int *f, size_t n);
- void copyfeld(const int *f, int *fcopy, size_t n);
- void sortedanzeigen(const int *f, size_t n);
- void wait();
- void help();
- void fehlermeldung(int fehlerwert);
- double calcarithm(int *f, size_t n);
- int modalwert(const int *f, size_t n, int *modal);
- double median(const int *f, size_t n);///===================================================================================
- /********************************************************
- Funktionsname: main
- =======================================================
- Zweck: Stellt die Auswahl sowie die Funktionsaufrufe
- bereit
- =======================================================
- Variablen / Felder:
- f[gross]: Hier werden die Daten gespeichert
- userw[50]: Größe des Arrays, wo die Befehle,
- die der User, absetzt gespeichert werden
- int userwadd
- quit: Variable die speichert, wie lange
- der User das Programm ausführen möchte.
- Möchte der User aufhören, wird es auf 0
- gesetzt.
- weing: Wieviele Werte eingegeben wurden
- ueing: Für die Eingabe, wieviele Buchstaben
- der User eingegeben hat.
- modal: Modalwert
- =======================================================
- Return-Wert: 0 : alles ist glatt gelaufen
- *******************************************************
- */
- int main() {
- int f[gross]; //Feld in dem die Daten gespeichert werden
- char userw[50]; //Wahl des Users
- int quit = 1; //Ist der User fertig, wird es auf 0 gesetzt
- int weing = 0; //Wieviele mal eingegeben Werte eingegeben wurde
- int ueing; //Wieviele Buchstaben hat der User eingegeben, für Befehleauswahl
- int modal;
- int retarn;
- printf("\n\tWillkommen. Befehle mit ? auflisten.\n");//Willkommens-Nachricht
- do {
- printf("\n\t> "); //Eingabeprompt
- ueing = sscanf(gets(userw), "%c%c", &userw[0], &userw[1]); //Einlesen
- if(ueing == 1) {
- switch(userw[0]) {
- case '?':
- help(); //Aufrufen der Help-Funktion
- wait();
- break;
- case 'n':
- werteEinlesen(f, &weing);
- system("cls");
- break;
- case 'o':
- if(weing > 0) {
- printf("\n\tSortiert: \n");
- sortedanzeigen(f, weing);
- }
- else puts("\n\tEs gibt noch keine Werte.\n");
- break;
- case 's':
- if(weing > 0) {
- puts("\n\tUnsortiert:");
- displayIntArr(f, weing);
- }
- else puts("\n\tEs gibt noch keine Werte.\n");
- break;
- case 'd':
- weing = 0; //Setzen der eingegeben Werte auf 0
- printf("\n\tWerte geloescht.\n");
- wait();
- system("cls");
- break;
- case 'q':
- printf("\n\tAuf Wiedersehen!\n");
- wait();
- quit = 0;
- break;
- default:
- system("cls");
- fehlermeldung(3);
- wait();
- break;
- }
- }
- if(ueing == 2) {
- if(userw[0] == 's' && userw[1] == 'p') {
- printf("\n\tSpannweite: %d\n", spberechnung(f, weing));
- wait();
- } else if(userw[0] == 'm' && userw[1] == 'e') {
- printf("\n\tMedian: %.3lf\n", median(f, weing));
- } else if(userw[0] == 'm' && userw[1] == 'o') {
- system("cls");
- retarn = modalwert(f, weing, &modal);
- if(retarn == 1) {
- printf("\n\tModalwert: %d", modal);
- } else {
- printf("\n\tModalwert nicht eindeutig.\n");
- }
- } else {
- fehlermeldung(3);
- }
- }
- }while(quit);
- return 0;
- }
- /******************************************************
- Funktionsname: wait
- =======================================================
- Zweck: Wartet bis der User bereit ist
- =======================================================
- Variablen / Felder:
- wait: Wird für getch benötigt,
- hat keine weitere Funktion.
- =======================================================
- Return-Wert: keinen
- *******************************************************
- */
- void wait() {
- char wait;
- wait = getch();
- system("cls");
- }
- /******************************************************
- Funktionsname: fehlermeldung
- =======================================================
- Zweck: Zeigt eine Fehlermeldung an,
- basierend auf Fehlerwert
- =======================================================
- Variablen / Felder:
- fehlerwert: Wert der von dem
- Fehlerverursacher übergeben wird,
- basierend danach wird angezeigt
- =======================================================
- Return-Wert: keinen
- *******************************************************
- */
- void fehlermeldung(int fehlerwert) {
- switch(fehlerwert) {
- case 1:
- system("cls");
- printf("\n\tArray ist bereits voll befuellt.\t");
- wait();
- break;
- case 2:
- system("cls");
- printf("\n\tEingabefehler. Bitte wiederholen.\n");
- wait();
- break;
- case 3:
- printf("\n\tDieses Kommando existiert nicht.\n");
- wait();
- break;
- }
- }
- /******************************************************
- Funktionsname: help
- =======================================================
- Zweck: Zeigt den Hilfe-Text an
- =======================================================
- Variablen / Felder: -
- =======================================================
- Return-Wert: keinen
- *******************************************************
- */
- void help() {
- system("cls"); //Clearen des Bildschirms für bessere Lesbarkeit
- //Ausgabe des Help-Textes
- printf("\n\t> n (Einen) neuen Wert eingeben, welcher an die Datenreihe angehaengt wird.\n");
- printf("\t> s Datenreihe in der originalen Reihenfolge anzeigen lassen\n");
- printf("\t> o Dateienreihe in aufsteigend sortierter Reihenfolge anzeigen lassen\n");
- printf("\t> d Alle Werte in der Dateinreihe loeschen\n");
- printf("\t> m Anzeigen des arithemtischen Mittelwertes\n");
- printf("\t> c Mit diesem Befehl koennen sie den Screen clearen\n");
- printf("\t> sp Anzeigen der Spannweite\n");
- printf("\t> me Anzeigen des Medians\n");
- printf("\t> mo Anzeigen des Modalwertes\n");
- printf("\t> ? Anzeigen der Hilfe\n");
- printf("\t> q Beenden des Programms\n");
- }
- /********************************************************
- Funktionsname: displayIntArr
- =======================================================
- Zweck: Zeigt das Array an
- =======================================================
- Variablen / Felder:
- i: Zählervariable für Schleife
- =======================================================
- Return-Wert: keinen
- *******************************************************
- */
- void displayIntArr(const int *f, size_t n) { //Da das Array nicht beschrieben werden soll, wird es als const behandelt
- int i; //Zählervariable
- putchar('\t'); //Damit der Style, in dem ausgegeben wird, konsistent bleibt, wird ein Tab ausgegeben
- for(i = 0; i < n; i++) { //Zählen bis das Array zu Ende ist
- printf("%d ", f[i]); //Ausgabe der Werte
- }
- }
- /********************************************************
- Funktionsname: werteEinlesen
- =======================================================
- Zweck: Einlesen der Werte und speichern auf das Array
- =======================================================
- Variablen / Felder:
- usereingabe[300]: Dient zum Speichern des
- Strings wenn der User eine Zahl eingibt
- ok:Prüft durch die Anzahl der gespeicherten Werte
- um alles glatt gelaufen ist
- userfertig: Dient zum Überprüfen ob der
- User fertig ist, mit eingeben oder nicht
- Durch eine Switch-Case wird der Wert gesetzt
- userdone: Speichert die Auswahl des Users,
- ober weitermachen möchte oder nicht
- =======================================================
- Return-Wert: keinen
- *******************************************************
- */
- void werteEinlesen(int *f, int *weing) {
- system("cls"); //Clearen ds Bildschirms
- int i; //Zählervariable
- char usereingabe[300]; //Array für die Usereingabe
- int ok; //Prüft ob alles glattgelaufen
- int wert;
- int userfertig = 1;
- char dummy;
- if(weing == 49 ) {
- fehlermeldung(1);
- } else {
- while(userfertig) {
- printf("\n\tWert eingeben > ");
- ok = sscanf(gets(usereingabe), "%d%c", &f[*weing], &dummy);
- if(ok == 2) {
- fehlermeldung(2);
- userfertig = 1;
- i++;
- } else {
- (*weing)++;
- userfertig = 0;
- }
- }
- }
- }
- /********************************************************
- Funktionsname: sortedanzeigen
- =======================================================
- Zweck: Anzeigen des sortierten Feldes
- =======================================================
- Variablen / Felder:
- fcopy[gross]:
- Array, welches eine Kopie vom Original ist
- =======================================================
- Return-Wert: keinen
- *******************************************************
- */
- void sortedanzeigen(const int *f, size_t n) {
- int fcopy[gross];
- copyfeld(f, fcopy, n);
- sortfeld(fcopy, n);
- displayIntArr(fcopy, n);
- }
- /********************************************************
- Funktionsname: copyfeld
- =======================================================
- Zweck: Kopieren des Feldes, da ursprüngliches unangetastet
- sein soll
- =======================================================
- Variablen / Felder:
- i: Zählervariable für Schleife
- =======================================================
- Return-Wert: keinen
- *******************************************************
- */
- void copyfeld(const int *f, int *fcopy, size_t n) {
- int i;
- for(i = 0; i <= n; i++) {
- fcopy[i] = f[i];
- }
- }
- /********************************************************
- Funktionsname: spberechnung
- =======================================================
- Zweck: Berechnen der Spannweite
- =======================================================
- Variablen / Felder:
- i: Zählervariable für Schleife
- min: Kleinster Wert, für Berechnung notwendig
- max: Größter Wert, für Berechnung notwendung
- =======================================================
- Return-Wert: max - min -> Größe der Spannweite
- *******************************************************
- */
- int spberechnung(const int *f, size_t n) {
- int i;
- int min, max = f[0]; //Setzen der Werte auf den ersten Array wert
- for(i = 0; i < n; i++) {
- if(f[i] < min) { //Wenn kleiner, wird neues min gesetzt
- min = f[i]; //Setzen des mins auf neuen Wert
- }
- if(f[i] > max) { //Wenn größer, wird neues max gesetzt
- max = f[i]; //Setzen des max auf neuen Wert
- }
- }
- return max-min; //Zurückgeben der Spannweite
- }
- /********************************************************
- Funktionsname: calcarithm
- =======================================================
- Zweck: Berechnen des arithemtischen Mittels
- =======================================================
- Variablen / Felder:
- summe = die Summe aller addierten Werte
- i: Zählervariable
- =======================================================
- Return-Wert: summe / n -> Die Summe durch n Werte =
- Arithemthisches Mittel
- *******************************************************
- */
- double calcarithm(int *f, size_t n) {
- int summe = 0;
- int i;
- for(i = 0; i < n + 1; i++) {
- summe+=f[i];
- }
- return summe / n;
- }
- /********************************************************
- Funktionsname: median
- =======================================================
- Zweck: Berechnen des Medians
- =======================================================
- Variablen / Felder:
- fcopy[gross]: Kopie von Original-Array
- summe: Falls die Anzahl der Werte gerade ist,
- wird hier die Summe gespeichert
- median: Wert des Medians
- =======================================================
- Return-Wert: median -> Wert des Medians
- *******************************************************
- */
- double median(const int *f, size_t n) {
- int fcopy[gross];
- double summe = 0;
- double median = 0;
- copyfeld(f, fcopy, n);
- sortfeld(fcopy, gross);
- if(n % 2 == 1) {
- median = fcopy[n/2];
- } else {
- summe = fcopy[n / 2] + fcopy[n/2-1];
- median = summe / 2;
- }
- return median;
- }
- int modalwert(const int *f, size_t n, int *modal) {
- int fcopy[gross];
- int counter = 0;
- int countermax = 0;
- int doppelt = 0;
- int i, j;
- copyfeld(f, fcopy, n);
- sortfeld(fcopy, n);
- for(i = 0; i < n; i++) {
- if(fcopy[i] == fcopy[i + 1]) {
- counter++;
- }
- if(counter == countermax)
- {
- doppelt++;
- }
- if(counter > countermax)
- {
- countermax = counter;
- *modal = fcopy[i];
- return 1;
- } else {
- return 0;
- }
- }
- }
- void sortfeld(int *f, size_t n) {
- int i, j, h;
- for(i = 1; i < n; i++) {
- for(j = 0; j < n - i; j++) {
- if(f[j] > f[j + 1]) {
- h = f[j];
- f[j] = f[j + 1];
- f[j + 1] = h;
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement