[C++] Gwiazdki w pętli

longworking
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 25 sty 2017, o 15:45
Płeć: Mężczyzna
Lokalizacja: Lublin

[C++] Gwiazdki w pętli

Post autor: longworking »

Mam taki kod i jego wnynik:

Kod: Zaznacz cały

#include <iostream>
using namespace std;

int x,y;

int main()
{
    for(x = 1; x <=6; x++)
    {
        for(y = 6; y>=x; y--)
          {
            cout << "*";
          }
        cout << endl;
    }
    return 0;
}


Staram się to zrozumieć i tworzę na prawdę dziwne rzeczy, żeby mnie olśniło i dlatego proszę o pomoc w wyprowadzenia z błędnego rozumienia i o wskazanie drogi. Moje próby wyglądają następująco:

jeżeli mamy 2 pętle, drugą zagnieżdżoną, to podstawiam pod nie wartości, zdaje sobie sprawę, że później warunki są błędne i różne od tego co mówią, ale staram się poprostu zrozumieć, jak to program liczy i jakie kroki wykonuje:

Kod: Zaznacz cały

x=1  |  1<=6  |  1+1
y=6  |  6>=1  |  6-1

(6)>=(1<=6)  

x=2  |  2<=6  |  2+1
y=5  |  5>=1  |  5-1

(5)>=(2<=6)

x=3  |  3<=6  |  3+1
y=4  |  4>=1  |  4-1

(4)>=(3<=6)

x=4  |  4<=6  |  4+1
y=3  |  3>=1  |  3-1

(3)>=(4<=6) // mam tutaj świadomość, że 3 nie jest większe lub równe 4, ale czy to nie jest jakiś warunek, gdzie mino wartości logicznej false, pętla nadal działa bo przyjmując że y>=x osiągnie wartość true ? w zasadzie to dla mnie największy kłopot.

x=5  |  5<=6  |  5+1
y=2  |  2>=1  |  2-1

(2)>=(5<=6)

x=6  |  6<=6  |  6+1
y=1  |  1>=0  |  1-1

(1)>=(6<=6)

albo w taki sposób:
1. (to jest wiersz pierwszy x=1; wykonuj dotąd dopóki x będzie większe lub równe 6; ) //1 pętla
{
(ilość gwiazdek y=6;) // 2 pętla mieszcząca się w pętli 1
{
wypisz ******
}
przejdź do drugiego wiersza;
}

2. (to jest wiersz drugi x=2; wykonuj dotąd dopóki x będzie mniejsze lub równe 6; dodaj 1)
{
(ilość gwiazdek y=5; wykonuj dotąd dopóki (y>=x) będzie większe lub równe 6, odejmij 1)
{
wypisz *****
}
przejdź do trzeciego wiersza;
}

3. (to jest wiersz trzeci x=3; wykonuj dotąd dopóki x będzie mniejsze lub równe 6; dodaj 1)
{
(ilość gwiazdek y=4; wykonuj dotąd dopóki y>=x będzie większe lub równe 6, odejmij 1)
{
wypisz ****
}
przejdź do czwartego wiersza;
}

4. (to jest wiersz czwarty x=4; wykonuj dotąd dopóki x będzie mniejsze lub równe 6; dodaj 1)
{
(ilość gwiazdek y=3; wykonuj dotąd dopóki y>=x będzie większe lub równe 6, odejmij 1)
{
wypisz ***
}
przejdź do piątego wiersza;
}

5. (to jest wiersz piąty x=5; wykonuj dotąd dopóki x będzie mniejsze lub równe 6; dodaj 1)
{
(ilość gwiazdek y=2; wykonuj dotąd dopóki y>=x będzie większe lub równe 6, odejmij 1)
{
wypisz **
}
przejdź do szóstego wiersza;
}

6. (to jest wiersz szósty x=6; wykonuj dotąd dopóki x będzie mniejsze lub równe 6; dodaj 1)
{
(ilość gwiazdek y=1; wykonuj dotąd dopóki y>=x będzie większe lub równe 6, odejmij 1)
{
wypisz *
}
przejdź do siódmego wiersza;

}

6. (to jest wiersz siódmy x=7; wykonuj dotąd dopóki x będzie mniejsze lub równe 6;)
{
(ilość gwiazdek y=1; wykonuj dotąd dopóki y<=x będzie mniejsze lub równe 6, odejmij 1)
{
wypisz *
}
przejdź do siódmego wiersza;
Bardzo proszę o dystans do mnie i do siebie, jak i cierpliwość w łopatologicznym tłumaczeniu, chcę to zrozumieć i mam świadomość, że to dla większości jest łatwe, a ja mam kłopot z myśleniem abstrakcyjnym, ale na prawdę, bardzo się staram.

Pozdrawiam
Ostatnio zmieniony 26 sty 2017, o 09:24 przez Afish, łącznie zmieniany 1 raz.
Powód: Staraj się lepiej dobierać nazwy tematów, tak by wskazywały o czym jest treść zadania. Poprawa wiadomości.
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C++] Gwiazdki w pętli

Post autor: kalwi »

A czemu po prostu sobie tego sprawdzisz prosto, kodem? Poza tym to jest w c++, nie c.

Kod: Zaznacz cały

#include <iostream>
using namespace std;
int main()
{
    int x,y;
    for(x = 1; x <=6; x++)
    {
        cout << "Wartosc x: " << x << endl;
        for(y = 6; y>=x; y--)
            cout << "Wartosc y: " << y << endl;
        cout << endl;
    }
    return 0;
}

Kod: Zaznacz cały

Wartosc x: 1
Wartosc y: 6
Wartosc y: 5
Wartosc y: 4
Wartosc y: 3
Wartosc y: 2
Wartosc y: 1

Wartosc x: 2
Wartosc y: 6
Wartosc y: 5
Wartosc y: 4
Wartosc y: 3
Wartosc y: 2

Wartosc x: 3
Wartosc y: 6
Wartosc y: 5
Wartosc y: 4
Wartosc y: 3

Wartosc x: 4
Wartosc y: 6
Wartosc y: 5
Wartosc y: 4

Wartosc x: 5
Wartosc y: 6
Wartosc y: 5

Wartosc x: 6
Wartosc y: 6
czy teraz widzisz co tu się dzieje?
longworking
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 25 sty 2017, o 15:45
Płeć: Mężczyzna
Lokalizacja: Lublin

[C++] Gwiazdki w pętli

Post autor: longworking »

Dzięki za szybką odpowiedź. Tak ale z nazwą C++, nie mogłem wysłać wątku.

Co do rozumienia muszę to przetrawić.

A czy mógłbyś mi wskazać w tym co napisałem, dokładnie w takim formacie błędne wartości, lub w tekście poprawić zwroty i wartości ?

Niestety, ale moja umiejętność uczenia się takich rzeczy, jest nieco pokrętna i dopóki sam tego nie zrozumiem w taki sposób w jaki ja to widzę, to trudno mi o rozumienie innych postaci.
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C++] Gwiazdki w pętli

Post autor: kalwi »

Ta druga linijka jest kiepska.

Kod: Zaznacz cały

2. (to jest wiersz drugi x=2; wykonuj dotąd dopóki x będzie mniejsze lub równe 6; dodaj 1)
{
(ilość gwiazdek y=5; wykonuj dotąd dopóki (y>=x) będzie większe lub równe 6, odejmij 1)
(ilość gwiazdek y=5; wykonuj dotąd dopóki (y>=x) będzie większe lub równe 6, odejmij 1)
powinno być
(y=6; wykonuj dotąd dopóki y>=x; odejmij 1)
longworking
Użytkownik
Użytkownik
Posty: 3
Rejestracja: 25 sty 2017, o 15:45
Płeć: Mężczyzna
Lokalizacja: Lublin

[C++] Gwiazdki w pętli

Post autor: longworking »

Dziękuję, za spełnioną prośbę, z napisaniem, tego tak jak chciałem.

Na podstawie Twojego wcześniejszego postu rozumiem, że:

Że na początku wykonywana jest 1 pętla i nadawana wartość x=1, po czym program wchodzi do drugiej pętli i wykonuje wszystkie instrukcje na zasadzie:

Kod: Zaznacz cały

y=6   |  6>=1  |  6- 1
y=5   |  6>=1  |  5- 1
y=4   |  6>=1  |  4- 1
y=3   |  6>=1  |  3- 1
y=2   |  6>=1  |  2- 1
y=1   |  6>=1  |  1- 1
później powraca do pętli pierwszej, bo wykonał drugą pętlę ze wszystkimi argumentami, a że w pierwszej pętli warunek jest x++ i x<=6 to do wartości 1 dodaje 1 i x na ten czas przybiera wartość 2 i na ten czas w drugiej pętli wykonywane są wszystkie instrukcje do spełnienia warunku y>=2

itd.

czy dobrze piszę ?
kalwi
Użytkownik
Użytkownik
Posty: 1931
Rejestracja: 29 maja 2009, o 11:58
Płeć: Mężczyzna
Lokalizacja: Warszawa
Podziękował: 145 razy
Pomógł: 320 razy

[C++] Gwiazdki w pętli

Post autor: kalwi »

tak, dobrze piszesz
ODPOWIEDZ