Potrójna pętla for, rysowanie spirali

0

Witam.
Mam program, który rysuje spirale i muszę zrozumieć na jakiej zasadzie on działa, wszystko rozumiem, znam ten język, tylko od zawsze mam problem z pętlami.
Czy ktoś pomógłby mi zrozumieć to? Rozumiem z tego tyle: za pierwszym obrotem program ustala "pozy", pozniej "pozx" gdyż modulo tak twierdzi (chyba że modulo z 0 to nie 0?) i pozniej znowu ustawia sie Y a pozniej X. Wiem, że i,j,k maja takie wartosci, żeby spirala się ładnie kręciła, ale próbuje zrozumieć dlaczego akurat to są te wartości. Mógłby ktoś mi z tym pomóc? Będę wdzięczmy.

 #include <stdio.h>
#include <stdlib.h>

int main()
{
    #define Y 22
    #define X 40
    char ekran[Y][X];
    int i,j,k;
    int kierunek=1;  //1 - w prawo, -1 - w lewo
    int ilosc=1,iloscmax=5;
    int pozx=10, pozy=10;  // pozycja startowa
// zerowanie funkcji
    for (j=0; j<Y; j++)
        for(i=0; i<X; i++)
            ekran[j][i]=' ';

ekran[pozy][pozx]='X';

for(k=0;k<5;k++)
    {

    for(j=0;j<4;j++)
        {
        for (i=0;i<1+j+4*k;i++)
            {
            if(j%2==0)
                {
                pozy=pozy-(1-j)*kierunek;
                ekran[pozy][pozx]='X';
                }
            else
                {
                pozx=pozx+(2-j)*kierunek;
                ekran[pozy][pozx]='X';
                }
            ilosc++;
            if (ilosc==iloscmax)
                break;
            }
        if (ilosc==iloscmax)
            break;
        }
    if (ilosc==iloscmax)
        break;
    }
    
    //Wyświetlanie funkcji
   for (j=0; j<Y; j++){
        for(i=0; i<X; i++)
            printf("%c",ekran[j][i]);
        printf("\n");}

    return 0;
}
0

Nie nadużywaj breaka! Wyobraź sobie, że nie ma możliwości użycia breaka i goto - i napisz to raz jeszcze! To nędzie dobre cwiczenie.

0

Ale ogólna zasada rysowania jest zawarta w ostatniej pętli for, czy w każdej po trochu ? Bo w tej ostatniej jest algorytm, bardzo prosty ale jakoś zasady działania nie mogę zrozumieć. Jeśli tylko znajdę chwilę na pewno spróbuje go napisać bez break ^^

0

Jak zauważysz, to na dane w ostatniej pętli wpływają liczby z pętli wcześniejszych, aczkolwiek widzę niewykorzystana wartość "kierunek". Nie wnikam, czy rysowane jest to co jest zamierzone :)

0

Nie no, kierunek zmienia liczbę na ujemna lub dodatnia, wiekszego znaczenia to nie ma, no ale jest.

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