algorytm.org

Schematy blokowe



Baza Wiedzy
wersja offline serwisu przeznaczona na urządzenia z systemem Android
Darowizny
darowiznaWspomóż rozwój serwisu
Nagłówki RSS
Artykuły
Implementacje
Komentarze
Forum
Bookmarki






Sonda
Implementacji w jakim języku programowania poszukujesz?

Schematy blokowe
Ocena użytkowników:***** / 1616
SłabyŚwietny 
Wpisany przez Michał Knasiecki, 01 sierpnia 2005 22:29

Schematy blokowe są tzw. metajęzykiem. Oznacza to, że jest to język bardzo ogólny, służy do opisywania algorytmów w taki sposób, by na jego podstawie można było je zaimplementować w każdym języku.
Częściami składowymi schematów blokowych są proste figury geometryczne, np. prostokąt, romb, koło, równoległobok itd... W tych figurach umieszczamy warunki oraz proste instrukcje, przy czym mogą być one związane z jakimś konkretnym językiem (np. symbolem instrukcji przypisania może być ":=" tak, jak w Pascalu lub "=" tak, jak w C) Jeśli tworząc schemat nie jesteśmy jeszcze zdecydowani w jakim języku będziemy pisali nasz program lub tworzymy schemat dla kogoś, to lepiej jest stosować notację bardziej symboliczną, np. instrukcję przypisania zapisywać jako strzałkę skierowaną od wartości przypisywanej do zmiennej.
Za chwilę przedstawię elementy składowe schematów blokowych, przedtem jednak powiem coś o narzędziach do ich konstruowania.
Zasadniczo najszybciej schematy pisze się na zwykłej kartce, pojawia się jednak problem, gdy schemat trzeba umieścić w jakimś dokumencie (np. dokumentacji projektu). Można wtedy skorzystać z popularnych edytorów tekstu (np. Word pod Windows lub KWord pod Linux). Mają one wbudowane opcje do tworzenia figur schematu, ale nie są one zbyt wygodne w użyciu.
Alternatywą dla nich są programy specjalnie przeznaczone do opisywania algorytmów. Jednym z nich są Magiczne Bloczki (281 KB). Jest to program autorstwa Rafała Barana, studenta informatyki na Politechnice Krakowskiej. Kontakt z autorem: biuro@erisoftware.pl, jego strona www to: http://erisoftware.pl. Program ten posiada bardzo przydatną opcję testowania działania algorytmu (podobnie jak w Debuggerze). Ta opcja może znacznie ułatwić życie, zwłaszcza początkującym programistom, którzy mają problemy z wyszukiwaniem błędów w programach.
Teraz przejdźmy do opisu schematów.

Image Poszczególne elementy schematu łączy się za pomocą strzałek. W większości przypadków blok ma jedną strzałkę wchodzącą i jedną wychodzącą, lecz są także wyjątki (omówię je poniżej).
Image Ta figura oznacza początek lub koniec algorytmu. W każdym algorytmie musi się znaleźć dokładnie jedna taka figura z napisem "Start" oznaczająca początek algorytmu oraz dokładnie jedna figura z napisem "Stop" oznaczająca koniec algorytmu. Najczęściej popełnianym błędem w schematach blokowych jest umieszczanie kilku stanów końcowych, zależnych od sposobu zakończenia programu. Jest to niedopuszczalne, w programie mamy przecież dokładnie jedną instrukcję "end." Blok symbolizujący początek algorytmu ma dokładnie jedną strzałkę wychodzącą a blok symbolizujący koniec ma co najmniej jedną strzałkę wchodzącą.
Image Jest to figura oznaczająca proces. W jej obrębie umieszczamy wszelkie obliczenia lub podstawienia. Proces ma dokładnie jedną strzałkę wchodzącą i dokładnie jedną strzałkę wychodzącą.

Image Romb symbolizuje blok decyzyjny. Umieszcza się w nim jakiś warunek (np. "x>2"). Z dwóch wybranych wierzchołków rombu wyprowadzamy dwie możliwe drogi: gdy warunek jest spełniony (strzałkę wychodzącą z tego wierzchołka należy opatrzyć etykietą "Tak") oraz gdy warunek nie jest spełniony. Każdy romb ma dokładnie jedną strzałkę wchodzącą oraz dokładnie dwie strzałki wychodzące.
Image Równoległobok jest stosowany do odczytu lub zapisu danych. W jego obrębie należy umieścić stosowną instrukcję np. Read(x) lub Write(x) (można też stosować opis słowny np. "Drukuj x na ekran"). Figura ta ma dokładnie jedną strzałkę wchodzącą i jedną wychodzącą.
ImageTa figura symbolizuje proces, który został już kiedyś zdefiniowany. Można ją porównać do procedury, którą definiuje się raz w programie, by następnie móc ją wielokrotnie wywoływać. Warunkiem użycia jest więc wcześniejsze zdefiniowanie procesu. Podobnie jak w przypadku zwykłego procesu i tu mamy jedno wejście i jedno wyjście.

Image Koło symbolizuje tzw. łącznik stronicowy. Może się zdarzyć, że chcemy "przeskoczyć" z jednego miejsca na kartce na inne (np. by nie krzyżować strzałek). Możemy w takim wypadku posłużyć się łącznikiem. Umieszczamy w jednym miejscu łącznik z określonym symbolem w środku (np. cyfrą, literą) i doprowadzamy do nie go strzałkę. Następnie w innym miejscu kartki umieszczamy drugi łącznik z takim samym symbolem w środku i wyprowadzamy z niego strzałkę. Łącznik jest często porównywany do teleportacji (z jednego miejsca na kartce do drugiego). Łączniki występują więc w parach, jeden ma tylko wejście a drugi wyjście.
Image Ten symbol to łącznik międzystronicowy. Działa analogicznie jak pierwszy, lecz nie w obrębie strony. Przydatne w złożonych algorytmach, które nie mieszczą się na jednej kartce. Uwaga: jeśli stosujemy oba typy łączników w schemacie, to najlepiej jest stosować liczby do identyfikowania jednych i litery do drugich. Dzięki temu nie dojdzie do pomyłki.

Teraz opiszemy przykładowy algorytm za pomocą schematu blokowego.
Zdefiniujmy iteracyjną wersję silni. Dla przypomnienia: rekurencyjna definicja silni wygląda następująco
silnia(0)=1
silnia(n)=n*silnia(n-1)
Image


Poprawiony: 16 lutego 2012 15:20
Komentarze
photo
-653 # lola 2009-09-25 14:01
powiem ci ze tak na serio to ta twoja praca nie jest zachwycajaca... znalazlam lepsze.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-325 # Sarna 2010-10-26 07:32
a gdzie znalazaś?
bo ja wogle sie w tym niemoge poapać:)
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-17 # ilo 2017-03-01 14:35
chyba "w ogóle"
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+11 # Natan Zwoliński 2017-10-05 08:20
Cytuję lola:
powiem ci ze tak na serio to ta twoja praca nie jest zachwycajaca... znalazlam lepsze.

Mi się podoba, najlepsza jaką znalazłem
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+360 # Adam 2009-10-02 22:34
Hmm... Kolega wyżej napisal ze nie jest zachwycajaca... Moze i mial racje, ale z drugiej strony opisujesz wszystko tak ze nawet ktos kto nie mial z algorytmami do czynienia polapalby sie w tym... Dlatego ode mnie 5 i oby tak dalej
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+35 # marika 2009-10-05 23:09
napisane bardzo dobrze, Miałam pierwsze wyklady o tym i nic nie rozumiałam, jak to przeczytałam to juz cos łapie
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-77 # Informatyk 2009-10-08 09:33
brawo, przydał sie przyklad silni
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-85 # Pan i Władca 2009-10-21 14:47
Podziękował:D Mam 4+ Dzięki tobie;]
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-92 # Pawelek_AsKaNa 2009-10-25 12:37
spoko jest, bo zrozumiałem schemat a nigdy go nie rozumiałem
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-149 # : 2009-12-01 22:14
Może znacie jakieś strony na których są zadnia z turbo pascala ze schematem i napisanym programem
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-194 # Pan B 2009-12-05 18:43
Niezle ale ja jestem z 2 gimy i szczerze mowiac nie rozumie a co chodzi juz w tym rysunku :/
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-137 # Eddy 2009-12-07 07:18
w pierwszym kółku podstawiasz za silnia:= licznik * silnia, biorą pod uwagę, że na początku licznik równy jest zero. Czyli z prostego rachunku wychodzi, że silnia = 0, więc już w każdym następnym kółku chyba będzie 0. Nie powinien być licznik 1 na początku ?
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-121 # Tomasz Lubiński 2009-12-07 23:30
Rzeczywiście na początku licznik jest równy zero. Ale przed pierwszą operacją mnożenia jest on zwiększany o 1, a więc w pierwszym mnożeniu mamy silnia := licznik * silnia = 1 * 1.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-47 # lola 2015-02-03 13:45
zrobiam zadanie z informatyki dzięki tej instrukcji :)
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-1 # Stachu 2019-07-05 15:49
Po co mnożyć przez jeden. Wystarczy przyjąć, że licznik=1 na początku (czyli pierwsze mnożenie będzie przez 2 o ile do niego dojdzie). Pierwsza iteracja jest wykonywana niepotrzebnie.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-126 # mys 2009-12-15 23:07
no ja też jestem z gim.. zaczęłam naukę na własną rękę i wszystko było ok do kiedy nie zobaczyłam tego schematu
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-91 # macbialy 2010-01-14 11:52
Podoba mi się bardzo twoja praca. Uważam, że można się wiele z niej nauczyć. Zachęcam innych do przeczytania jej.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-117 # iwonaa 2010-02-17 16:11
noo moze byc!!
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-95 # CombatCode 2010-02-23 14:34
Cytat:
w pierwszym kółku podstawiasz za silnia:= licznik * silnia, biorą pod uwagę, że na początku licznik równy jest zero. Czyli z prostego rachunku wychodzi, że silnia = 0, więc już w każdym następnym kółku chyba będzie 0. Nie powinien być licznik 1 na początku ?

Dobrze jest. Jeżeli licznik nie jest równy n to program dodaje do licznika + 1 i dopiero wykonuje mnożenie, nie odwrotnie.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-104 # lala 2010-03-12 14:14
co oznacza strzałka z zapisie?
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-80 # Romek 2010-04-14 02:46
Strzałka w bloczku oznacza instrukcję podstawienia, czyli licznik
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-85 # Dziwny człekxDD 2010-05-14 20:36
Na informatyce uczyliśmy sie tego ale nie zrozumiałem a dzięki tobie rozumiem
dzięki
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-81 # darek 2010-05-31 11:59
ehhh
algorytm algorytmem ale skad wziasc strzalke na dol????
hmmm to jest problem
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-74 # 19arek93 2010-06-11 08:26
Bardzo dobrze opisane.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-70 # Adam 2010-06-21 01:03
Jak dla mnie, to super praca. Wszystko (no prawie, bo chyba brakuje mi bloku np. decyzyjnego, którego właśnie szukałem), ładnie i w uporządkowany sposób ukazane. Jestem za, jak najwięcej takich prac dla potomnych, uczących się programowania jak i dla tych pragnących wiedzy
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-66 # Harry 2010-09-15 20:18
Fajna praca,akurat będę miał klasówkę z tego i czas na naukę...jak sądzę.
Jeszcze gdyby jakaś książka od informatyki by się przydała bo bez przerwy na lekcjach muszę przepisywać spore kawałki jakiś definicji, przez co nie mam czasu na grę
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-70 # Maces 2010-10-06 13:40
Świetna praca, wszystko jasne i czytelne.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-70 # Molcia 2010-10-07 16:57
Hmm, jak dla mnie wystarczające...aczkolwiek szkoda, że nie jest pisane jakimś konkretnym językiem (tu: Pascal lub C++) bo właśnie z tego muszę się nauczyć..;)

pozdro!..;)
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-59 # Romek 2011-01-06 16:09
Istnieje wiele wersji schematów blokowych. Tu przedstawiony jest najprostszy. W ścisłej definicji schematów blokowych jeśli w prostokątnym bloczku jest kilka instrukcji podstawienia to kolejność ich wykonywania nie musi być zgodna z kolejnością ich wypisywania w bloku. Tak więc instrukcje:
licznik
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-69 # jD 2011-02-16 20:17
"Najczęściej popełnianym błędem w schematach blokowych jest umieszczanie kilku stanów końcowych, zależnych od sposobu zakończenia programu."

Na pewno?? Nie wydaje mi się.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-53 # Jakub Konieczny 2011-02-26 00:33
W mojej implementacji schematów blokowych będzie obiektowość. Na razie są struktury, które raczej nie są widywane w takich programach:p
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-64 # kamilos 2011-03-13 21:15
wszystko jasne, ale co do interpretacji silni to powinna ona być liczona tylko dla liczb naturalnych. Przydałoby się wprowadzenie takiej zmiany, bo jak to mawiają: program powinien być idioto-odporny, i zwracać na początek tam gdzie jest pierwsza pętla także dla założenie liczb nienaturalnych, żeby przypadkiem nikomu nie zachciało się wstawić np. 0,5. Ale tak to schemat bardzo fajny. Gratuluje i pozdrawiam
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-49 # ja 2011-04-22 16:48
przecież jest, nie widzisz warunku n>=0? Dla 0 silnia wynosi 1 (sprawdź w kalkulatorze jak nie wierzysz), zaś jeżeli chodzi o zabezpieczenie przed liczbami zmiennoprzecink owymi to wystarczy że w programie n będzie zmienną typu całkowitego (int lub integer).
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-65 # Wiolcia 2011-03-29 17:08
A kto potrafi stworzyć algorytm posługiwania się czytnikiem kodów??? pomocy!!!!
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-11 # Romek 2016-11-20 23:56
Cytuję Wiolcia:
A kto potrafi stworzyć algorytm posługiwania się czytnikiem kodów??? pomocy!!!!

Podaję algorytm: wycelować promień lasera na kod i nacisnąć guzik jeśli jest.
Chodziło ci o algorytm odczytywania sygnałów generowanych przez odbijające się od kodów paskowych światło lasera? Następnie zamiany na serię zer i jedynek, a następnie rozszyfrowania który z kilkudziesięciu systemów kodów paskowych jest właśnie odczytywany, a następnie zweryfikowania cyfry kontrolnej i potem wysłania wyniku do komputera?
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-44 # Grzesiek Sz. 2011-05-09 18:30
Potrzebowałem odświeżyć sobie "na szybko" jak wyglądają schematy blokowe i dobrze, że jest taka strona, czuje się, że czytam własne notatki ;). Swoją drogą ciekaw jestem, czy istnieje jakiś standard, norma definiująca tę notację, czy jest to tak "przekazywane z ojca na syna".
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-40 # whistle 2011-10-18 16:26
Dzięki za tą stronę. Była bardzo przydatna
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-44 # Lukii 2011-11-09 08:28
Bloków stop może być kilka, są algorytmy rozgałęzione też.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-49 # YOCO 2011-12-28 09:48
Na niżej wymienionym forum znajduje się schemat blokowy obliczania silni, próbuję ustalić czy jest to rekurencja czy iteracja. Odpowiedzi są sprzeczne. Pomocy.
http://forum.p-zone.pl/silnia-vt20471.html
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-34 # Witamaster 2012-01-05 21:04
Iteracja - powtarzanie czynności.
Rekurencja - wywoływanie funkcji przez samą siebie.
Podany schemat zdecydowanie przedstawia iterację. Algorytm nie odwołuje się do żadnej funkcji, całość jest zawarta w jednej pętli.
Na forum ktoś napisał że nie da się opisać rekurencji schematem - to nie prawda.
Obie możliwości przedstawia artykuł: http://www.algorytm.org/algorytmy-arytmetyczne/silnia.html
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-40 # Michał1 2013-02-23 17:04
O co chodzi z tym licznikiem? Jaki to ma sens matematyczny? i gdyby ktoś mógłby mi wytłumaczyć jak to się ma z tą 1 i 0? Czy to jest jakiś algorytm czy tu chodzi o liczbę? Bo na przykład czemu 0 i 1 a nie 0 i 16? Bardzo wdzięczny bym był gdyby mi to ktoś wytłumaczył.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-36 # Smech 2013-05-07 12:55
barbzo przydatne
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-39 # Borneq 2013-05-27 12:29
Program "magiczne bloczki" świetny, jest debugger i eksport do schowka. Przydałyby się źródła.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-40 # Borneq 2013-05-27 12:42
oraz paski przewijania
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-39 # ja 2013-06-10 09:04
dzięki temu nauczyłem się i nie mam żadnych problemów
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-25 # czlek 2013-10-27 15:48
Cytuję CombatCode:
Cytat:
w pierwszym kółku podstawiasz za silnia:= licznik * silnia, biorą pod uwagę, że na początku licznik równy jest zero. Czyli z prostego rachunku wychodzi, że silnia = 0, więc już w każdym następnym kółku chyba będzie 0. Nie powinien być licznik 1 na początku ?

Dobrze jest. Jeżeli licznik nie jest równy n to program dodaje do licznika + 1 i dopiero wykonuje mnożenie, nie odwrotnie.
!
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-4 # Romek 2016-11-21 00:03
Jeżeli w jednym bloczku sa dwie instrukcje to wg. teorii moga byc wykonane w dowolnej kolejności. Przy jednej z tych kolejności wynik będzie nieprawidłowy. Blok [licznik = licznik +2; silnia = silnia*licznik] powinien byc rozdzielony na dwa bloki bo inaczej myli początkujących.
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
+7 # Gość 2013-10-27 23:35
Hejterzy są wszędzie !
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-38 # Andy 2014-01-15 18:14
Jeżeli n będzie równe 0 to wypisze Ci 0...a powinno być 1
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
0 # JacekA 2014-03-03 10:00
Yeaa dostałem 6 z programowania , dzięki stary :)))
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-31 # Endrju 2014-09-29 10:56
Cytuję Andy:
Jeżeli n będzie równe 0 to wypisze Ci 0...a powinno być 1

Cytuję JacekA:
Yeaa dostałem 6 z programowania , dzięki stary :)))

Cytuję Gość:
Hejterzy są wszędzie !

Cytuję czlek:
Cytuję CombatCode:
Cytat:
w pierwszym kółku podstawiasz za silnia:= licznik * silnia, biorą pod uwagę, że na początku licznik równy jest zero. Czyli z prostego rachunku wychodzi, że silnia = 0, więc już w każdym następnym kółku chyba będzie 0. Nie powinien być licznik 1 na początku ?

Dobrze jest. Jeżeli licznik nie jest równy n to program dodaje do licznika + 1 i dopiero wykonuje mnożenie, nie odwrotnie.
!

Cytuję JacekA:
Yeaa dostałem 6 z programowania , dzięki stary :)))

[
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-23 # tommi 2015-03-04 19:45
Bardzo szczegółowo wytłumaczone
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-6 # Katarzyna Budzioch 2015-09-23 16:50
Piękna strona, bardzo pomaga moim uczniom na lekcjach :)
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-1 # Wriku 2016-11-22 17:11
Dzięki nareszcie rozumiem algorytmy :)
Odpowiedz | Odpowiedz z cytatem | Cytować
photo
-5 # Ravel 2017-08-01 08:05
Prosto i fajnie. Zrozumiałe po pierwszym czytaniu dla laika. Tak, trzymaj. :)
Odpowiedz | Odpowiedz z cytatem | Cytować
Dodaj komentarz