While-Schleife: Variablen Hochzählen endet statt in bed. Abbruch in Endlosschleife



  • Es hat wohl einen Grund warum solchen destruktiven Posts von Unregistrierten stammen?



  • Thracian schrieb:

    Es hat wohl einen Grund warum solchen destruktiven Posts von Unregistrierten stammen?

    Destruktiv.... Achja? Ich hab eine Lösung gepostet was ist daran destruktiv?



  • Natürlich endet das in einer Endlosschleife. Eigentlich sogar recht offensichtlich. Du inkrementierst beide Variablen bei jedem Schleifendurchlauf. Wenn die Bedingung nicht schon bei dem ersten Auftreten der Schleife erfüllt ist, wird sie niemals abbrechen. Besipiel:

    alter1 = 15
    alter2 = 10

    10 / 15 = 1/3

    Nun zählst du die beiden hoch.
    Erster Durchlauf:

    alter1 = 16
    alter2 = 11

    alter1 = 17
    alter2 = 12

    Wie du dir leicht vorstellen kannst, wird das eine niemals doppelt so groß, wie das andere sein.

    Ein Alternative wäre das oben gezeigte. Wenn du aber unbedingt iterativ lösen willst, dann musst du dafür sorgen, dass beide Alter unterschiedlich wachsen und zwar in der Richtung, dass irgendwann die Bedingung erfüllt ist.



  • Mathe 6. Klasse schrieb:

    Hinweis: Wer diese Minimale Denkleistung nicht erreicht hat wohl nichts verloren beim C++ Programmieren.

    Mich freut es, das nicht alle solch einen Schwachsinn von sich geben.

    @Mathe 6.Klasse
    Ich gebe Dir gerne mal meine RSA-FAQ (etwa 8 Seiten lang Mathematik).
    Mal sehen ob Du halb so schlau bist wie unverschämt. Für solch einen Spruch in meinem Forum hättest Du das nächste halbe Jahr nur noch Lesezugriff gehabt und zwar vorwiegend der Bereich "Netiquette - Wie verhalte ich mich anderen Usern gegenüber". Das ist auch der Grund warum man bei uns ohne angemeldet zu sein keinen Schreibzugriff bekommt.

    Ich mag noch kein C++ Ass sein, darum frage ich. Ich will auch keine Musterlösungen sondern hatte mir lediglich ein paar Tips erhofft.

    Also @Mathe 6.Klasse,

    wenn Du nicht helfen willst, dann lass es doch bitte sein, wenn Du helfen willst, bitte ohne Kommentare, die ebenso wenig in ein C++ - Thread gehören

    @ die anderen, die ohne Schwachsinnskommentare geholfen haben/helfen wollen,

    Ich habe mal mathematisch die Aufgabe gelöst:

    Alter2 + x * 2 = 2(Alter1 + x * 2)

    Beispiel

    Alter 1 = 2
    Alter 2 = 3

    geht NICHT auf.

    Habe dann mal andere Beispiele durchgerechnet:

    Alter 1 = 4
    Alter 2 = 33

    33 + 2x = 2(4 + 2x)

    33 + 2x = 8 + 4x

    25 = 2x

    In 25 Jahren ist Der/die 33 Jährige doppelt so alt wie der/die 4Jährige.

    Probe:

    4+25 = 29
    33+25 = 58



  • Nana erst weinen ich würde nicht helfen, dann doch noch die mathematische Methode (die ich gepostet) habe verwenden. Hätte ich das als Registrierter gepostet wäre ich hundert prozentig nicht auf Ablehnung gestoßen 🙂

    Aber anscheinend schaffst du es nichtmal die Aufgabe mathematisch zu lösen:

    2 * (a + n) - (b + n) = 0
    2a + 2n - b - n = 0
    n + 2a - b = 0
    n = b - 2a

    Oh nein Wunder. Genau das was ich oben geschrieben habe.
    🙄



  • viande schrieb:

    Natürlich endet das in einer Endlosschleife. Eigentlich sogar recht offensichtlich. Du inkrementierst beide Variablen bei jedem Schleifendurchlauf. Wenn die Bedingung nicht schon bei dem ersten Auftreten der Schleife erfüllt ist, wird sie niemals abbrechen. Besipiel:

    alter1 = 15
    alter2 = 10

    10 / 15 = 1/3

    Nun zählst du die beiden hoch.
    Erster Durchlauf:

    alter1 = 16
    alter2 = 11

    alter1 = 17
    alter2 = 12

    Wie du dir leicht vorstellen kannst, wird das eine niemals doppelt so groß, wie das andere sein.

    Ein Alternative wäre das oben gezeigte. Wenn du aber unbedingt iterativ lösen willst, dann musst du dafür sorgen, dass beide Alter unterschiedlich wachsen und zwar in der Richtung, dass irgendwann die Bedingung erfüllt ist.

    Dein Beispiel:

    Alter 1 = 16
    Alter 2 = 11

    habe ich auch mal durchgerechnet...

    16 + x*2 = 2(11 + x*2)

    16 + 2x = 22 + 4x

    -6 = 2x

    In diesem Fall war Alter1 VOR 6 Jahren doppelt so alt wie Alter2...

    @Mathe 6.Klasse

    Was soll das hier eigentlich? Die Mathematische Lösung wußte ich schon vorher. Nicht aber die C++ Methode. Außerdem habe ich nicht rumgeheult sondern gefragt. Was hast Du eigentlich für ein Problem? Schenkt man Dir nicht genug Aufmerksamkeit oder warum bist du so psychotisch wütend?

    Hier bin ich Neuling und es gibt wegen sowas wie Dir schon Probleme. Ich habe lediglich nur gefragt, DU legst eine Agressivität an den Tag als habe man Dich persönlich angegriffen. Kannst ja mal im DSB vorbeikommen, dann fahre ich mal in ähnlicher Weise mit DIR Schlitten.

    Sowas ist ja wohl das allerletzte, zu behaupten ich habe Deine Mathematische Lösung abgeguckt. Nicht das DU derjenige bist der mal eben diese Lösung nachschlagen mußte.

    P.S. In dem besagten Forum heiße ich nicht wie hier, aber das wird so ein Blitzmerker wie Du schnell herausfinden.



  • Razorback2 schrieb:

    @Mathe 6.Klasse

    Was soll das hier eigentlich? Die Mathematische Lösung wußte ich schon vorher. Nicht aber die C++ Methode. Außerdem habe ich nicht rumgeheult sondern gefragt. Was hast Du eigentlich für ein Problem? Schenkt man Dir nicht genug Aufmerksamkeit oder warum bist du so psychotisch wütend?

    Wo ist dann das Problem? Musste nur die Formel in C++ umsetzen (was ich oben exemplarisch gemacht habe).

    Aber wenn dir deine Schleifen so gut gefallen, würde ich es so machen:

    #include <iostream>
    #include <algorithm>
    
    int main (int argc, char * const argv[]) {
        int alter1, alter2;
    	std::cin >> alter1 >> alter2;
    
    	if(alter1 > alter2) {
    	    std::swap(alter1, alter2);
    	}
    
    	int richtung = 1, jahre = 0;
    	if(alter1 * 2 > alter2) {
    		richtung = -1;
    	}
    
    	while(2 * alter1 + jahre - alter2) {
    		jahre += richtung;
    	}
    
    	std::cout << "nach " << jahre << " jahren" << std::endl;
        return 0;
    }
    

    PS: Wir haben offensichtlich ein unterschiedliches Verständiniss von Wut - ich finde diese Diskussion ganz einfach nur noch albern, da die Lösung(en) bereits genannt wurden.



  • Nicht die Diskussion ist albern, sondern wie man hier wegen einer Frage von Dir angegangen wird. Wie gesagt, bei uns gibts dafür 1 Monat Netiquette Zugriff only 😉

    Zeitgenossen wie Du sind leider keine Seltenheit so das wir extra darauf besonderes Augenmerk haben 😉

    Anscheinend hast Du auch nicht gelesen das ich erst nen halbes Jahr C++ hatte. Nie habe ich behauptet der Meister zu sein. Aus diesem Grund ist der einzige Punkt der wirklich albern ist der, wo Du irgendwelche Anti-Propaganda durch ein C++ Thread streust und damit beginnst einen Thread zu entfremden.

    Und "der liebe Gott" der nach einem Schlag auf die Wange die andere hinhält, der bin ich NICHT, sei gewiß.

    Das ganze hätte in 4 Posts abgehandelt sein können, wenn Du nicht unbedingt hättest Krieg angefangen wollen.

    Ich ziehe mich nun zurück hier. Irgendwie gefällt es mir hier nicht (!)

    Ich will nicht undankbar sein, deshalb danke ich für den Code obwohl ich wie schon gesagt NICHT an Musterlsungen interessiert war. Siehst Du, solche Unbedeutheiten gehen bei solch einer Hin und Her Anmacherei ebenfalls unter. Auch dafür Danke 🙂

    Eine frage habe ich noch: Und zwar für wen dieses Forum hier ist?

    Von Meistern für Meister?

    Wenn ja dann sollte man die Doktorarbeit als Aufnahmevorraussetzung verlangen.



  • hättest du mal auf micht gehört. debuggen ist voll cool.



  • Hi na dannn,

    Würde ich gerne lernen. Sorry wenn ich hier direkt als Querulant rübergekommen sein sollte. Ich reagiere leicht gereizt wenn auf ne freundliche hilfesuchende Frage solche Antisprüche kommen.

    Mir ist klar, das ich mit Eurem C++ Wissen noch nicht mithalten kann. Dafür lern ichs ja. Die Ausdrücke argc/argv usw kenne ich noch nicht. Ich werd wohl noch einige Zeit weiterlernen müssen bis ich sowas kann. Wäre aber sehr nett, wenn Du mir weiterhelfen würdest. Du hattest Debuggen erwähnt. Das kann ich z.B. noch nicht.

    Wäre nett. Muss aber nicht sein, bevor ich nachher wieder wegen rumgeheule bezichtigt werde, weil jemand meine Argumentation nicht deuten kann.



  • Du solltest nicht alles persönlich nehmen, da hier einige (ja auch ich manchmal) ganz schön rumtrollen.

    Mfg Ominion



  • Es mag so aussehen, als ob ich keinen Spaß verstehe. Das ist aber nicht der Fall. Ich bin nicht nur in einem Forum und alle machen ihre Scherze. Bis zu einer gewissen Reichweite macht man auch alles gerne mit. Ich sagte ja anfangs, ich will werder Muster/Patentlösungen sondern nur mit jemandem der sich evtl für mein Problem interessiert diskutieren und so möglicherweise auf Aspekte stoßen die / denen man alleine nicht so schnell begegnen würde...

    Nur wenn Du ehrlich bist wirst Du sicher auch zugeben das der "Wer nicht soweit denkt hat in C++ nichts zu suchen" - Kommentar echt "Klasse" war.

    Sieh die Kommentarkette durch, dann siehst Du leicht von wem die Aggressivität ausging.

    Kommt mir echt so vor als wollt ihr keine neuen User...

    Denke nach den "Willkommensgrüßen" sei mi der abstrakte gedankengang doch vergönnt...

    So und jetzt vergessen wir den Mist.



  • Nene, jetzt hast du mich nicht richtig verstanden. Das war kein Scherz von dem Typen, sondern war getrolle. Wahrscheinlich hat er das nur gesagt, um zu provozieren und sich über die Reaktion (falls eine kommt -> am besten kommt keine) amüsieren zu können.

    Also: Herzlich willkommen auf C++.de! Ich hoffe du wirst nicht öfters das Opfer eines Trolls, so dass du eine schöne, ruhige und antwortreiche Zeit hier haben wirst.

    Ich schließe mich dir an, und vergesse das auch mal.

    Mfg Ominion



  • OK :))

    Danke Dir :)) Dann weiß ich jetzt auch das es keine böse Absicht ist wenn mir mal irgendwann wieder jemand C++ ausreden will 😉

    Eine frage habe ich noch:

    In einem Buch von mir sind einige Beispiele mit Schleifenabbrüchen durch break;

    Mit Continue; werden die Schleifen zunächst richtungsablaufgeändert und dann abgebrochen. So hatte ich mir zunächst die Musterlösung für die "Doppelt So Alt"-Aufgabe gedacht. Der Author des Buches macht aber aufmerksam darauf das es vermieden werden soll, Schleifen zu beeinflussen und abzubrechen.

    Ich kann mir vorstellen, das wenn man damit ausgiebgst umgeht es zu einigen Wartungsschwierigkeiten im Code kommen kann.


Anmelden zum Antworten