Array



  • Schreiben Sie ein Programm, das 8 ganze Zahlen aus der Konsole einliest.
    Die Zahlen sollen in einem Array gespeichert werden. Nun ermittelt das Programm
    die zweitkleinste und die zweitgrößte Zahl des Arrays und gibt diese
    aus. Bei der Ermittlung der Extrema darf das Array nur einmal durchlaufen
    werden.
    Hinweis: Nutzen Sie eine Schleife zum Einlesen der Zahlen - keine
    8 cin-Zeilen.

    Ich weiß, es ist blöd, wenn ich selber nichts zu bieten habe, aber ich weiß zum einen nicht, wie ich den Hinweis umsetzen soll und dann hab ich noch ein Probelm mit der Aufgabe an sich. Denkanstöße wären mir sehr willkommen :xmas1:



  • Wo hast du den genau Probleme? - Oder was kannt du schon?

    Das sind alles ganz triviale Sachen, die die Grundlagen bereits besprochen haben sollten.

    Zeit einfach mal wie du angefangen hast.. oder auch zusätzlich, was du schon gemacht hast an lauffähigen Programmen.

    @alle anderen:
    Keine Lösung posten. Keine Frage, dass 99% der Leute hier das innerhalb von 1 Minuten könnten, also ihr müsst niemanden etwas beweisen. Das hilft auch niemandem etwas..



  • #include <iostream>
    #include <set>
    #include <vector>
    
    void leser(std::vector<int>::iterator r,std::vector<int>::iterator a)
    {
    	switch(r==a){
    		while(r!=a)
    		{		 
    			default:
    			std::cin>>*r++;
    			continue;
    		}
    		case 1:return;
    	}
    }
    
    int main(int argc, char** argv)
    {
    	std::vector<int> ra(8);
    	leser(ra.begin(), ra.end());
    	std::set<int> ro(ra.begin(), ra.end());
    	std::cout<<*++ro.begin()<<" "<<*++ro.rbegin()<<"\n";
    	return 0;
    }
    

    :xmas2:



  • Ich glaubs ja nicht.. 🙄



  • Ich bin mittlerweile so weit (nicht allzu weit, ich weiß...)

    #include<iostream>
    
    using namespace std;
    
    int main()
    {
    
    	int A[10];
    	int loop;
    
    	for(loop = 0; loop < 10; ++loop)
    	{
    		cout << "Geben Sie eine Wert ein: ";
    		cin >> A[loop];
    	}
    	return 0;
    }
    

    Nun habe ich im Internet Bubblesort gefunden.

    Schaut ja ungefähr so aus:

    for(int i = 0; i < 10; i++) {
      for(int j = 0; j < (10 - 1); j++) {
        if(A[j] > A[j + 1]) {
          int B = A[j];
          A[j] = A[j + 1];
          A[j + 1] = B;
        }
      }
    
    }
    

    Ich weiß jedoch nicht, wie er mir die gesuchten Elemente ausgibt.



  • wo ist bei einem sortierten Array wohl das zweit kleinste?



  • An der 2. Stelle und das 2. größte an der vorletzten.

    Aber bei Arrays musste man doch aufpassen, damit es keinen Fehler bei der Ausgabe gibt (also beim Index). Was muss ich also genau ausgeben?



  • Naja. Die Aufgabe ist ein wenig sinnlos, wenn man den Teil anschaut, wo man das Array nur einmal durchlaufen darf.. 🙄

    Wie auch immer. Du hast jetzt ja ein sortiertes Array. Was ist denn jetzt noch das Problem?

    EDIT:
    Bei dir ist die Anzahl ja fix.
    Das zweite Element ist Anfang+2, also 1.
    Und das letzte ist Anzahl-2, also 6.



  • Kannst du bitte mal schreiben, was ich bei return hinschreiben muss?! Ich hab einen Moment rumprobiert, aber bekomme immer einen Bezeichnerfehler.



  • drakon schrieb:

    Naja. Die Aufgabe ist ein wenig sinnlos, wenn man den Teil anschaut, wo man das Array nur einmal durchlaufen darf.. 🙄

    Ich habs hin bekommen.

    drakon schrieb:

    EDIT:
    Bei dir ist die Anzahl ja fix.
    Das zweite Element ist Anfang+2, also 1.

    also ist Anfang = -1? 😕
    Ich glaubs ja nicht... :p



  • #include<iostream>
    
    using namespace std;
    
    int main()
    {
    
    	int A[8];
    	int loop;
    
    	for(loop = 0; loop < 8; ++loop)
    	{
    		cout << "Geben Sie einen Wert ein: ";
    		cin >> A[loop];
    	}
    
    for(int i = 0; i < 8; i++) 
    {
      for(int j = 0; j < (8 - 1); j++) 
      {
        if(A[j] > A[j + 1]) 
    	{
          int B = A[j];
          A[j] = A[j + 1];
          A[j + 1] = B;
        }
    }
    }
    cout << A[1] << endl;
    cout << A[6] << endl;
    }
    

    Thats it 🙂



  • <i> ⚠ 😃 Tay_fun</i> schrieb:

    #include<iostream>
    
    using namespace std;
    
    int main()
    {
    	
    	int A[8];
    	int loop;
    
    	for(loop = 0; loop < 8; ++loop)
    	{
    		cout << "Geben Sie einen Wert ein: ";
    		cin >> A[loop];
    	}
    
    for(int i = 0; i < 8; i++) 
    {
      for(int j = 0; j < (8 - 1); j++) 
      {
        if(A[j] > A[j + 1]) 
    	{
          int B = A[j];
          A[j] = A[j + 1];
          A[j + 1] = B;
        }
    }
    }
    cout << A[1] << endl;
    cout << A[6] << endl;
    }
    

    Thats it 🙂

    Nö, jetzt sind 2 mal

    😡 <h1>Tay_fun</h1> schrieb:

    Bei der Ermittlung der Extrema darf das Array nur einmal durchlaufen
    werden.



  • Was, wieso denn?



  • Ist mit den Code dann überhaupt etwas anzufangen oder muss man das meiste neu schreiben? So ein Mist.


Anmelden zum Antworten