012
18.04.2004, 22:46 Uhr
Sloth
|
Also gut dann ist hier mal die ganze ***** im vollen Ausmaß.
| C++: |
// Sort.cpp : Definiert den Einsprungpunkt für die Konsolenanwendung. //
#include "stdafx.h" #include <stdlib.h> #include <conio.h> #include <string.h> #include <conioex.h> #include <conioex.c> #include <time.h> #include <iostream.h>
char menu (char, int *); char umenu1 (char, int *); char umenu2 (char, int *);
int arrayeingabe(int *); int ausgabe (int *); int bubblesort (int *); int martinssort (int *); int maxsort (int *); int arrayrndmw (int *); int arrayrndow (int *); int tausche (int *, int, int);
char main(int argc, char* argv[]) { SetConsoleTitle("_.-=Zahlen sortieren=-._");
long sek; time(&sek); srand(sek); char menupunkt = 0; int zahlen[5002]; // Da auf zahlen[5000] die länge u. zahlen[5001] der sotierstatus gespeichert wird
zahlen[5000] =0; zahlen[5001] =0; while(2>1) { menu(menupunkt, zahlen); } return 0; }
char menu(char menupunkt, int zahlen[]) { int umenupunkt1 = 0; int umenupunkt2 = 0;
clrscr(); printf("\t Menu\n"); printf("Es wurden %i Zahlen eingegeben.", zahlen[5000]); if(zahlen[5000] > 0 && zahlen[5001] > 0) { printf("\nDie Zahlen sind bereits mit "); if(zahlen[5001]==1) printf("Bubblesort"); if(zahlen[5001]==2) printf("Martins sort"); if(zahlen[5001]==3) printf("Maxsort"); printf(" sotiert worden."); } if(zahlen[5000] > 0 && zahlen[5001] == 0)
printf("\nDie zahlen sind noch nicht sotiert"); printf("\n\n1. Array fuellen\n2. Sortieren\n3. Ausgabe\n4. Exit\n\nAuswahl: "); scanf("%i", &menupunkt); switch(menupunkt) { case 1: { umenupunkt1 = umenu1(umenupunkt1, zahlen); break; } case 2: { if(zahlen[5000] >0) umenu2(umenupunkt2, zahlen); else { clrscr(); printf("\n\t\tAchtung\n\n\nSie haben das Array noch nicht mit Zahlen gefuellt\n\n\n\nWeiter gehts per Tastendruck!!!"); getch(); } break; } case 3: { ausgabe(zahlen); umenupunkt1 = 0; break; } case 4: { exit(0); break; } default: clrscr(); printf("\tError\n\n\n"); printf("Den Menueunkt \"%i\" steht nicht zu Auswahl!\n\n", menupunkt); printf("Weiter geht's per Tastendruck!"); getch(); } return 0; }
char umenu1(char umenupunkt1, int zahlen[]) { int menupunkt = 0; clrscr(); printf("Array fuellen:\n\n1. Per Eingabe\n2. Per Zufallszahlen (mit Wiederholungen)\n3. Per Zufallszahlen (ohne Wiederholungen)\n4. Zurueck\n\nAuswahl: "); scanf("%i", &umenupunkt1); switch(umenupunkt1) { case 1: { arrayeingabe(zahlen); break; } case 2: { arrayrndmw(zahlen); break; } case 3: { arrayrndow(zahlen); break; } case 4: { menu(menupunkt, zahlen); break; } } return 0; }
char umenu2(char umenupunkt2, int zahlen[]) { int menupunkt =0;
clrscr(); printf("Sortierverfahren:\n1. Bubblesort\n2. Martins sort\n3. Maxsort\n4. Zurueck\n\nAuswahl: "); scanf("%i", &umenupunkt2); switch(umenupunkt2) { case 1: { bubblesort(zahlen); break; } case 2: { martinssort(zahlen); break; } case 3: { maxsort(zahlen); break; } case 4: { menu(menupunkt, zahlen); break; } } return 0; }
int arrayeingabe(int zahlen[]) { int n = 0; int lang;
clrscr(); printf("\n\tEingabe der Zahlen\n\n\nWieviele zahlen moechten sie eingeben? "); scanf("%i", &lang);
while(lang > 5000) { clrscr(); printf("\nMaximal 5000 Werte!\nWieviele zahlen moechten sie eingeben?"); scanf("%i", &lang); } for(n; n<lang; n++) { printf("Zahl[%i]: ",n); scanf("%i", &zahlen[n]); } zahlen[5000] = lang; zahlen[5001] = 0;
return 0; } int arrayrndmw(int zahlen[]) { int lang=0, i=0; clrscr(); printf("\nWieviele Zufallszahlen sollen erzeugt werden? "); scanf("%i", &lang); while(lang > 5000) { clrscr(); printf("\nMaximal 5000 Werte!\nWieviele zahlen moechten sie eingeben? "); scanf("%i", &lang); } srand( (unsigned)time(NULL) ); for (i=0;i<lang;i++) zahlen[i]=rand(); zahlen[5000] = lang; zahlen[5001] = 0; return 0; }
int arrayrndow(int zahlen[]) { int lang=0, i=0,h=1; unsigned int d; clrscr(); printf("Wieviele Zufallszahlen sollen erzeugt werden? "); scanf("%i", &lang); while(lang >= 5001) { clrscr(); printf("Maximal 5000 Werte!\nWieviele zahlen moechten sie eingeben? "); scanf("%i", &lang); } zahlen[5000] = lang; srand( (unsigned)time(NULL) ); for (i=0;i<lang;i++) zahlen[i] =i;
for (h=1;h<lang;h++) { d=rand()%lang; d= abs(d); tausche(zahlen,d,h); } zahlen[5000] = lang; zahlen[5001] = 0; return 0; }
int ausgabe(int zahlen[]) { int n = 0; clrscr(); printf("\tAusgabe\n\n\n"); if(zahlen[5000]>0) for(n;n < zahlen[5000];n++) printf("Zahl[%i]: %i\n",n,zahlen[n]); else printf("Sie haben noch keine Werte eingegeben!\n\n"); printf("\nWeiter gehts per Tastendruck!"); getch(); return 0; } int bubblesort(int zahlen[]) { int n =0 ,z =0, lang=0; ; lang = zahlen[5000];
for(n;n < lang;n++) for(z = 0; z < lang-1; z++) if(zahlen[z] > zahlen[z+1]) tausche(zahlen, z , z+1); zahlen[5001] = 1; return 0; } int martinssort(int zahlen[]) { int n=0,z=0, lang=0; lang= zahlen[5000];
for(n=0;n<lang;n++) for(z=0;z<lang;z++) if(zahlen[n]<zahlen[z]) tausche(zahlen, z, n); z=0; zahlen[5001] = 2; return 0; } int maxsort(int zahlen[]) { int lang =0, max = 0, z=0,n=1; lang = zahlen[5000];
for (; n< lang ; n++) { for (; z < lang - n; z++) if (zahlen[z] > zahlen[max]) max = z; tausche(zahlen, max, lang -n); z=0; } zahlen[5001] = 3; return 0; }
int tausche(int zahlen[], int a, int b) { int tausch = zahlen[a]; zahlen[a] = zahlen[b]; zahlen[b] = tausch; return 0; }
|
Ist sicherlich nicht die schönste Art, aber ich bin froh das ich es so weit hab. Beim nächsten Programm werd ich dann auch mal versuchen keine Mischung aus c und c++ zu veranstallten, das wurd mir heure nämlich schon gesagt, dass ich das gemacht hab. Naja beim nächsten mal wird alles besser. Ich hoffe das ihr das Problem verstanden habt, ich kann das nicht so gut erklären, Maxsort funktioniert halt erst fehlerfrei wenn es viele Zahlen sind. Dieser Post wurde am 18.04.2004 um 22:52 Uhr von Pablo editiert. |