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 Laufzeitverhaltencout <<"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 Testphasefor(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ängecin >> 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 Testphasefor(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
