Addition mit for-Schleife



  • Hallo, bin neu hier und hoffe mal ich poste das richtig.
    Beschäftige mich seit ca. 2 wochen mit C++. Also zu meiner Frage, ich möchte ein Algorithmus schreiben der Zahlen addiert die einen bestimmten abstand haben.
    Also ich habe die Zahlen 1+5+9+13+17... und diese sollen addiert werden. Ich habe nun in einer for-Schleife die Zahlen soweit festgelegt, also er gibt mir die Zahlen 1,5,9,13... aus. Nur hab ich keine Idee wie ich diese jetzt sinnvoll addieren kann, braucht man dazu noch eine for-schleife?

    Also hier mein code bis jetzt:

    int main () {
    	int sum;
    	sum = 1;
    	for (int i=0;i<4;i++){
    		sum=sum+4;
    
    	}
    	cout << sum << endl;
    	}
    

    Vielen Dank schonmal

    Mfg Martin



  • int sum = 0;
    for (int i = 0; i <= 17; i += 4)
      sum += i;
    


  • Hey danke schonmal,
    jedoch wenn ich das so probiere komme ich auf das mysteriöse Ergebnis 40. Was nach meinen Mathekünsten nicht stimmt.
    1+5+9+13+17=45



  • Die Reihenfolge soll ja 1,5... und nicht 0,4,... sein, also

    for (int i = 1; i <= 17; i += 4)
    


  • Sorry, i muss am Anfang natürlich 1 sein, das ist die Macht der Gewohnheit. 😃



  • Wenn du bis zu einem bestimmten Grenzwert iterieren möchtest, kannst du die Methode von cooky nehmen. Wenn du eine bestimmte Anzahl von Zahlen aufaddieren willst, kannst du Folgendes nehmen:

    int sum = 0;
        for (int i=0; i<5; ++i)   //die ersten fünf Objekte der Zahlenfolge addieren
            sum += i*4+1;
    

    Wie du möchtest.



  • danke danke funktioniert wunderbar. Ich hab noch eine andere Frage ist jetzt nicht mehr direkt hierzu aber vielleicht hat ja jemand mal eine spontane Idee. Möchte eine Dezimalzahl in eine Dualzahl umwandeln. Algorithmus an sich ist mir klar. Hab jetzt auch schon was dazu geschrieben, jedoch ist meine Dualzahl umgedreht, hatte ich ehrlich gesagt auch erwartet. Hab aber keine Idee wie man das umdrehen kann. Möglicherweise gehts ja in dem man das alles auf einem String schreibt und den vieleicht irgendwie dreht. Aber davon hab ich keine Ahnung. Hier mal mein Code soweit:

    int main() {
        int dec;  //decimal number
    	int bin;  // result as binary number
    	cout << "\n Please enter decimal number: ";
    	cin >> dec;
    	cout << endl;
            if (dec > 0) {
                cout << dec << "= ";
    
               while (dec > 0) {
    	bin = dec%2;
    	dec = dec/2;
    	cout << bin;
    
    		   }
    
                cout << " in reverse order" << endl << endl;
            } 
    		else {
                cout << "\n\t please enter number bigger than 0" << endl << endl;           
        }
    


  • [Rewind] schrieb:

    Wenn du bis zu einem bestimmten Grenzwert iterieren möchtest, kannst du die Methode von cooky nehmen. Wenn du eine bestimmte Anzahl von Zahlen aufaddieren willst, kannst du Folgendes nehmen:

    int sum = 0;
        for (int i=0; i<5; ++i)   //die ersten fünf Objekte der Zahlenfolge addieren
            sum += i*4+1;
    

    Wie du möchtest.

    int count = 5;
    int distance = 4;
    int sum = distance * (count * (count - 1)) / 2 + count;
    

    Siehe kleiner Satz von Gauß.



  • Da gibt es viele Möglichkeiten. Du könntest z.B. die Zahlen in einen Vektor speichern und anschließend den Inhalt umkehren (hab's nicht ausprobiert):

    #include <algorithm>
    #include <vector>
    
    ...
    std::vector<bool> v1;      //int ist zu groß
    
    v1.pushback(bin);
    //Vektor füllen
    
    std::reverse(v1.begin(), v1.end());
    

    @Michael: so geht's natürlich auch 🙂



  • hab von einem Freund eine mögliche Lösung meines Problems gekriegt. Aber so richtig steig ich da noch nicht durch, kann mir das vielleicht jemand erklären?

    int main() {
       int dec, bin, n=1;
       bin =0;
    	cout << "Pleaser enter decimal number: ";
    	cin >> dec;
    	cout << endl;
    	if (dec > 0) {
    		cout <<dec << " = ";
    		while (dec > 0) {
    			bin=bin+(dec%2)*n;
    			dec = dec/2;
    			n=n*10;
    		}
    		cout << bin <<" in reverse order." << endl << endl;
    	} else {
    		cout << "\n Please enter number bigger than 0" << endl << endl;
    	}
    	system("PAUSE");
    	return 0;
    }
    

    Also es funktioniert, aber was das Programm nun macht um das Ergebnis zu drehen weiß ich nicht.
    Danke schonmal



  • Da kann dir keiner helfen. Das geht jetzt zu weit, weil es langsam nach faulen Schülern riecht. Alles, was da sich verändert hat, sind praktisch drei Zeilen, und du darfst jetzt raten welche.



  • Alles klar, kann denn wohl geschlossen werden. Nur so zur Information, ich versteh den Quelltext nur den Algorithmus nicht und auf Unterstellungen hab ich auch keine Lust, aus der Schulzeit bin ich auch schon eine ganze weile raus ;). Gibt ja auch Leute die lernen und man sollte mal daran denken das man auch mal angefangen hatte.
    Will mir auf jedenfall von niemanden helfen lassen der es nicht möchte.

    Mfg...


Anmelden zum Antworten