Die fehlenden Verbindungen der Variablen mit Algorithmus?



  • Erbitte um schnelle Hilfe!

    Dies ist ein c++ Programm über den Algorithmus Shellsort. Der funktioniert an sich, jedoch fehlt die Verknüpfung von den Zahlen, die über Datei eingelesen werden. Sie müssen in das Feld geschrieben werden, um sortiert werden zu können.
    Wie bekomme ich das hin? Es reichen auch erstmal die ersten Zehn zahlen, die dann von der DAtei aus sortiert werden. Wird beim Menü oben das Programm bei drücken von 3(beenden) auch wirklich beendet?
    Kann es jemand vervollstänndigen?
    Ich bin so unglücklich. Morgen muss die Dokumentation geschrieben werden...[cpp]

    #include <iostream.h>
    #include <iomanip.h>
    #include <fstream.h>
    #include <string.h>

    void manuellezahleneingabe();
    void dateilesen();

    int main(){

    char antw;

    do
    {(cin.clear();
    cout<<"\n";
    cout<<"SHELLSORT SORTIERALGORITHMUS";
    cout<<"\n\n Bitte Auswählen:\n";
    cout<<"Manuelle Zahleneingabe (1)\n";
    cout<<"Lesen einer existierenden Datei (2)\n";
    cout<<"Programm Beenden (3)\n";

    switch (antw=getch()) //Menü
    {case '1': void manuellezahleneingabe; break;
    case '2': void dateilesen; break;
    case '3': break; //Ende Programm
    default: cout<<"falsche Auswahl\n";break;
    }
    while (antw!='3')
    cout<<"\n";
    getch();
    for (antw='3')
    exit(3);
    }

    }
    // Ende Menü

    void manuellezahleneingabe()
    {
    float *arrZahlen, t;
    bool weiter;
    int j, z=0, iStart, i, iDist, iNumbers ; //Zählvariable z für Auswertung Laufzeitverhalten

    cout <<"SHELLSORT SORTIERALGORITHMUS";

    cout << "\n\nBitte Anzahl der Zahlen eingeben: ";
    cin >> iNumbers;

    arrZahlen = new float[iNumbers]; // Dynamisches Array anlegen

    for(int i=0;i<iNumbers;i++)
    {
    cout << "\nBitte " << (i+1) << ". Zahl eingeben: ";
    cin >> arrZahlen[i];
    }
    cout << "\nBitte Start-Inkrement-Wert eingeben: ";
    cin >> iStart;

    do{
    cout << "\nBitte Inkrement-Distanz eingeben: ";
    cin >> iDist;
    }
    while((iStart-1)%iDist!=0); // Damit bei iStart-x*iDist mind einmal 1 rauskommt

    // Start ShellSort
    for(int h=iStart;h>0;h=h-iDist) // Schrittweiten
    {
    //cout << "\n\n\n h: " << h;

    for(i=h; i<iNumbers; i++)
    {
    j = i;
    t = arrZahlen[i]; //
    weiter = true;

    /*
    cout << "\nt: " << t << " i: " << i << " j: " << j; //Zwischenauswertung für Testphase

    for(int x=0;x<iNumbers;x++)
    {
    cout << "\n" << arrZahlen[x];
    }
    */

    while(weiter && (arrZahlen[j-h]>t)) // Vertauschung, wenn Vorgängerzahlen größer als Nachfolger
    {
    arrZahlen[j] = arrZahlen[j-h];
    j -= h;
    weiter = (j>=h);
    z++;
    }
    arrZahlen[j] = t; // Pivotelement an neuen Platz (kleineren Platz) schreiben

    /* //Zwischenauswertung für Testphase
    cout << "\n";

    for(int x=0;x<iNumbers;x++)
    {
    cout << "\n" << arrZahlen[x];
    }

    cout << "\n\n\n";
    */
    }
    }

    cout << "\nAusgabe: ";
    for(i=0;i<iNumbers;i++)
    {
    cout << "\n" << arrZahlen[i]; //Ausgabe der sortierten Zahlen

    }
    cout <<"\nNotwendige Sortierschritte: " <<z; //Auswertung der benötigten Sortiervorgänge

    cin >> i;

    //speichern????
    }

    void dateilesen()
    float *arrZahlen, t;
    bool weiter;
    int j, z=0, iStart, i, iDist, iNumbers ; //Zählvariable z für Auswertung Laufzeitverhalten
    using namespace std;

    cout <<"SHELLSORT SORTIERALGORITHMUS";
    {
    ifstream datei( "zahlendatei.txt", ios::in );
    string speicher;
    while (datei;
    {
    //getline( "zahlendatei", speicher );

    cout << speicher;}

    cin >> speicher;

    arrZahlen = new float[iNumbers]; // Dynamisches Array anlegen

    for(int i=0;i<iNumbers;i++)

    {

    cout << "\nBitte Start-Inkrement-Wert eingeben: ";
    cin >> iStart;

    do{
    cout << "\nBitte Inkrement-Distanz eingeben: ";
    cin >> iDist;
    }
    while((iStart-1)%iDist!=0); // Damit bei iStart-x*iDist mind einmal 1 rauskommt

    // Start ShellSort
    for(int h=iStart;h>0;h=h-iDist) // Schrittweiten
    {
    //cout << "\n\n\n h: " << h;

    for(i=h; i<iNumbers; i++)
    {
    j = i;
    t = arrZahlen[i]; //
    weiter = true;

    /*
    cout << "\nt: " << t << " i: " << i << " j: " << j; //Zwischenauswertung für Testphase

    for(int x=0;x<iNumbers;x++)
    {
    cout << "\n" << arrZahlen[x];
    }
    */

    while(weiter && (arrZahlen[j-h]>t)) // Vertauschung, wenn Vorgängerzahlen größer als Nachfolger
    {
    arrZahlen[j] = arrZahlen[j-h];
    j -= h;
    weiter = (j>=h);
    z++;
    }
    arrZahlen[j] = t; // Pivotelement an neuen Platz (kleineren Platz) schreiben

    /* //Zwischenauswertung für Testphase
    cout << "\n";

    for(int x=0;x<iNumbers;x++)
    {
    cout << "\n" << arrZahlen[x];
    }

    cout << "\n\n\n";
    */
    }
    }

    cout <<"\nNotwendige Sortierschritte: " <<z; //Auswertung der benötigten Sortiervorgänge

    // Schreiben der sorteirten Datei in sortzahlen.txt

    ofstream datei;
    datei open("sortzahlen.txt", ios::out);
    datei << "schleife für sortierte Zahlen, die irgendwo vorliegen" << endl;
    datei.close();

    //speichern????
    }
    }



  • Wie stehen denn die Zahlen in der Datei drin? Also sind Leerzeichen dahinter, oder eine Zahl pro Zeile, oder wie sonst?



  • #include <iostream>
    #include <fstream>
    #include <iterator>
    #include <algorithm>
    #include <vector>
    
    using namespace std;
    
    template <class T>
    struct out_ {
      void operator()(T v) { cout << v << endl; }
    };
    
    int main()
    {
      /**
       * Werte einlesen
       */
    
      ifstream fs("datei");
      istream_iterator<int> ii(fs), eos;
    
      vector<int> v;
      copy(ii, eos, back_inserter(v));
    
      /**
       * Ausgabe
       */
      for_each(v.begin(), v.end(), out_<int>());
    }
    

    Äquivalent dazu wird mit ofstream und ostream_iterator in die Datei geschrieben. Eine Suchmachine sollte weitere Infos ausspucken 😉


Anmelden zum Antworten