W
Svolf schrieb:
Und dann möchte ich ja den größten wert löschen,..das er im feld eine 0 hat,..und dann soll er den 2 größten wert suchen und so weiter aber ich bekomme das nicht hin,.
alter[king] = 0;
und eine weitere schleife dann laufen zulassen ich hoffe auf Hilfe,..
das es dann so aussieht array[2] < array[0] < array[1];
array[2] = 3
array[0] = 5
array[1] = 8
Hallo Svolf,
zunächst musst Du Dir in der Variablen 'king' den Index und nicht die Anzahl der Versuche merken, die Du benötigst, um das Maximum zu finden.
Dann kannst Du das ganze in eine weitere Schleife fassen, die jeweils das Maximum und den zugehörigen Index ausgibt. Also:
#include <iostream>
int main() // wenn argc & argv nicht gebraucht werden, so lasse sie weg
{
using namespace std;
int alter[] = {5,8,3}; // lokale Variablen sind globalen vorzuziehen
for( int durchlauf=0; durchlauf<sizeof(alter)/sizeof(*alter); ++durchlauf )
{
int king;
int big = -9999; // mit kleinem Wert initialisieren; => std::numeric_limits< int >::min()
for( int x=0; x<sizeof(alter)/sizeof(*alter); ++x ) // besser: x < sizeof(alter)/sizeof(*alter) statt x<3
{
if(alter[x] > big)
{
big = alter[x];
king = x; // Index des Maximums in alter[] merken
}
}
cout << "\nalter[" << king << "] = " << alter[king] << endl; // ausgeben
alter[king] = 0; // Maximum 'abschalten'
}
cin.get(); // besser als system("PAUSE"); siehe FAQ
return 0;
}
und für den Interessierten noch mal die Alternative mit STl-Hilfe:
#include <iostream>
#include <algorithm> // max_element
int main() // wenn argc & argv nicht gebraucht werden, so lasse sie weg
{
using namespace std;
int alter[] = {5,8,3}; // lokale Variablen sind globalen vorzuziehen
for( int durchlauf=0; durchlauf<sizeof(alter)/sizeof(*alter); ++durchlauf )
{
int* iMax = max_element( alter, alter + sizeof(alter)/sizeof(*alter) );
cout << "\nalter[" << (iMax-alter) << "] = " << *iMax << endl; // ausgeben
*iMax = 0; // Maximum 'abschalten'
}
cin.get(); // besser als system("PAUSE"); siehe FAQ
return 0;
}
Gruß
Werner