indexposition des maximalen Elements (eines Vektors)
-
ich möchte die indexpostion imax des maximalen Elements eines Vektors, welcher zuerst eingegeben werden kann, auslesen.
irgendwie hänge ich fest. soll ich dass irgendwie mit einer for-schleife basteln?
wäre sehr dankbar für tipps
#include<iostream>
#include<cmath>using namespace std;
int main()
{int i,N,y;
double x, imax;cout << "Wie lange soll der Vektor werden?";
cin >> N;
cout << "Bitte Werte eingeben und jeweils mit ENTER bestaetigen: " <<endl;const int maxn= 20;
int vec[maxn];for (i=0; i<N; i++)
{
cout<< "Geben Sie ihre " <<i+1<< ".te-Zahl ein"<<endl;
cin>> vec[i];
}
cout<< "Ihr Vektor ist: "<<endl;for (i=0; i<N; i++)
{
cout<< vec[i] << " ";
cout<< endl;
}// indexposition des betragsgroessten element suchen
imax= abs(vec[0]);
for (i=1; i>N; i++)
{
if (abs(vec[i]) > imax)
imax= abs (vec[i]);
}cout << endl;
cout << "Das betragsgroesste Element steht an " << i <<". Stelle des Vektors."<< endl;system("pause");
return 0;}
-
mach mal i<N in der 2ten schleife
es gibt auch std::vector...
-
edit: 3ten schleife
-
wow! tatsächlich war da ein fehler. aber gelöst habe ich das problem mit dem grössten element nicht... zugegeben meine lösung ist nicht sehr elegant.zuviele schlaufen.
wie finde ich die indexposition des grössten elements?
-
Hab mir deinen Code nicht angesehen (ohne Code tags werden das wohl nur sehr wenige tun). Aber hier mal ein kleines Beispiel:
#include <iostream> #include <vector> #include <algorithm> #include <cstdlib> #include <ctime> int main() { std::vector <int> values(20); // generate random numbers std::srand( static_cast <unsigned int> (std::time(0)) ); std::generate(values.begin(), values.end(), std::rand); // get iterator of the maximum std::vector <int> ::iterator max_element = std::max_element(values.begin(), values.end()); // calculate index std::size_t index_of_max = std::distance(values.begin(), max_element); std::cout << "Max element " << *max_element << " at position " << index_of_max << "." << std::endl; return 0; }Gruß
Don06
-
Vielen Dank für all die Tipps. aber ist es denn nicht möglich mit einer schleife eine indexposition zu finden?
#include<iostream> #include<cmath> using namespace std; int main() { int i,N,y; double x, imax; cout << "Wie lange soll der Vektor werden?"; cin >> N; cout << "Bitte Werte eingeben und jeweils mit ENTER bestaetigen: " <<endl; const int maxn= 20; int vec[maxn]; for (i=0; i<N; i++) { cout<< "Geben Sie ihre " <<i+1<< ".te-Zahl ein"<<endl; cin>> vec[i]; } cout<< "Ihr Vektor ist: "<<endl; for (i=0; i<N; i++) { cout<< vec[i] << " "; cout<< endl; } // 2Norm des Vektors double sum; for (y=0;y<N-1; y++) { sum +=(vec[y]*vec[y]); } x= sqrt(sum); cout<< "Die 2. Norm dieses Vektors betraegt: " << x << endl; // Indexposition des grössten Elements imax= abs(vec[0]); for (i=1; i<N; i++) { if (abs(vec[i]) > imax) imax= abs (vec[i]); } cout << endl; cout << "Das betragsgroesste Element steht an " << i <<". Stelle des Vektors."<< endl; system("pause"); return 0; }wäre super wenn sich mal jemand den letzten teil (betragsgrösstes element) anschauen könnte...
mit freundlichen grüssen
-
imax=abs(vec[0]); int maxindex=0; for (i=1; i<N; i++) { if (abs(vec[i]) > imax) { imax=abs(vec[i]); maxindex=i; } } ...
-
ich sag nur http://www.sgi.com/tech/stl/max_element.html