zagniezdzona petla

0

witam. mam oto taki program:
#include <iostream>
main()
{
using namespace std;
int i, m;
int dlugosc_linii = 3 ;
for (i=0 ; i < 4 ; i=i+1)
{
for(m = 0 ; m < 10 ; m=m+1)
{
cout << "*" ;
if(m > dlugosc_linii)break;
}
cout<< "\nKntynuujemy zewnetrzna petle"
<< "for dla i= "
<< i <<"\n";
}
}
wynikiem tego programu jest:


Kontynuujemy zewetrzna petle for dla i = 0


Kontynuujemy zewetrzna petle for dla i = 1


Kontynuujemy zewetrzna petle for dla i = 2


Kontynuujemy zewetrzna petle for dla i = 3


i mam problem bo na moje rozumowanie powinny byc po trzy giwazki a nie po 5 bo ta zagniezdzona petla konczy sie jak m > dlugosc_lini czyli 3 wiec gwiazdek powinno byc 3 a nie 5. Czy moze mi ktos wytlumaczyc dlaczego jest 5 gwiazdek a nie 3? bo nie daje mi to spokoju

0

Jakos tak z wyliczen wychodzi...
Dlugosc linni to 3, a m ma poczatkowa wartosc 0. Dla m =0,1,2,3 warunek nie jest spelniony (juz +1), a poza tym warunek masz za wypisaniem piatego znaku ;] (dla m=4) .

0

nie czaje;[

0

nie czaje;[

flabra ma racje.
Jak nie rozumiesz to wez kartke i olowek i pisz sobie po kolei wartosci zmiennych [szczegolnie wartosci "m";p] po kolejnych komendach i Ci wyjdzie dlaczego masz 5 gwiazdek a nie 3;p
Jesli czujesz sie na silach to wez sie za debuggowanie [F7 i F8 w BCB 6.0]. To Ci pokaze krok po kroku co wykonuje program, to cos jak... zwolnione tempo";)

0

no ale przeciez wyraznie pisze ze ta zagniezdzona petla skonczy sie po 3 razach bo jest tam m>dlugosc_linii i zaraz po tym jest brak wiec po wykonaniu 3 razy tej petli ona sie konczy! kompletnie tego nie rozumiem,wkurza mnie to;[

0

Czego nie czaisz?

(3>3) tego, ze ten warunek jest falszywy z zalozenia (==0) ?

czy moze

cout <<
if()

tego, ze najpierw wypisuje, a potem dopiero sprawdza warunek ????

// masz problem nie z programem, tylko z logicznym mysleniem.

0

nie czaje tego ze ze sa 5 gwiazdek a powinno byc 3! bo ta zagniezdzona petla wykona sie 3 razy a nie 5.

0

no to, pobawmy sie w kompilator :P.

for(m = 0 ; m < 10 ; m=m+1)
{
cout << "*" ;
if(m > dlugosc_linii)break;
}

/* gronki's asm ;) */

m INT 0 //hje, hje, hje ;)

wyswietl "*"
czy m (0) jest wieksze niz 3?
nie -> nie wychodzimy, idziemy dalej

zwieksz m o 1
wyswietl "*"
czy m (1) jest wieksze niz 3?
nie -> nie wychodzimy, idziemy dalej

zwieksz m o 1
wyswietl "*"
czy m (2) jest wieksze niz 3?
nie -> nie wychodzimy, idziemy dalej

zwieksz m o 1
wyswietl "*"
czy m (3) jest wieksze niz 3?
nie (bo jest rowne) -> nie wychodzimy, idziemy dalej

zwieksz m o 1
wyswietl "*"
czy m (4) jest wieksze niz 3?
tak -> wyjdz

rozjasnilem nieco? :)

0

dzieki, juz rozumiem;]]

0

kto wyjasni krok po kroku dzialanie kompilatora w tej petli bo nie rozumie , ktory element inkrementuje tutaj *gwiazdke?

#include <iostream>

int main()
{
for( int pierwszaZmienna = 1; pierwszaZmienna <= 10; ++pierwszaZmienna )
{
for( int x = 1; x <= pierwszaZmienna; ++x )
std::cout << "*";

    std::cout << std::endl;
} //for
return 0;

}

0

Więc za pierwszym razem w petli for masz zmienna "pierwszaZmienna" ktora jest rowna 1
następnie wchodzi do drugiej petli bo warunek pierwszy jest spelniony
i w drugiej petli x=1 <= pierwszejZmiennej czyli 1 - wiec rysuje "*"
x sie zwieksza, i sprawdza czy warunek nadal jest spelniony, nie jest bo x = 2, x<= 1 wiec wychodzi z for do for'a glownego

za drugim razem pierwsza zmienna wynosi 2
wiec jak wejdzie do nastepnej petli for to masz 1<=2 wiec wypisze Ci jedna "*", i potem zwiekszy x o +1 i bedzie 2<=2 -> to jest rowniez prawda wiec masz druga gwiazdke itd.

1 użytkowników online, w tym zalogowanych: 0, gości: 1