for () < C/C++ < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 08:36 Di 30.01.2007 | Autor: | votec |
So nach einer Überarbeitung dieses Textes will ich noch mal auf die Problemstellung zurück kommen.
Es geht um for () Schleifen und um das Problem das ich nicht weiß wie sie abgearbeitet werden.
Also z.b.
for(int=i;i<5;i++)
for(int=j;j<5;j++)
{
m[i][j]=1
if (....bedingung)
}
Hoffe es ist jetzt besser verständlich.
Wäre nett wenn mir einer helfen könnte
Mfg Julian
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 09:43 Di 30.01.2007 | Autor: | Frank05 |
Hallo,
Deiner Altersangabe entnehme ich mal (PISA zum Trotz), dass du durchaus in der Lage sein solltest ganze Sätze mit erkennbarem Sinn zu formulieren. Aus dem was du hier allerdings so schnell hingeschustert hast kann ich weder eine Frage ableiten, noch erkennen was du bereits selbst an Lösungswegen versucht hast, oder wo deine Schwierigkeiten nun genau liegen. Da es wohl irgendwie mit for-Schleifen zusammenhängt kann ich dir die folgende Seite [1] als Einführung empfehlen. Wenn du etwas genauer wissen willst und erwartest, dass sich andere Leute auch die Zeit nehmen dir eine klare und verständliche Antwort zu liefern, dann finde ich es eigentlich selbstverständlich, dass du das auch in deinem Anliegen entsprechend zur Geltung bringst.
[1] http://www.cplusplus.com/doc/tutorial/control.html
|
|
|
|
|
Hallo votec,
> for(int=i;i<5;i++)
> for(int=j;j<5;j++)
> {
> m[j]=1
> if (....bedingung)
>
> }
Bei der Schleifenbedingung sollte int i (bzw. int j) und nicht int=i stehen. Außerdem sollten Laufvariablen immer initialisiert werden (z.B. mit int i = 1 oder so, aber das ist von dem abhängig, was du eigentlich machen willst.) Nach 'm[i][i] = 1' muß ein ';' folgen, also: 'm[i][j]=1;'. Unter der Annahme 'int i = 1' und 'int j = 1' in den Schleifenköpfen wird hier eine Matrix aus [mm]\mathbb{K}^{4\times 4}[/mm] zeilenweise mit 1en gefüllt.
Nach jedem Schreibzugriff auf ein Feld wird dann irgendeine Bedingung überprüft.
> Hoffe es ist jetzt besser verständlich.
Na ja, was genau wolltest du den mit diesem Code anstellen?
Viele Grüße
Karl
|
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 11:19 Di 30.01.2007 | Autor: | Frank05 |
> Es geht um for () Schleifen und um das Problem das ich
> nicht weiß wie sie abgearbeitet werden.
> Also z.b.
>
1: | for(int=i;i<5;i++)
| 2: | for(int=j;j<5;j++)
| 3: | {
| 4: | m[i][j]=1
| 5: | if (....bedingung)
| 6: |
| 7: | } |
> Hoffe es ist jetzt besser verständlich.
Vielmehr 'überhaupt' verständlich
Karl hat ja schon einiges zur fehlerhaften Syntax gesagt, daher will ich nur nochmal kurz auf die Semantik von for-Schleifen eingehen:
for(<init> ; <cond> ; <step>) { <block> }
Bei so einer for-Schleife wird immer zuerst der <init> Teil einmal ausgeführt. Üblicherweise definiert man dort nur eine Laufvariable und deren Startwert wie in deinem Beispiel. Als nächstes wird die Bedingung <cond> überprüft. Der Code in <block> wird dann ausgeführt, falls die Bedingung wahr gewesen ist. Nachdem <block> fertig abgearbeitet ist wird der Code in <step> ausgeführt. Hier wird häufig nur die Laufvariable um eins hoch oder runter gezählt. Anschließend wird wieder die Bedingung <cond> überprüft und entsprechend <block> ausgeführt oder nicht. Das ganze wiederholt sich solange, bis die Bedingung irgendwann falsch wird, dann geht es weiter mit dem Code der nach der for-Schleife steht (also auch nach <block>).
Was das Zusammenspiel von mehreren for-Schleifen betrifft, so brauchst du hier nur jede einzelne für sich betrachten. Sind zwei Schleifen nacheinander definiert for( ; ; ) {...} for (; ; ) {... }, dann wird die erste Schleife nach obigem Verfahren ausgewertet, bis ihre Bedingung falsch wird. Erst danach beginnt die Abarbeitung der zweiten Schleife.
In deinem Beispiel hast du sogenannte verschachtelte Schleifen, was aber vom Prinzip her ganz genauso funktioniert. Es wird also zuerst i mit einem Startwert belegt, dann <block> ausgeführt, wobei <block> hier eben eine zweite Schleife beinhaltet. Diese zweite Schleife läuft über die Variable j, so dass du letztlich mit m[1][1] beginnst, dann m[1][2], m[1][3], usw. abarbeitest. Solange wie j < 5 erfüllt ist. Am Ende der inneren Schleife (wenn also j = 5 ist) wird wieder mit der äußeren Schleife weitergemacht und i somit um eins erhöht auf i=2. Dann wird wieder der Codeblock der äußeren Schleife ausgeführt, also die zweite/innere Schleife. Hier beginnt man wieder bei j=1, also mit m[2][1], dann kommt m[2][2] usw.
Am besten du schreibst selbst mal ein paar Programme und spielst ein wenig mit diesen Konstrukten. Schleifen sind absolut essentiell in der Programmierung und du solltest wirklich verstehen was in diesem Beispiel passiert. Du kannst dir ja zum Beispiel mit printf("m[%d][%d]\n", i, j); ausgeben lassen welches Matrixfeld jeweils gerade besucht wird.
Hth,
Frank
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:57 Di 30.01.2007 | Autor: | votec |
Vielen Dank.....damit ist mir geholfen worden...
Ps: Es geht um eine Klausur bei der man mehrere Ant. zur auswahl hatte um eine Matrix zufüllen....
(leider nicht geschafft)
Danke nochmal :)
|
|
|
|