Forum: PC-Programmierung Kurze Verständnisfrage Code


von Sven (Gast)


Lesenswert?

// AUFAGBE 5: Welchen Wert hat die Variable b nach Ablauf der 
dargestellten //Programmschleife?
int a, b=0;
 for(a=1;a<8;a++)
  if(a>5)
    b=b+a*a;

Der ausgegebene Wert beträgt 85.

b=0+6*6 => b= 36
b=36+7*7 => b= 85

aber wird a nicht auch auf 8 erhöht? in den Bedingungen steht ja, dass a 
um 1 erhöht wird, solange es kleiner als 8 ist. wennn a=7 ist und um 
eins erhöht wird, dann ist a= 8 und müsste es dann nicht heißen:

b=85+8*8 ?  Irgendwo habe ich einen Denkfehler.

von Joe F. (easylife)


Lesenswert?

for(a=1;a<8;a++)

heisst, die Schleife startet mit a=1 und läuft so lange durch, solange 
die Bedingung "a<8" (also a==7) erfüllt ist.
a wird immer am Schleifenende erhöht.
Danach erfolgt der Test auf a<8.
Nach der Schleife ist a in der Tat 8, aber die Anweisungen innerhalb der 
Schleife werden nicht mehr ausgeführt, sobald a 8 wird.

: Bearbeitet durch User
von Sven (Gast)


Lesenswert?

Joe F. schrieb:
> Nach der Schleife ist a in der Tat 8, aber die Anweisungen innerhalb der
> Schleife werden übersprungen, sobald a 8 wird.

Vielen Dank Joe.

Also "springt" das Programm aus der Schleife, wenn a=8 ist.

Zum Verständnis:

for(a=1;a<=8;a++)
  if(a>5)
    b=b+a*a;

Hier wäre das Ergebnis b=85+8*8, weil 8 noch in der Schleife ist, 
richtig?

MfG

von Joe F. (easylife)


Lesenswert?

Sven schrieb:
> Joe F. schrieb:
>> Nach der Schleife ist a in der Tat 8, aber die Anweisungen innerhalb der
>> Schleife werden übersprungen, sobald a 8 wird.
>
> Vielen Dank Joe.
>
> Also "springt" das Programm aus der Schleife, wenn a=8 ist.
>
> Zum Verständnis:
>
> for(a=1;a<=8;a++)
>   if(a>5)
>     b=b+a*a;
>
> Hier wäre das Ergebnis b=85+8*8, weil 8 noch in der Schleife ist,
> richtig?
>
> MfG

genau.


Man könnte die erst genannte Schleife sinngemäß auch so schreiben:
1
a = 1;
2
3
loop:
4
5
if(a>5)
6
    b=b+a*a;
7
8
a++;
9
if (a<8) goto loop;
10
11
(...)

: Bearbeitet durch User
von Diek (Gast)


Lesenswert?

Ja.

von Sven (Gast)


Lesenswert?

Ich habe noch ein weiteres Programm, bei dem sich mir eine Ähnliche 
Frage stellt:

AUFAGBE 2: Welche Ausgabe erzeugt das nebenstehende Programm in seiner 
letzten Zeile? Stellen Sie dazu eine Wertetabelle für i und n auf.
      // Wertetabelle: i | n

#include <stdio.h>
void main()
      {
      int n=0, i=0;
      for(i=0;i<30;i++)
      {
        if(i>20)break;
        n+=100;
        if(i<10)continue;
        n-=100;
     }
         printf("%i\n",n);
      }

Die Ausgabe in der letzten Zeile ist 1000,
aber wieso erhöht sich n? Müsste n sich nicht eigentlich vorerst im 
negativen Bereicht bewegen bei i=1 ? Weil 1<10 also n=n-100 oder nicht?

von Pedro C. (blaugelbweiss)


Lesenswert?

Solange i < 10 ist, werden immer 100 zu n addiert. Also wächst es bis 
auf 1000. Ab i = 10 werden zu n immer 100 addiert und gleich danach 
wieder 100 subtrahiert, also bleibt es bei 1000. Bei i > 20 wird die 
Schleife verlassen.
Am Ende ist also n gleich 1000 und i gleich 21.

von MarkAufDerSucheNachQuark (Gast)


Lesenswert?

Was hindert dich eigentlich daran, das Programm mit ein paar printf zur 
Ausgabe der Variablen zu versehen und laufen zu lassen?

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.