Rahmenzeile ??



  • Hab die änderung teilweise vorgenommen.

    Allerdings zeigt er mir statt 11111111111111111111 nur 1

    #include <iostream>
    #include <math.h>
    using namespace std;
    int main(void)
    {
    int zaehler, n, ober_grenze=0, wdhlg=0, r=0;
    long double teil_reihe, summe;
    for(int stellen=0;stellen<65;stellen++)
    while(wdhlg==0)
    {	
    	ober_grenze=0;
    	n=1;
    	r=r+1;
    	while(ober_grenze<1)
    			{
    			cout << "Geben Sie bitte eine positive ganze Zahl groesser gleich 1 ein!\n\n";
    			cin >> ober_grenze;
    			}
    	cout << "\n\n\t" << r ; 
    	cout << "\n\n\t\t\tn\tWert geometrische Reihe";
    	cout << "\n\n\t\t--------------------------------------------------\n";
    
    	n=1;
    
    		while(n<=ober_grenze)
    			{
    			zaehler=1;
    			summe=1;
    			teil_reihe=1;
    
    				while(zaehler<=n)
    					{
    					teil_reihe=teil_reihe/2;
    					summe=summe+teil_reihe;
    					zaehler=zaehler+1;
    					}
    
    			cout.precision(19);
    			cout << "\n\t\t\t" << n << "\t\t" << summe; 
    			n=n+1;
    			}
    
    		cout << "\n\n\t" << r;
    		cout << "\n\nWenn Sie die Berechnung der geometrischen\nReihe wiederholen wollen, dann geben Sie bitte\neine 0 ein. Wenn Sie das Programm abbrechen wollen,\neine andere Zahl\n\n";
    cin >> wdhlg;
    cout << "\n\n\n";
    }
    
    return 0;
    }
    

    MFG 🙂



  • int main(void) 
    { 
    int zaehler, n, ober_grenze=0, wdhlg=0, r=0; 
    long double teil_reihe, summe; 
    for(int stellen=0;stellen<65;stellen++) // Was soll das denn?
    while(wdhlg==0) 
    {    
    /* ... */
    

    Mir scheint es so, als ob du das Prinzip von Schleifen noch in keinster Weise verstanden hast. Ich kann dir nur den Rat geben, dir Kuldrens Codeauszug nochmal ganz genau anzuschauen. Die Lösung steckt dort nämlich schon drin.



  • void druckrahmenzeile()
    {
       static int r = 0;
       static int durchlauf = 0;
    
       if(durchlauf % 2 == 0)
          ++r;
    
       for(int i = 0; i < 45; ++i)
          cout << r;
    
       cout << endl;
    
       ++durchlauf;
    }
    


  • Und arbeite an deiner Einrückung, die ist grauenhaft (vorsichtig ausgedrückt 🙂 ). Einrücken musst du nur bei Verzweigungen/Schleifen, und zwar innerhalb des jeweiligen Scopes (also innerhalb der geschweiften Klammern). Wenn du einen "Abschnitt" hervorheben möchtest, dann packe eine Leerzeile davor, aber rücke ihn nicht grundlos ein.



  • int main(void) 
    { 
    int zaehler, n, ober_grenze=0, wdhlg=0, r=0; 
    long double teil_reihe, summe; 
    for(int stellen=0;stellen<65;stellen++) // Was soll das denn?
    while(wdhlg==0) 
    {    
    /* ... */
    

    Ääähm sorry, bin nunmal Einsteiger und keen Profi. tja und was soll das nun sein ?? Gute Frage, erklärs mir doch. ich weiß es nicht. Statt es mir einfach zu schreiben, nee lieber rumnörgeln... -.-





  • SuperTalent schrieb:

    int main(void) 
    { 
    int zaehler, n, ober_grenze=0, wdhlg=0, r=0; 
    long double teil_reihe, summe; 
    for(int stellen=0;stellen<65;stellen++) // Was soll das denn?
    while(wdhlg==0) 
    {    
    /* ... */
    

    Ääähm sorry, bin nunmal Einsteiger und keen Profi. tja und was soll das nun sein ?? Gute Frage, erklärs mir doch. ich weiß es nicht. Statt es mir einfach zu schreiben, nee lieber rumnörgeln... -.-

    Anhand des Worts "Schleife" kann man doch schon erahnen was sie macht.
    In dem anderen Thread hast du doch auch welche verwendet und dich da anscheinend zum Teil ausgekannt.
    Bei meinem kleinen Codeausschnitt

    int r=1;
    for(int stellen=0;stellen<43;stellen++)
         cout<<r;
    cout<<endl;
    
    ...
    Programm
    ...
    
    if(Programm soll nochmal ausgefuehrt werden)
      r++;
    
    und wieder von vorn
    

    wird die Schleife for(int stellen=0;stellen<43;stellen++)
    43 mal ausgeführt. Und somit wird r 43 mal ausgegeben.



  • SuperTalent schrieb:

    was soll das nun sein ?? Gute Frage, erklärs mir doch. ich weiß es nicht. Statt es mir einfach zu schreiben, nee lieber rumnörgeln... -.-

    Meine Anmerkung war weniger als "Rumnörgelei" gedacht, sondern sollte viel mehr zum Ausdruck bringen, dass man erstmal darüber nachdenken sollte wie man seinen Code Schreibt anstatt irgendwas zu schreiben was keinen Sinn ergibt. Kuldrens Codeauszug ist bereits die Lösung für dein Problem, du musstest dir nur noch Gedanken darüber an welcher Stelle deines Codes du den Code von Kuldren reinschreibst. Deiner von mir (zum Teil) zitierten Antwort entnehme ich, dass du dir darüber wohl keine Gedanken gemacht hast.

    Das hier sind die Teile von Kuldrens Codeauszug die du in deinen Code an die entsprechenden Stellen schreiben könntest um dein Problem zu lösen:

    int r=1;
    for(int stellen=0;stellen<43;stellen++)
         cout<<r;
    cout<<endl;
    r++;
    

    Gehen wir das mal durch:
    Du willst also um die Ausgabe deines Ergebnisses deines Codes einen Rahmen in Form der Anzahl der Programmdurchläufe haben. Dazu definieren wir uns einfach eine neue Variable, die die Anzahl der Programmdurchläufe "speichert":

    int r=1;
    

    Wie du siehst, wird diese Variable auch gleich mit dem Wert 1 initialisiert. Die Anzahl der Programmdurchläufe soll nun bei der Ausgabe des Ergebnisses mehrmals nebeneinander stehen und somit einen Rahmen um die Ausgabe des Ergebnisses bilden. Dies kann man z. B. mit einer for -Schleife realisieren:

    for(int stellen=0;stellen<43;stellen++)
         cout<<r;
    

    Innerhalb des sogenannten for -Headers definieren wir uns eine weitere Variable namens stellen und initialisieren diese mit dem Wert 0 . Diese Variable nutzen wir dazu, um die Anzahl der Schleifendurchläufe zu bestimmen. Innerhalb des Schleifenrumpfes befindet sich nur eine Anweisung:

    cout<<r;
    

    Diese Anweisung gibt den Wert der Variablen r aus. Durch die Bedingung innerhalb des for -Headers haben wir festgelegt das diese Anweisung 43 mal ausgeführt werden soll, wodurch uns diese for -Schleife den Wert der Variablen r 43 mal nebeneinander ausgibt. Nachdem die for -Schleife nun komplett abgearbeitet wurde (also nach den 43 Durchläufen), wird noch diese Anweisung ausgeführt:

    cout<<endl;
    

    Diese Anweisung gibt einfach einen Zeilenumbruch aus und leert praktischerweise auch den Puffer des Ausgabestreams. Nun müssen wir uns nur nach darum kümmern, das die Anzahl der Programmdurchläufe, die wir in der Variablen r "gespeichert" haben, erhöht wird wenn das Programm erneut durchlaufen wird. Dazu nutzen wir diese Anweisung:

    r++;
    

    Hierbei wird der Wert der Variablen r inkrementiert, also um 1 erhöht. Alternativ könntest du dafür auch schreiben:

    r = r + 1;
    

    So, jetzt dürftest du alles wissen um auch als Anfänger entscheiden zu können, wo du nun die einzelnen Bestandtteile von Kuldrens Codeauszug in deinen Code reinschreiben solltest.



  • sorry, vllt liegt an der Geduld. Werd mich jetzt intensiv mit euren Beiträgen auseinandersetzen

    MFG



  • jawoll 🙂



  • #include <iostream>
    #include <math.h>
    using namespace std;
    int main(void)
    {
    int zaehler, n, ober_grenze=0, wdhlg=0, r=0;
    long double teil_reihe, summe;
    while(wdhlg==0)
    {	
    	ober_grenze=0;
    	n=1; 
    	r=r+1;	
    		while(ober_grenze<1)
    			{
    			cout << "Geben Sie bitte eine positive ganze Zahl groesser gleich 1 ein!\n\n";
    			cin >> ober_grenze;
    			cout << "\n\t";
    			}
    	for(int stellen=0;stellen<65;stellen++) 
    	cout << r;
    	cout << endl; 
    	cout << "\n\n\t\t\tn\tWert geometrische Reihe";
    	cout << "\n\n\t\t--------------------------------------------------\n";
    
    	n=1;
    
    		while(n<=ober_grenze)
    			{
    			zaehler=1;
    			summe=1;
    			teil_reihe=1;
    
    				while(zaehler<=n)
    					{
    					teil_reihe=teil_reihe/2;
    					summe=summe+teil_reihe;
    					zaehler=zaehler+1;
    					}
    
    			cout.precision(19);
    			cout << "\n\t\t\t" << n << "\t\t" << summe; 
    			n=n+1;
    			}
    			cout << "\n\t";
    
    		for(int stellen=0;stellen<65;stellen++) 
    		cout <<  r;
    		cout << endl; 
    		cout << endl;
    		cout << "\n\nWenn Sie die Berechnung der geometrischen\nReihe wiederholen wollen, dann geben Sie bitte\neine 0 ein. Wenn Sie das Programm abbrechen wollen,\neine andere Zahl\n\n";
    cin >> wdhlg;
    cout << "\n\n\n";
    }
    
    return 0;
    }
    

    Taaadaa 🙂 .. Allerdings hab ich r=0! Bei r=1 fängt das Programm mit 2 als Rahmenzeile an...

    MFG

    <close>



  • Sehr gut :).

    SuperTalent schrieb:

    Allerdings hab ich r=0! Bei r=1 fängt das Programm mit 2 als Rahmenzeile an...

    Mit welchen Wert du die Variable r initialisierst hängt u. a. auch davon ab, an welcher Stelle deines Codes du den Wert der Variablen r um 1 erhöhst. Da du dies zu beginn deiner äußersten while -Schleife machst, ist es in deinem Fall auch richtig die Variable r mit dem Wert 0 zu initialisieren.

    Beim nächsten mal solltest du noch mehr darauf achten deinen Code besser einzurücken. Lies dir dazu vielleicht nochmal den Post von _matze in diesem Thread hier durch, aber ich denke mal das wird sich mit der Zeit bei dir auch noch verbessern :).



  • ok danke 🙂

    MFG 🙂 🙂 🙂



  • SuperTalent schrieb:

    #include <math.h>
    

    Mizar schrieb:

    Sehr gut :).

    🙄

    cheers, Swordfish



  • Swordfish schrieb:

    ...

    Tja, da hab ich wohl was übersehen ;).



  • was da bedeutet?? xD



  • Du solltest besser

    #include <cmath>
    

    verwenden anstatt

    #include <math.h>
    

    Erklärung:
    Die Standardheadernamen von C verwenden die Form name.h . Die C++-Versionen dieser Header heißen cname , also ohne der .h Endung und mit einem davor gesetzten c . Dadurch erhälst du den entsprechenden C-Header in einer für C++-Programme geeigneten Form.


Anmelden zum Antworten