in array zahle einlesen abschluss mit 0



  • hustbaer schrieb:

    Weil es in C++ std::vector und std::sort gibt, und damit kaum mehr einen Grund warum das Limit 50 in der Aufgabenstellung stehen sollte, noch dass die Zahlen bereits sortiert sind.

    Mann muss sich mit dem Low Level Zeugs befasen, bevor man auf High-Level geht.



  • Warum schrieb:

    hustbaer schrieb:

    Weil es in C++ std::vector und std::sort gibt, und damit kaum mehr einen Grund warum das Limit 50 in der Aufgabenstellung stehen sollte, noch dass die Zahlen bereits sortiert sind.

    Mann muss sich mit dem Low Level Zeugs befasen, bevor man auf High-Level geht.

    Nein, mit dem "Low Level Zeugs" kann man sich befassen, wenn man mir vector, string und Co umgehen kann.



  • manni66 schrieb:

    Warum schrieb:

    hustbaer schrieb:

    Weil es in C++ std::vector und std::sort gibt, und damit kaum mehr einen Grund warum das Limit 50 in der Aufgabenstellung stehen sollte, noch dass die Zahlen bereits sortiert sind.

    Mann muss sich mit dem Low Level Zeugs befasen, bevor man auf High-Level geht.

    Nein, mit dem "Low Level Zeugs" kann man sich befassen, wenn man mir vector, string und Co umgehen kann.

    Wenn man vorher Arrays kann, versteht man Vector & Co viel besser.
    Das ist glaub ich aber ziemlich subjektiv.



  • Warum schrieb:

    manni66 schrieb:

    Warum schrieb:

    hustbaer schrieb:

    Weil es in C++ std::vector und std::sort gibt, und damit kaum mehr einen Grund warum das Limit 50 in der Aufgabenstellung stehen sollte, noch dass die Zahlen bereits sortiert sind.

    Mann muss sich mit dem Low Level Zeugs befasen, bevor man auf High-Level geht.

    Nein, mit dem "Low Level Zeugs" kann man sich befassen, wenn man mir vector, string und Co umgehen kann.

    Wenn man vorher Arrays kann, versteht man Vector & Co viel besser.
    Das ist glaub ich aber ziemlich subjektiv.

    Was sollte einem da zu einem besseren Verständnis verhelfen?



  • Eisflamme schrieb:

    Ich bin da pädagogisch aber nicht so sicher, ob die nicht erstmal lernen sollten wie Arrays funktionieren und später vector und sort lernen. Ich meine, wenn man sort auf einen vector nutzt, muss man direkt das Konzept von Iteratoren erklären.

    Ich ziehe den Schluss daraus, dass sehr früh Iteratoren erklärt werden sollten, weil das so ein zentrales Konzept ist. Als Beispiel für einen Random Access Iterator kann man dann den Zeiger einführen.
    vector sollte der erste Typ sein, der nach den pritimiven, numerischen Datentypen eingeführt wird. Dann kommen Referenzen, const und dann der Vergleich Zeiger vs. vector::iterator . Erst dann würde ich string einführen und eindringlich von C-Strings abraten ( strlen und printf sind böse, strcpy und gets Todsünden, jeweils mit Beispielen undefinierten Verhaltens, gerne mit Verweis auf Sicherheitslücken, damit der letzte DAU es versteht).
    Schließlich kommt ein Beispiel, in dem die Größe eines vector s nicht erst zur Laufzeit ermittelt wird. Und weil man in C++ nur das bezahlt, was man auch benutzt, wird stattdessen array genutzt. Anschließend wird als Negativbeispiel das C-Array gezeigt.
    Als weiteres zentrales Konzept werden Template-Funktionen besprochen und Algorithmen wie find , swap oder sort gezeigt.
    Jetzt kann man so langsam mit Klassen anfangen.
    Exceptions wirken in diesem Kontext einfach und natürlich, weil der bisherige Code immer ausnahmesicher gewesen ist. Es wird ein Beispiel für eine eigene Ressource programmiert und deren Vergabe mit RAII ebenfalls ausnahmesicher gemacht.
    [...]
    Ganz am Ende unter "das gibt es leider auch noch" wird dann der Vollständigkeit halber vor new[] und delete[] gewarnt.
    Im Anhang gäbe es eine Tabelle mit allen Standardfunktionen und -konstanten von C und den C++-Äquivalenten.

    malloc          vector<T>, unique_ptr<T>(new T(..))
    free            - (siehe RAII)
    atoi            stoi
    strcpy          string::operator = (const char *)
    exit            throw (man würde eine Ausnahme werfen)
    atexit          - (siehe RAII)
    fopen           ifstream/ofstream(..)
    fclose          ifstream::~ifstream (siehe RAII), ifstream::close
    memcpy          copy (siehe Kopie)
    memset          fill
    strchr          find
    ..
    INT_MAX         numeric_limits<int>::max()
    

    Eisflamme schrieb:

    Würdet ihr in einem Tutorial/Kurs sofort mit vector arbeiten?

    Ja.
    In der Flugschule springt man in der ersten Stunde ja auch nicht mit einem Papierflugzeug von einer Klippe, nur weil man das vor 150 Jahren so versucht hat.



  • SeppJ schrieb:

    nata schrieb:

    meine Aufgabestellung ist Lesen Sie beliebig viele (max. 50) Zahlen (Abschluss mit dem Wert 0) ein, speichern Sie diese in einem Feld und geben Sie Mittelwert, Median und die Standardabweichung der Zahlen aus. (Bei der Ermittlung der Medians können Sie davon ausgehen, dass die Zahlen schon sortiert sind, vom Benutzer also entweder in aufsteigender oder in fallender Reihenfolge eingegeben werden.)

    Mit Verlaub, aber: Das ist eine selten bescheuerte Aufgabenstellung. Ich gehe sogar aufgrund dieser Aufgabenstellung so weit, zu sagen, dass dein Lehrer keine Ahnung von C++ hat und stattdessen vor 40 Jahren mal C (oder gar Fortran?) gelernt hat und mit euch nun C mit cout macht, anstatt C++.

    Mit Verlaub, aber: Da du den Schwerpunkt des Kurses nicht kennst sind das gewagte Behauptungen. In solchen Anfängerkursen stehen meist allgemeinere Konzepte im Vordergrund. Bibliotheken sind nicht wichtig und häufig wird deren Verwendung sogar untersagt und auch die Programmiersprache selbst spielt keine zentrale Rolle. Die Aufgabenstellung ist absolut OK.



  • int main()
    {
      /*Lesen Sie beliebig viele (max. 50) Zahlen [...] ein*/
      const int max = 50;
      int Zahlen[max];
    
      int zahlen_eingegeben = 0;
      for(int neu; std::cin >> neu; )
      {
        /*(Abschluss mit dem Wert 0)*/
        if(neu == 0)
          break;
    
        /* speichern Sie diese in einem Feld */
        Zahlen[zahlen_eingegeben++] = neu;
      }
    
      /* ... */
    }
    

    den rest bekommst du selbst hin. der aufgabenstellung zu folge nehme ich mal an, dass dein lehrer es so möchte und du es so am ehesten verstehst.

    PS:

    Bibliotheken sind nicht wichtig und häufig wird deren Verwendung sogar untersagt

    damit man programmiersprachen-spezifisch dinge lernt und damit widersprichst du dir selbst. tja 😛



  • unskilled schrieb:

    PS:

    Bibliotheken sind nicht wichtig und häufig wird deren Verwendung sogar untersagt

    damit man programmiersprachen-spezifisch dinge lernt und damit widersprichst du dir selbst. tja 😛

    Das ist mal absoluter Nonsens.

    Und bei deiner Interpretation der Aufgabenstellung hättest du ruhig mehr auf Verständnis achten können als darauf zeigen zu wollen was für ein toller Hecht du bist. 😉



  • danke für eure zahlreiche Antwort

    #include <iostream> 
    
    using namespace std; 
    
    int main()
    {
    	/*Lesen Sie beliebig viele (max. 50) Zahlen [...] ein*/
    	const int max = 50;
    	int zahlen[max];
    
    	int zahlen_eingegeben = 0;
    	int neu;
    	cin >> neu;
    
    	/*(Abschluss mit dem Wert 0)*/
       	 if(neu != 0){
    
       	/* speichern Sie diese in einem Feld */
       	 zahlen[zahlen_eingegeben++] = neu;
    
    	}else{
    		break;
    		}
    
    	for(int i = 0; i < max; i++)
    	cout << zahlen[i]<< endl;
    
      	return 0;
    }
    

    in dem fall sagt mir dass breal nur bei switsch und loop benutzen kann.

    und wenn ich so mache was logischerweise funktionieren soll. b

    #include <iostream> 
    
    using namespace std; 
    
    int main()
    {
    	/*Lesen Sie beliebig viele (max. 50) Zahlen [...] ein*/
    	const int max = 50;
    	int zahlen[max];
    
    	int zahlen_eingegeben = 0;
    	int neu;
    
      	while (neu != 0) {
    		cin >> neu;
    		/*(Abschluss mit dem Wert 0)*/
       		 if(neu != 0){
    
       		/* speichern Sie diese in einem Feld */
       		 zahlen[zahlen_eingegeben++] = neu;
    
    		}
    
    	}
    		for(int i = 0; i < max; i++)
    		cout << zahlen[i]<< endl;
    
      	return 0;
    }
    

    bekomme ich die ausgabe. sofort nachdem ausführen,ohne dass ich wert eingebe
    **0
    0
    9
    0
    1606419960
    32767
    7
    0
    1606664232
    32767
    1606416768
    32767
    1606416704
    32767
    1606424274
    32767
    0
    0
    1606418464
    32767
    0
    0
    1606416752
    32767
    0
    1
    0
    1
    1606418432
    32767
    0
    0
    1606419960
    32767
    9
    9
    1606416928
    32767
    1606420320
    32767
    0
    0
    0
    0
    0
    0
    0
    0
    0
    0
    **
    wie kann man am bessten machen?



  • Du solltest neu initialisieren. also int neu= 1; sonst steht eine zufällige Zahl bei dir drin und ich vermute, dass dein compiler das "zufällig" für dich auf 0 setzt 😉

    und natürlich solltest du nur so viele zahlen ausgeben, wie eingegeben wurden. So gibst du ja immer das komplette array aus.



  • danke für deine Antwort. hat mich weitergebracht.

    und ich habe dann in der for schleife so geschrieben und hat funktioniert

    for(int i = 0; zahlen[i] != 0; i++)
    		cout << zahlen[i]<< endl;
    

    ich bin so motiviert
    danke euch allen



  • nein, das klappt so nicht. Bzw wenn es funktioniert, dann gerade nur durch Zufall. Was passiert zum Beispiel, wenn ein Benutzer genau 50 Zahlen eingibt?

    Benutze einfach zahlen_eingegeben.



  • danke 🙂


Anmelden zum Antworten