Przejdź do treści

Kwadrat Sierpińskiego

Opis problemu

Kwadrat Sierpińskiego (inaczej Dywan Sierpińskiego), to fraktal podobny do Trójkąta Sierpińskiego. Główna różnica jest taka, że podstawową figurą jest kwadrat.

Specyfikacja

Dane

  • stopień - stopień kwadratu Sierpińskiego
  • długość - długość boku głównego kwadratu

Rozwiązanie

Pseudokod

procedura KwadratSierpińskiego(stopień, długość):
    1. Jeżeli stopień = 0, to:
        2. Dla i := 1 do 4, wykonuj:
            3. Przód(długość)
            4. Lewo(90)
        5. Zakończ
    6. Dla i := 1 do 4, wykonuj:
        7. Dla j := 1 do 2, wykonuj:
            8. Przód(długość / 3)
            9. KwadratSierpińskiego(stopień - 1, długość / 3)
        10. Przód(długość / 3)
        11. Lewo(90)

Schemat blokowy

%%{init: {"flowchart": {"curve": "linear"}, "theme": "neutral"} }%%
flowchart TD
    START(["KwadratSierpińskiego(stopień, długość)"]) --> K1{stopień = 0}
    K1 -- PRAWDA --> K2p[i := 1]
    K2p --> K2{i <= 4}
    K2 -- PRAWDA --> K3["Przód(długość)\nLewo(90)"]
    K3 --> K2i[i := i + 1]
    K2i --> K2
    K2 -- FAŁSZ --> STOP([STOP])
    K1 -- FAŁSZ --> K6p[i := 1]
    K6p --> K6{i <= 4}
    K6 -- PRAWDA --> K7p[j := 1]
    K7p --> K7{j <= 2}
    K7 -- PRAWDA --> K8["Przód(długość / 3)\nKwadratSierpińskiego(stopień - 1, długość / 3)"]
    K8 --> K7i[j := j + 1]
    K7i --> K7
    K7 -- FAŁSZ --> K10["Przód(długość / 3)\nLewo(90)"]
    K10 --> K6i[i := i + 1]
    K6i --> K6
    K6 -- FAŁSZ ---> STOP

Implementacja

C++

Python

Blockly