webForumDet fria alternativet

FOR-sats på FOR-sats osv

C/C++

3 svar · 447 visningar · startad av Rulle

Medlem sedan juni 2000166 inlägg
Frågan#1

Hur kan svaret bli som det blir ??
Kan någon förklara på ett enkelt sätt.
Första svaret fattar jag, men hur kommer dom andra till ??

#include <iostream.h>
void main()
{
const int n = 2;
int count = 0, i, j, k;
for (i = n; i >= 0; i--)
for (j = 0; j <= n; j++)
for (k = 0; k <= n; k++)
if (i + j + k == n)
{
count++;
cout<<"i= "<< i <<" j=" << j << " k=" << k<<endl;
}
cout<<"Count:"<< count<< endl;
}
Svar:
i= 2 j=0 k=0
i= 1 j=0 k=1
i= 1 j=1 k=0
i= 0 j=0 k=2
i= 0 j=1 k=1
i= 0 j=2 k=0
Count:6

Medlem sedan nov. 200238 inlägg
#2

Om du kommenterar bort if-satsen blir svaret annorlunda.
If-satsen gör att endast dom rader som jag markerat med fetstil skrivs ut. Det kanske är lättare att förstå svaret nu?

i= 2 j=0 k=0
i= 2 j=0 k=1
i= 2 j=0 k=2
i= 2 j=1 k=0
i= 2 j=1 k=1
i= 2 j=1 k=2
i= 2 j=2 k=0
i= 2 j=2 k=1
i= 2 j=2 k=2
i= 1 j=0 k=0
i= 1 j=0 k=1
i= 1 j=0 k=2
i= 1 j=1 k=0
i= 1 j=1 k=1
i= 1 j=1 k=2
i= 1 j=2 k=0
i= 1 j=2 k=1
i= 1 j=2 k=2
i= 0 j=0 k=0
i= 0 j=0 k=1
i= 0 j=0 k=2
i= 0 j=1 k=0
i= 0 j=1 k=1
i= 0 j=1 k=2
i= 0 j=2 k=0
i= 0 j=2 k=1
i= 0 j=2 k=2
Count:27

Medlem sedan juni 2000166 inlägg
#3

Lite

lättare blev det.
Men hur går det till när sista FOR-satsen kommit upp till 2 och sedan nollställs ??

Medlem sedan nov. 200238 inlägg
#4

Jag är ingen pedagog så jag har lite svårt att föklara med ord, men jag gör ett försök.

Den sista for-satsen körs i sin helhet varje gång den näst sista for satsen kör ett steg.
En for är uppbyggd så här:
for(initiering (körs en gång) , validering för att fortsätta , exekvera efter varje loop)

initieringen för k i sista satsen körs i varje loop för j, och det är då k nollställs.

Nu fattar jag knappt själv vad jag skrivit och vet inte heller om det var detta du frågade efter.

254 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
129 ms — hämta tråd, inlägg och bilagor (db)
123 ms — ändringar (db)