Probleme mit vectoren



  • Hallo Freunde!

    Ich bin ein C++ Anfänger und arbeite mich derzeit durch das Buch "Der C++ Programmierer"!
    In diesem Buch stehe ich leider bei Beispiel 13 auf der Leitung. Hab schon versucht die Lösung durch debuggen zu finden, leider ohne Erfolg.

    Könnte jemand versuchen mir folgenden Code zu erklären?

    int main() {
    	constexpr int MINIMUM{ -99 };
    	constexpr int MAXIMUM{ 100 };
    	constexpr int INTERVALLZAHL{ 10 };
    	constexpr int INTERVALLBREITE{ (MAXIMUM - MINIMUM + 1) /
    		INTERVALLZAHL };
    	int eingabe;
    	vector<int> intervalle(INTERVALLZAHL);
    
    	cout << "Bitte Zahlen im Bereich " << MINIMUM << " bis " << MAXIMUM
    		<< " eingeben:\n";
    
    	cin >> eingabe;
    	while (eingabe >= MINIMUM && eingabe <= MAXIMUM) {
    		intervalle[(eingabe - MINIMUM) / INTERVALLBREITE]++;
    		cin >> eingabe;
    	}
    	for (int i = 0; i < INTERVALLZAHL; i++) {
    		cout << "Intervall " << i *INTERVALLBREITE + MINIMUM << " .. "
    			<< (i + 1) * INTERVALLBREITE + MINIMUM - 1 << ": "
    			<< intervalle[i] << '\n';
    	}
    	cin >> eingabe;
    }
    

    Im speziellen geht es mir um

    intervalle[(eingabe - MINIMUM) / INTERVALLBREITE]++;
    

    und auch um

    cout << "Intervall " << i *INTERVALLBREITE + MINIMUM << " .. "
    			<< (i + 1) * INTERVALLBREITE + MINIMUM - 1 << ": "
    			<< intervalle[i] << '\n';
    

    Hab beides probiert nachzurechnen um selbst auf eine logische Erklärung zu kommen.. nervt mich leider gewaltig, dass ich mir keinen Reim daraus machen kann!

    lg



  • Du willst jetzt sagen, dass du keine drei Zahlen in den Taschenrechner eintippen kannst?



  • manni66 schrieb:

    Du willst jetzt sagen, dass du keine drei Zahlen in den Taschenrechner eintippen kannst?

    Ich hab doch sogar geschrieben, dass ich einen Taschenrechner benutzt habe. Mit den Werten konnte ich jedoch nichts anfangen.
    Dh. bitte zieh selber deine Schlüsse, aber ich denke nicht, dass es an der Bienung des Rechners liegt, wohl eher an meiner absolut unmenschlichen Inkompetenz/Dummheit.. 😃

    Wenn das alles ist, was du mir zu meiner Lösung beitragen kannst.. bedanke ich mich schon mal recht herzlich bei dir. 👍



  • Mike2619 schrieb:

    Ich hab doch sogar geschrieben, dass ich einen Taschenrechner benutzt habe.

    Nein!

    Mike2619 schrieb:

    wohl eher an meiner absolut unmenschlichen Inkompetenz/Dummheit.. 😃

    Du kannst dich selbst wohl am Besten einschätzen.

    Mike2619 schrieb:

    Wenn das alles ist, was du mir zu meiner Lösung beitragen kannst.. bedanke ich mich schon mal recht herzlich bei dir. 👍

    Wenn du keine konkreten Fragen stellen kannst... gerne geschehen.



  • Mike2619 schrieb:

    Hab beides probiert nachzurechnen

    Doch, hab nur nicht das Wort Taschenrechner eingebaut, dachte aber eine der Fähigkeiten als Programmierer ist es, logische Schlüsse zu ziehen..
    Nachrechnen mit einem Rechenschieber wäre noch eine Option gewesen, stimmt

    manni66 schrieb:

    Du kannst dich selbst wohl am Besten einschätzen.

    So schnell kann aus einer selbst ironischen Aussage eine Beleidigung werden, nicht schlecht.

    manni66 schrieb:

    Wenn du keine konkreten Fragen stellen kannst... gerne geschehen.

    Viel konkreter kann ich die Sache leider nicht formulieren, ich kann den Programmablau nicht wirklich nachvollziehen.

    Generell bist du einer von den Menschen, denen ich nur den Rat geben kann, nicht immer alles so negativ und schnippisch zu formulieren. Vorallem wenn es dafür kaum einen Grund gibt. Wenn dir die Fragestellung zu unkonkret ist, halte dich nächstes mal einfach fern, oder gib gleich in der ersten Antwort Bescheid, dass du dich an der Fragestellung störst..

    Der Taschenrechnerbeitrag war eine Verschwendung kostbarer Lebenszeit, deiner und meiner. Es macht vorallem den Eindruck, als ob die Welle der Verschwendung mit dir nicht brechen würde.



  • Bitte den Beitrag löschen! Scheinbar ist meine Problematik keine mit der man an die Öffentlichkeit gehen sollte.

    Dann mal weiter grübeln, danke und bye.



  • Mike2619 schrieb:

    Viel konkreter kann ich die Sache leider nicht formulieren, ich kann den Programmablau nicht wirklich nachvollziehen.

    Da hat er aber schon recht mit der Taschenrechnerfrage.

    intervalle[(eingabe - MINIMUM) / INTERVALLBREITE]++;
    

    Du weisst, was MINIMUM ist, 'eingabe' hast du selber eingegeben, INTERVALLBREITE wirst du auch ausgerechnet haben.
    Nimm doch für 'eingabe' einen Wert nahe Minimum, einen nahe Maximum und einen in der Mitte. Spätestens dann sollte klar sein, was da passiert.



  • Jockelx schrieb:

    Da hat er aber schon recht mit der Taschenrechnerfrage.

    Ja, ich hätte ja auch gar kein Problem mit einer Taschenrechnerfrage. Defakto, war es aber keine Frage sondern eine Feststellung in einem Satz, dass ich keinen Taschenrechner benutzen kann.

    intervalle[(eingabe - MINIMUM) / INTERVALLBREITE]++;
    

    Das ++ hat ja die Aufgabe zu inkrementieren, dh. um 1 zu erhöhen. Richtig?



  • Ach so, am ++ scheitert es? Ich dachte an der Berechnung für den Index.
    Ja, ++ erhöht den Wert, den der Vektor an der Stelle "(eingabe - MINIMUM) / INTERVALLBREITE" hat, um eins.



  • Achsoo!!! Ich dachte, dass hat etwas damit zu tun, dass zb. mit Werten:
    Eingabe = 100
    eingabe - MINIMUM) / INTERVALLBREITE = 9,95 -> mit ++ auf 10 z.B
    [/code]
    Dabei bezieht sich das schon auf der Wert..

    Eine Frage noch, angenommen ein vector<int> v (10). Wenn ich die Position 8,40 habe, wird aufgrund des Int Typs eine 8 daraus, oder?
    Wenn ich in diesem Programm den vector mit dem Typ float genommen hätte, würde das Programm nicht funktionieren?

    Kann man den Wert eines vectors an der Position 1 auch so ändern, oder geht das nur mit ++ ohne einem = ?

    intervalle[1]100;
    


  • jetzt hab ichs endlich ganz geschnallt..
    Hatte vergessen, das die erste Position in einem Vector 0 ist. Dh. die Position 4 bei einem vector(10), die Mitte.. 😮


  • Mod

    Mike2619 schrieb:

    Hatte vergessen, das die erste Position in einem Vector 0 ist. Dh. die Position 4 bei einem vector(10), die Mitte.. 😮

    Naja. Links von der Mitte würde es besser beschreiben (4 Vorgänger, 5 Nachfolger). Ansonsten hast du es doch noch nicht richtig verstanden.



  • Stimmt, da hab ich noch einen Gedankenfehler eingebaut.
    Ich hab das Programm gestern noch 2 mal nachgebaut, dabei sind mir noch ein paar Sachen aufgefallen, hat aber im Endeffekt gut funktioniert.

    Vielen Dank für die super Hilfe an alle,
    liebe Grüße und vl. bis zum nächsten mal!


Anmelden zum Antworten