Sortieren !!
-
Hmm davon hab ich leider noch weniger ahnung als von vectoren

-
--Neo-- schrieb:
Hmm davon hab ich leider noch weniger ahnung als von vectoren

.. musst Du ja nicht. Die Aussage war lediglich: wenn 200 Flugzeuge, dann geht's so nicht.
Kommst Du ansonsten mit dem zurecht, was hier gepostet wurde?
-
Hi sorry aber ich bin ein ziemlicher Newbie in Sachen C++!
Ich werde mich morgen mal dransetzen und versuchen was damit auf die Beine zu stellen!
Mehr als 100 Flugzeuge sollen damit auch nicht optimiert werden!Aber danke für die Mühe erstmal!
Bei Fragen meld ich mich nochmal!gruß
Neo
-
Hi,
also ich wollte jetzt mal das Programm zusammenschreiben, aber ich weiß noch net so genau wie ich das arry Flieger in die reihe übergebe!
der zeigt mir immer ne fehlermeldung an!Kann mir da einer von euch pros helfen ??
Gruß
Neo
-
Kurze Antwort: Nein.
Lange Antwort: Wenn Du uns nen Stück Code und den Wortlaut der Fehlermeldung nicht gibst brauchen wir es eigentlich garnicht versuchen (wie oft eigentlich noch?)
-
Das hab ich hier stehen:
// Optimierung Landereihenfolge
#include<iostream.h>
#include<math.h>
#include<ctype.h>
#include<conio.h>
#include<iomanip.h>
#include<stdlib.h>
#include <vector>
#include <algorithm>
#include <functional>
#include <numeric>
#include <iterator>
#include <iostream>int main(void)
{
const max = 10;
int flieger [max];
int i, Summe1;
randomize();
vector<int> reihe; //gefüllt mit Werten
vector<int> optimum; //hierher kopieren wir die optimale Reihecout << "Es wird jetzt eine zufällige Reihenfolge von Maschinen generiert : "
<< endl;
cout << endl;
cout << "1 = Light" << endl;
cout << "2 = Medium" << endl;
cout << "3 = Heavy" << endl;
cout << endl;
cout << endl;for (i=0; i < max; i++)
{
flieger [i] = random (3)+1;
}cout << "Reihenfolge: " << endl;
for (i=0; i < max; i++)
{
cout << flieger [i];
}Summe1 = 0;
for (i=0; i < max-1; i++)
{if (flieger [i] == 1 && flieger [i+1] == 2)
{
Summe1 = Summe1 + 82;
}
else if (flieger [i] == 2 && flieger [i+1] == 1)
{
Summe1 = Summe1 + 146;
}
else if (flieger [i] == 3 && flieger [i+1] == 1)
{
Summe1 = Summe1 + 167;
}
else if (flieger [i] == 1 && flieger [i+1] == 3)
{
Summe1 = Summe1 + 78;
}
else if (flieger [i] == 3 && flieger [i+1] == 2)
{
Summe1 = Summe1 + 138;
}
else if (flieger [i] == 2 && flieger [i+1] == 3)
{
Summe1 = Summe1 + 78;
}
else if (flieger [i] == 1 && flieger [i+1] == 1)
{
Summe1 = Summe1 + 82;
}
else if (flieger [i] == 2 && flieger [i+1] == 2)
{
Summe1 = Summe1 + 82;
}
else if (flieger [i] == 3 && flieger [i+1] == 3)
{
Summe1 = Summe1 + 167;
}}
cout << endl;
cout << endl;
cout << "Die Summe1 ist: " << Summe1 << "sec" <<endl;
cout << "Die Summe1 ist: " << Summe1/60 << "min" <<endl;Hier muß doch auch noch das Feld flieger [max] in "reihe" kopiert werden oder ? Und wie geht das ?
int opt_sum=numeric_limits<int>::max();
sort(reihe.begin(),reihe.end()); //wir beginnen mit geordneter Reihenfolgedo
{
int sum=Summe1; //in der Funktion "summe" darfst du dich austoben und den "Wert" der aktuellen Reihe bestimmen
if(sum<opt_sum)
{
opt_sum=sum;
optimum=reihe;
}
}
while(next_permutation(reihe.begin(),reihe.end());
//next_permutation() ordnet die Elemente zur nächstgrößeren Permutation um und gibt false zurück, wenn es "überläuft"
//(deshalb muß reihe auch vor dem Start sortiert werden)getch();
return 0;
}Folgende Fehlermeldung:
[C++Fehler] Sort_Funkt.cpp(115): Do-while statement missing ).Und die Ausgabe fehlt halt noch! Das Problem is halt, daß ich etwas unter Zeitdruck stehe mit noch einer anderen Hausarbeit!
Ich entschuldige deshalb mein Verhalten in Sachen Angaben, aber mir fehlt halt einfach das Hintergrundwissen für C++!Gruß Neo
-
Naja "Do-While-Statement missing )" sollte man auch mit geringen Englischkenntnissen schaffen -> Im do-while-Statement fehlt eine schliessende Klammer (sieht man wenn man genau hinschaut auch).
Das Feld flieger in das Feld reihe kannst Du mit copy überführen:
copy(flieger, flieger + max, back_inserter(reihe));Dann weiss ich nicht was opt_sum ist, glaube aber nicht dass Du darin den größten möglichen Integer-Wert den Dein System verarbeiten kann haben möchtest, oder? Denn das liefert numeric_limits<int>::max()
EDIT:
Und bitte, bitte stell Deinen Code in [ cpp] .... [ /cpp] Tags (ohne die Leerstellen nach der öffnenden Klammer)
-
// Optimierung Landereihenfolge
#include<iostream.h>
#include<math.h>
#include<ctype.h>
#include<conio.h>
#include<iomanip.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <numeric>
#include <iterator>int GSumme (int i);
{
for (int i=0; i <= 9; i++)
{
if (reihe [i] == 1 && reihe [i+1] == 2)
{
Summe = Summe + 82;
}
else if (reihe [i] == 2 && reihe [i+1] == 1)
{
Summe = Summe + 146;
}
else if (reihe [i] == 3 && reihe [i+1] == 1)
{
Summe = Summe + 167;
}
else if (reihe [i] == 1 && reihe [i+1] == 3)
{
Summe = Summe + 78;
}
else if (reihe [i] == 3 && reihe [i+1] == 2)
{
Summe = Summe + 138;
}
else if (reihe [i] == 2 && reihe [i+1] == 3)
{
Summe = Summe + 78;
}
else if (reihe [i] == 1 && reihe [i+1] == 1)
{
Summe = Summe + 82;
}
else if (reihe [i] == 2 && reihe [i+1] == 2)
{
Summe = Summe + 82;
}
else if (reihe [i] == 3 && reihe [i+1] == 3)
{
Summe = Summe + 167;
}
}
return 0;
}int main()
{
using namespace std;
vector<int> reihe(10);
vector<int> maxV;for (int i=0; i <= 9; i++)
{
reihe [i] =random (3)+1;
}cout <<reihe[0]<<" "<<reihe [1]<<" "<<reihe[2]<<" "<< reihe[3]<<" "<<reihe[4]<<" "<<reihe[5]<<" "<<reihe[6]<<" "<<reihe[7]<<" "<<reihe[8]<<" "<<reihe[9]<<" "<<endl;
int wert = 0;
bool first = true;
do
{
int w = inner_product( reihe.begin(), reihe.end()-1, reihe.begin() + 1, 0, std::plus< int >(),&GSumme );
if( first || w < wert )
{
maxV = reihe;
wert = w;
}
first = false;
}while( next_permutation( reihe.begin(), reihe.end() ) );
cout << "Reihenfolge mit minimaler Summe: ";
std::copy( maxV.begin(), maxV.end(), std::ostream_iterator< int >(reihe) );
cout << "= " << wert << endl;getch();
return 0;
}Soweit bin ich jetzt gekommen, allerdings gibt es wohl noch ein Problem mit der Funktion!
Fehlermeldung:
[C++Fehler] Variante_1.cpp(15): Declaration terminated incorrectly.Wäre schön, wenn nochmal einer von euch drübergucken könnte!
Danke
Neo
-
Also soweit bin ich jetzt!
Hab aber noch einen Fehler mit der Ausgabe bzw mit den Klammern und finde den Fehler einfach nicht. Wäre schön, wenn mir da einer helfen könnte!// Optimierung Landereihenfolge
#include<iostream.h> #include<math.h> #include<ctype.h> #include<conio.h> #include<iomanip.h> #include<stdlib.h> int main(void) { const max = 10; int flieger [max]; int Bestfeld [max]; int n, m, k; int j1, j2, j3, j4, j5, j6, j7, j8, j9, j10; int i, Summe, Bestzeit; cout << "Es wird jetzt eine Reihenfolge von Maschinen generiert und berechnet: " << endl; cout << endl; cout << "1 = Light" << endl; cout << "2 = Medium" << endl; cout << "3 = Heavy" << endl; cout << endl; cout << endl; n=0; m=0; k=0; for (j1=1; j1 <=3; j1++) { flieger [1] = j1; if (j1=1) n++; if (j1=2) m++; if (j1=3) k++; for (j2=1; j2 <=3; j2++) { flieger [2] = j2; if (j2=1) n++; if (j2=2) m++; if (j3=3) k++; for (j3=1; j3 <=3; j3++) { flieger [3] = j3; if (j3=1) n++; if (j3=2) m++; if (j3=3) k++; for (j4=1; j4 <=3; j4++) { flieger [4] = j4; if (j4=1) n++; if (j4=2) m++; if (j4=3) k++; for (j5=1; j5 <=3; j5++) { flieger [5] = j5; if (j5=1) n++; if (j5=2) m++; if (j5=3) k++; for (j6=1; j6 <=3; j6++) { flieger [6] = j6; if (j6=1) n++; if (j6=2) m++; if (j6=3) k++; for (j7=1; j7 <=3; j7++) { flieger [7] = j7; if (j7=1) n++; if (j7=2) m++; if (j7=3) k++; for (j8=1; j8 <=3; j8++) { flieger [8] = j8; if (j8=1) n++; if (j8=2) m++; if (j8=3) k++; for (j9=1; j9 <=3; j9++) { flieger [9] = j9; if (j9=1) n++; if (j9=2) m++; if (j9=3) k++; for (j10=1; j10 <=3; j10++) { flieger [10] = j10; if (j10=1) n++; if (j10=2) m++; if (j10=3) k++; if (((n==3) && (m==4)) && (k==3)) { { cout << "Test" << endl; Summe = 0; for (i=0; i <=9; i++) { if (flieger [i] == 1 && flieger [i+1] == 2) { Summe = Summe + 82; } else if (flieger [i] == 2 && flieger [i+1] == 1) { Summe = Summe + 146; } else if (flieger [i] == 3 && flieger [i+1] == 1) { Summe = Summe + 167; } else if (flieger [i] == 1 && flieger [i+1] == 3) { Summe = Summe + 78; } else if (flieger [i] == 3 && flieger [i+1] == 2) { Summe = Summe + 138; } else if (flieger [i] == 2 && flieger [i+1] == 3) { Summe = Summe + 78; } else if (flieger [i] == 1 && flieger [i+1] == 1) { Summe = Summe + 82; } else if (flieger [i] == 2 && flieger [i+1] == 2) { Summe = Summe + 82; } else if (flieger [i] == 3 && flieger [i+1] == 3) { Summe = Summe + 167; } } if (Summe < Bestzeit) { Bestzeit=Summe; Bestfeld [max] =flieger [max]; cout << Bestzeit << endl; } } } } } } } } } } } } cout << "Reihenfolge: " << endl; cout << n << endl; cout << m << endl; cout << k << endl; for (i=1; i <max+1; i++) { cout << Bestfeld [i]; } cout << endl; cout << endl; cout << "Die Summe ist: " << Bestzeit << "sec" <<endl; cout << n; cout << "Die Summe ist: " << Bestzeit/60 << "min" <<endl; getch(); } }
-
Du hast schon 21 Beiträge und weißt immer noch nicht, dass man Codetags verwenden sollte?

So funktioniert das Syntaxcoloring