Prototypen



  • Aber es sollen ja die ungeraden Werte angezeigt werden



  • Eine for-Schleife ist sehr einfach. Zunächst einmal ein Überblick in Pseudocode:

    for(Initialisierung; Bedingung; Fortsetzung) {
        Anweisungen
    }
    

    Du hast die Möglichkeit eine Initialisierung durchzuführen, in der du für die Schleife eine Zählvariable definierst, mit der du den Programmfluss kontrollieren kannst. Solange die angegebene Bedingung wahr ist (meistens bezogen auf die Zählvariable), dann wird jeweils einmal alles zwischen den geschweiften Klammern ausgeführt (=Anweisungen). Zum Schluss wird in der Fortsetzung meistens die Variable inkrementiert (um 1 erhöht), damit die Schleife auch mal aufhört.

    for(int i = 0; i < 9; i++)
        std::cout << i << std::endl;
    

    Hier wird eine Variable i definiert und festgelegt, dass die Schleife solange ausgeführt werden soll, wie auch i < 9 . Am Ende eines Durchlaufs wird i dann inkrementiert.
    Ansonsten werden nur die Zahlen von 0 bis 8 ausgegeben.

    Hoffe das erklärt es irgendwie 😃

    // EDIT: Das war allgemein.
    Wenn du überprüfen willst, ob eine Zahl (un)gerade ist, dann kannst du den Modulo-Operator % nutzen.



  • Kannst du mir mit dem Modulo ein Beispiel machen?



  • Der Modulo-Operator liefert immer den Rest einer Division:

    7 / 3 = 2 Rest 1
    7 % 3 = 1
    

    Müsste einfach und selbsterklärend sein.



  • Oder gleich so für die ungeraden Zahlen:

    for( int i = 0; i < 10; i++ )
    	{
    		cout << 2*i + 1 << endl;
    	}
    

    Falls du dann mal durch gerade Zahlen möchtest einfach das +1 weglassen.



  • Das ist ja dann wieder höhere Mathematik, wenn man sagt, dass für jedes n eine Zahl k = 2*n + 1 (n, k Element N) immer ungerade ist. (Lässt sich durch vollständige Induktion beweisen 😃 )



  • Christian Ivicevic schrieb:

    Das ist ja dann wieder höhere Mathematik, wenn man sagt, dass für jedes n eine Zahl k = 2*n + 1 (n, k Element N) immer ungerade ist. (Lässt sich durch vollständige Induktion beweisen 😃 )

    Genau 😉 Aber für die, die vollständige Induktion nicht kennen gehts auch. Ist ziemlich intuitiv 🙂



  • Schon, aber ich denke, dass ich es eher mit Modulo gemacht hätte, als jede Zahl einfach ungerade zu machen. 😃
    Aber jedem seine Herangehensweise.



  • Modulo Operator ist das Gegenstück zur Division aus der Grundschule.

    Da hat man noch etwa folgendes gerechnet:

    7 durch 2 == 3 Rest 1

    Bei int's ist es genauso.
    7 / 2 == 3
    und
    7 % 2 == 1

    Modulo gibt dir also den ganzzahligen Rest der Division. Das macht natürlich nur bei Integers Sinn.

    Nun überlegt man sich weiter, das jede gerade Zahl durch 2 teilbar ist, also bei der Division durch 2 den Rest 0 lässt. Also z.b. 8 % 2 == 0. Ist eine Zahl ungerade, dann ist sie nicht durch 2 teilbar. Sie lässt also bei Division durch 2 einen Rest ungleich 0. Also sogar den Rest 1. z.B. 9 % 2 == 1.

    Man kann also mit folgendem Code testen ob eine Zahl gerade oder ungerade ist:

    if(i % 2 == 0) cout << i << " ist gerade.\n";
    else cout << i << " ist ungerade\n";
    

    Das ist aber umständlich um die ersten 10 ungeraden Zahlen zu finden. Besser ist es zu wissen, das jede zweite Zahl ungerade ist und das 1 die erste ungerade Zahl größer 0 ist. Das führt einem zu der Erkenntnis, das man jede beliebige ungerade Zahl als 2*i +1 darstellen kann. Damit kann man dann folgende Schleife aufstellen:

    int u; // da wird die ungerade Zahl drinstehen
    for(int i=0; i<10; i++)
    {
      u = 2*i +1;
      // tues was mit u
    }
    

    Mario



  • Danke euch allen für die ausführlichen Antworten.

    Und wie ist es bei Aufgabe 3 und 4?

    Deklariere ein Array
    C/C++ Code:
    int x[] = {9,4,3,5};

    Dies ist ein Array der Länge 4. x[0] = 9, x[1] = 4 usw.
    Gibt mit einer for-Schleife die Summe der Werte aus, die im Array gespeichert sind.

    Deklariere zwei float Arrays x und y der Länge 3, und fülle beide mit beliebigen Werten. Anschliessend gibst du mit einer for-Schleife x[0]+y[0] und [x1]+y[1] und x[1]+x[2] aus.



  • Ich will dir nicht zu nahe treten, aber zumindest 3. ist keine schwere Aufgabe, wo man in der Lage sein sollte, diese alleine zu lösen, wenn man ernsthaft programmieren lernen will.

    Vlt. als kleiner Ansatz: schreib dir 10 Zahlen auf einen Zettel und addiere diese, wie gehst du dabei vor?
    z.B. 3+7+5+5+2+8+3+4+3+10=?
    Du rechnest doch sicher etwa so:
    3+7+5+5+2+8+3+4+3+10
    = 10+5+5+2+8+3+4+3+10
    = 15+5+2+8+3+4+3+10
    = ...
    = 37 + 3 +10
    = 40 + 10
    = 50

    Das musst du jetzt nur noch umsetzen in eine For-schleife.

    Spoiler:
    *
    *
    *
    *
    *
    *
    *
    Deklariere einen weiteren Wert, der die Zwischenergenisse aufnehmen kann und nach dem letzen Schritt die Summe enthält.



  • Sorry das ich nicht so begabt bin wie du als du C++ gelernt hast.
    Aber wenn ich was nicht kapiere dann frage ich halt für sowas ist das Forum doch da.



  • So hab ich das nicht gemeint, ich denke nur, das es dir nichts bringt von uns die Antwort zu erhalten. Schreib doch mal genauer, warum du nicht weiterkommst. Dann denkt man noch einmal über das Problem nach und kommt meistens von selbst auf die Lösung.

    Ich frage also mal anders, was hast du den bisher für Aufgabe 3 dir überlegt/programmiert und woran happert es, das du nicht weiter kommst?

    Mario



  • Also erstmal versteh ich nicht wieso ich das mit einer for-Schleife machen soll
    Es ist doch viel einfacher das ohne die for-Schleife zu machen, oder ich habe die for-Schleife einfach nicht richtig verstanden.

    Und dann versteh ich nicht wie ich das in eine for-Schleife einbauen soll. 😞
    Irgendwie machts bei mir nicht * klick *



  • Truggi schrieb:

    Also erstmal versteh ich nicht wieso ich das mit einer for-Schleife machen soll
    Es ist doch viel einfacher das ohne die for-Schleife zu machen, oder ich habe die for-Schleife einfach nicht richtig verstanden.

    Und dann versteh ich nicht wie ich das in eine for-Schleife einbauen soll. 😞
    Irgendwie machts bei mir nicht * klick *

    Vielleicht solltest du dir doch ein anderes Buch zulegen. Laut den Kritiken bei Amazon setzt dein Buch eigentlich Kenntnisse in C voraus, die du offensichtlich nicht hast und die mit einem entsprechenden Buch auch nicht notwendig sind.

    Hinweis: vom Buch "C++ von A bis Z: Das umfassende Handbuch" von Jürgen Wolf solltest du die Finger lassen.



  • Oke Danke

    Kannst du mir auch ein Buch empfehlen?

    Danke nochmal das du mich darauf aufmerksam gemacht hast.
    Ich dachte schon entweder muss man älter sein als ich es bin oder das Buch ist nicht für Anfänger geschrieben.

    Gruss Truggi



  • Du musst das bei dem Beispiel natürlich nicht mit einer For Schleife machen.
    Aber
    a) lernst du mit for Schleifen umzugehen
    b) ist es mit einer for besser wiederverwendbar.

    z.B. Wenn du wissen willst wie viel ein Ehepaar zusammen wiegt, dann kannst du davon ausgehen, das es immer 2 Personen sein werden (es sei den wir reden über Mormonen, aber lassen wir das ;)) Dann ist es natürlich sinnvoll die zwei Werte direkt zu addieren.

    Ein anderes Beispiel, du programmierst eine "Kassiererin" aus dem nächsten Supermarkt. Dann weißt du ja nicht, ob ein Kunde mit 2,3 oder gar 1 Million Artikeln in seinem Wagen ankommt. Wenn du dann anfängst für jeden Fall eine Unterscheidung (Stichwort: if) zu machen, wird das ganze schnell unübersichtlich.

    Und wenn du Probleme mit der for hast, wie sehen den deine Lösungen für Aufgabe 1 und 2 aus?



    #include <cstdio>
    #include <cstdlib>
    #include <iostream>
    using namespace std;
    
    int main(int nArg, char* pszArgs[])
    {
    
      int x_werte[1000];
    
        for( int i = 0; i < 1000; i++ )
        {
            x_werte[i] = i+1;
        }
    
        for( int i = 0; i < 1000; i++ )
        {
            cout << x_werte[i] << endl;
        }
    
        system("PAUSE");
        return 0;
    }
    

    1 konnte ich ohne die Hilfe der von icarus2 lösen

    #include <cstdio>
    #include <cstdlib>
    #include <iostream>
    using namespace std;
    
    int main(int nNumberofArgs, char* pszArgs[])
    {
    
        for(int i = 0; i < 10; i++)
        {
    
           cout << 2*i + 1 << endl;
    
    }
        system("PAUSE");
        return 0;
    }
    

    hier mussten sie mir erklären wie ich es schaffe nur die ungeraden auszugeben.



  • Truggi schrieb:

    Oke Danke

    Kannst du mir auch ein Buch empfehlen?

    Danke nochmal das du mich darauf aufmerksam gemacht hast.
    Ich dachte schon entweder muss man älter sein als ich es bin oder das Buch ist nicht für Anfänger geschrieben.

    Gruss Truggi

    Dazu blätterst du am Besten mal ein paar Tage im Forum zurück, da wird die Frage nach einem guten C++-Buch immer mal wieder gestellt und beantwortet.

    Ich finde das Konzept von "Einführung in die Programmierung mit C++" von Bjarne Stroustrup interessant, habe das Buch aber nicht gelesen.



  • Danke

    Dann lasse ich das Buch erstmal beiseite.

    Schönen Abend


Anmelden zum Antworten