Zahlensortieren

elmyth

Erfahrenes Mitglied
Guten Tag,

ich frag hier mal für einen Freund der gerade nicht weiterkommt - ich selber habe keinen Plan von C++, deswegen hoffe ich ihr könnt mir/ihm weiterhelfen...

Ich poste den Nopaste von ihm, weil's hier irgendwie alle in einer Zeile gewesen wäre (bei der Vorschaufunktion)

Der Code: http://knopaste.de/index.php?module=hilight&id=105

Die Fehler: http://knopaste.de/index.php?module=show&id=106

Wäre nett wenn Ihr euch dem mal widmen könntet, der Arme war "krank" und konnte nicht zu den Vorlesungen :)

Gruß
 
Hui, das sieht nicht so dolle aus. Es wäre ausgesprochen hilfreich, wenn sich derjenige, der den Code fabriziert hat, einmal etwas genauer mit dem Sprachstandard auseinandersetzen würde. Aber noch bevor das getan wird, sollte man die Fehler und Warnungen, die so ausgegeben werden, auch mal durchlesen, da sie meines Erachtens schon ziemlich aussagekräftig sind -- oder was verstehst Du nicht?!

Ich will mal ein paar Bemerkungen zum Code vornehmen, ohne Anspruch auf Vollständigkeit.
  1. #include <iostream.h> sollte in C++ korrekterweise nur #include <iostream> heißen.
  2. Die main() Funktion hat einen ganzzahligen Rückgabewert. Von daher sollte man auf jeden Fall int main() statt void main() angeben und am Ende der main() Funktion ein return 0; einfügen (dieses dürfte meines Wissens sogar weggelassen werden).
  3. Wenn ihr mit den iostream Objekten hantiert, dann müsst ihr sie im Namensraum qualifizieren. cout und cin liegen in std. Demnach entweder global freischalten #using namespace std; oder jedesmal explizit std::cin bzw. std::cout angeben.
  4. Das Feld zahlen hat keine Größe zur Initialisierung bekommen. Ich würde, wenn ihr mit dynamischen Feldern arbeiten wollt, unter C++ viel eher Vektoren von std::vector<int> nehmen (#include <vector>).
  5. Die Variable counter wird zweimal deklariert und initialisiert -- das ist nicht erlaubt und hier auch völlig unnötig. Warum nicht einfach i und j nehmen?
  6. Die Funktion tausche() ist ja derzeit auch höchst redundant ...

Habe mal einen BubbleSort mit Zeitmessung aus dem Ärmel purzeln lassen. Ich würde hoffen das könnte euch helfen.
Code:
#include <iostream>
#include <vector>
#include <cstdlib>

void bubbleSort(std::vector<int> &);

int main(int argc, char *argv[])
{
        if(argc != 2) {
                std::cerr << "Aufruf: " << argv[0] << " <anzahlElemente>" << std::endl;
                return EXIT_FAILURE;
        }
        const int anzahl = atoi(argv[1]);
        std::vector<int> menge(anzahl);
        clock_t beginn, ende;
        double zeit;

        std::srand(std::time(0));
        for(int i = 0; i < anzahl; ++i)
                menge.at(i) = std::rand() % 100;

        beginn = clock();
        bubbleSort(menge);
        ende = clock();

        zeit = static_cast<float>(ende - beginn) / CLOCKS_PER_SEC;
        std::cout << "vergangene Zeit: " << zeit << " Sekunden" << std::endl;

        return 0;
}
void bubbleSort(std::vector<int> &vec)
{
        for(unsigned int i = vec.size(); i > 0; --i) {
                for(unsigned int j = 1; j < i; ++j) {
                        if(vec.at(j - 1) > vec.at(j))
                                std::swap(vec.at(j - 1), vec.at(j));
                }
        }
}
Ansonsten ganz dringend(!) ein gutes Buch zulegen und standardkonforme Programmierung ernst nehmen. Beim Kompilierung alle Warnungsschalter einschalten, damit man sich von Beginn an an saubere Programmierpraxis gewöhnt (beim gcc mit -W -Wall -pedantic)

Martin
 
rohrbold hat gesagt.:
Die Variable counter wird zweimal deklariert und initialisiert -- das ist nicht erlaubt und hier auch völlig unnötig.

Erlaubt war das in diesem Fall schon, da die erste Deklaration nur in der ersten Schleife gültig ist und die zweite nur in der zweiten.
 
Hi.
rohrbold hat gesagt.:
Tatsache, mea culpa. Bleibt wohl die Frage, wie es zu der Meldung kommen kann.
Zu der Meldung kommt es wenn man versucht C++ Code mit einem nicht-konformen Compiler (z.B. VC++ 6) zu kompilieren.

Gerade die älteren VC++ Versionen sind ja so konform zum C++ Standard wie ein Perl Interpreter. :)

Gruß
 
Zurück