Herzlich Willkommen, lieber Gast!
  Sie befinden sich hier:

  Forum » C / C++ (ANSI-Standard) » Maxsort (Funktioniert erst wenns viele Zahlen sind)

Forum | Hilfe | Team | Links | Impressum | > Suche < | Mitglieder | Registrieren | Einloggen
  Quicklinks: MSDN-Online || STL || clib Reference Grundlagen || Literatur || E-Books || Zubehör || > F.A.Q. < || Downloads   

Autor Thread - Seiten: [ 1 ] > 2 <
010
18.04.2004, 22:18 Uhr
Sloth



Da hätte ich jetzt mal ne grundlegende Frage, ist das irgendwie C-typischer die "{" direkt hinter den Funktionskopf zusetzen? Wenn man mal so im Internet guckt, sind die meinstens so aufagebaut. Hat das n tieferen sinn? Oder ist es einfach nur typischer das so zu schreiben? Die Sache mit dem int ist klar, aber das mit der "{" würd ich echt mal gerne wissen!
Aber jetzt noch mal zum Code, hat keiner n Idee wieso der 1 oder zwei dreher drinn hat wenn ich Z.B. 14 Zahlen sotieren lasse?
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
011
18.04.2004, 22:31 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


was steht denn in deinem zahlen[5000]; drin?

lass doch mal den ganzen code sehen sonst ist das mehr ein rätselraten warum der nicht geht...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
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.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
013
18.04.2004, 23:02 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


also jetzt will ich nicht nochmal von jemanden hier aus diesem forum hören ich würde code schreiben bei dem man nicht oder nur schwer durchsteigen kann...
also noch schwerer und fehleranfälliger als du das implementiert hast kann mans kaum machen... wobei das mit den menüs ja recht hübsch gemacht ist...


so ohne das jetzt zu testen würd ich mal folgendes sagen

C++:
int maxsort(int zahlen[])
{
    int lang =0, max = 0, z=0,n=1;
    lang = zahlen[5000];    

    for (; n< lang ; n++)  //hier mussst du nur bis n<lang-1 laufen....
    {
        for (; z < lang - n; z++) //hier musst du bei jedem schleifendurchlauf max auf 0 setzen, z startet immer bei 1 und nicht bei 0
            if (zahlen[z] > zahlen[max]) max  = z;
            tausche(zahlen, max, lang -n);  //hier musst du mit lang-n-1 tauschen
            z=0;
    }
    zahlen[5001] = 3;
    return 0;
}


--
...fleißig wie zwei Weißbrote

Dieser Post wurde am 18.04.2004 um 23:09 Uhr von Windalf editiert.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
014
19.04.2004, 15:33 Uhr
Sloth



Sry, mich hatten halt die Adressen und Pointer gerstern, nachdem ich da schon so lang dran gedacht hatte etwas durcheinander gebracht , aber jetzt weiß ich auch dank deiner kommentare wieso es nicht klappte und wie es mußte. Aber wieso ist die Funktion Fehleranfällig, oder bezog sich das auf das gesammte Programm?


Danke für eure Hilfe!!!
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
015
19.04.2004, 16:47 Uhr
Windalf
Der wo fast so viele Posts wie FloSoft...
(Operator)


das mit dem fehleranfälig bezog sich auf dein komplettes programm...
irgendwie hätte man es komplizierter kaum schreiben können(ist natürlich geschmacksache)... aber normalerweise hast du auf solche fragen in dem forum ziemlich schnell ne antwort aber das ganze war ja sowas von unübersichtlich das anscheinend keiner bock hatte sofort zu antworten...
--
...fleißig wie zwei Weißbrote
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
016
19.04.2004, 18:16 Uhr
Sloth



Naja, ich hab ja auch grad erst mit C angefangen. Also nochmal thx für eure hilfe. Übrigents fand ich das es verdammt schnell ging bis ich ne Antwort hatte.
 
Profil || Private Message || Suche Download || Zitatantwort || Editieren || Löschen || IP
Seiten: [ 1 ] > 2 <     [ C / C++ (ANSI-Standard) ]  


ThWBoard 2.73 FloSoft-Edition
© by Paul Baecher & Felix Gonschorek (www.thwboard.de)

Anpassungen des Forums
© by Flo-Soft (www.flo-soft.de)

Sie sind Besucher: