Prototypen
-
Ups
Sorry, alles klar.
Wer genau lesen kann ist im Vorteil.

-
Hmm, Aufgaben auszudenken ist immer etwas schwer aber ich versuchs mal (teilweise habe ich ähnliche Aufgaben in Programmierbüchern gefunden):
Änder den Code von mir mal so ab, dass du 1000 Werte speichern kannst und schau, ob es funktioniert. Bei mir funktioniert es einwandfrei

Deklariere ein Array der Länge 10 und speichere darin die ersten 10 ungeraden Zahlen (also 1, 3, 5, ...), am besten mit einer for-Schleife.
Deklariere ein Array
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 hoffe, dass diese Aufgaben nicht allzu schwer sind.
-
1. Geschafft
Bei 2.,3. und 4. weis ich nicht, wie ich die for-Schleifen deklarieren soll.
Wie geht das? Kannst du mir das bitte erklären?
-
Also du möchtest ja durch alle Werte des Arrays iterieren (iterieren bedeutet der Reihe nach alle Werte durchmachen).
Du beginnst also am Anfang des Arrays bis zu einem bestimmten Index. In diesem Fall vom Anfang bis zum Schluss.
Wenn du nun ein Array mit 10 Elementen hast weisst du, dass diese Elemente von 0 bis 9 durchnummieriert sind.
Die for-Schleife sieht dann so aus:
for( int i = 0; i < 10; i++ )
Du beginnst also bei 0 und erhöhst i bei jedem Schritt um 1. Dies machst du aber nur solange i < 10 ist, da das Array ja nur Elemente von 1-9 hat.Den Rest siehst du in meinem Beispiel oben.
-
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
idefiniert und festgelegt, dass die Schleife solange ausgeführt werden soll, wie auchi < 9. Am Ende eines Durchlaufs wirdidann 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 = 1Mü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 == 1Modulo 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
= 50Das 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