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.
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).
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ą.
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ą.
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.
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ą.
Ta 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.
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.
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)
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.
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).
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ą.
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ą.
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.
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ą.
Ta 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.
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.
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)
Poprawiony: 16 lutego 2012 15:20
bo ja wogle sie w tym niemoge poapać:)
Mi się podoba, najlepsza jaką znalazłem
Dobrze jest. Jeżeli licznik nie jest równy n to program dodaje do licznika + 1 i dopiero wykonuje mnożenie, nie odwrotnie.
algorytm algorytmem ale skad wziasc strzalke na dol????
hmmm to jest problem
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ę
pozdro!..;)
licznik
Na pewno?? Nie wydaje mi się.
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?
http://forum.p-zone.pl/silnia-vt20471.html
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
Cytuję JacekA:
Cytuję Gość:
Cytuję czlek:
Cytuję JacekA:
[