1. | Sieci działań | zasady tworzenia graficznej postaci algorytmów w postaci tzw "sieci działań", zwanej również "schematem blokowym". |
2. | Instrukcje | Porównanie typowych instrukcji w kilku językach programowania:
Instrukcja złożona Instrukcja warunkowa prosta - if-then Instrukcja warunkowa złożona - if-then-else Instrukcja wyboru - case Pętla ze sprawdzaniem warunku na początku - while Pętla ze sprawdzaniem warunku na końcu - repeat Pętla z licznikiem - for |
Sieć działań jest graficznym sposobem opisu algorytmów. Charakteryzuje się dużą czytelnością i łatwością analizy algorytmów. Poniżej w tabeli przedstawione są najczęściej stosowane symbole w sieciach działań.
Sieci działań często określa się nazwą "schemat blokowy". Moim zdaniem nie odpowiada to ich istocie. Schematy blokowe dotyczą raczej opisu urządzeń (np. schemat blokowy komputera), a nie czynności.
Początek algorytmu. Wewnątrz symbolu wpisuje się zwykle słowo "START" lub nazwę podprogramu. W algorytmie może wystąpić tylko jeden taki symbol. | |
Zakończenie algorytmu. Wewnątrz symbolu wpisuje się zwykle słowo "STOP" lub "WRÓĆ", "RETURN" (dla podprogramów). W algorytmie może wystąpić wiele takich symboli. | |
Linie ze strzałkami określają kolejność wykonywanych czynności w algorytmie. Linii tych nie wolno rozgałęziać, natomiast mogą się schodzić w jednym punkcie (węźle). | |
Pierwszy symbol oznacza ogólnie operację wejścia/wyjścia. Wygodniej jest jednak odróżnić kierunek wymiany danych.
Drugi symbol oznacza operacje wejściowe (np. dane z klawiatury, z pliku lub parametry wywołania procedury). Trzeci symbol oznacza operacje wyjściowe (np. na ekran, drukarkę lub do pliku). |
|
Instrukcja warunkowa. Jest to jedyny sposób rozgałęzienia sieci działań. Wewnątrz symbolu wpisuje się wyrażenie warunkowe. Wychodzą z symbolu dwie ścieżki oznaczone jako T (tak, prawda) oraz N (nie, fałsz). Jeżeli wyrażenie jest rozbudowane, to można symbol rozszerzyć tak, aby zmieścić zapis wzoru. | |
Odmiana instrukcji warunkowej oznaczająca wybór dalszej ścieżki zależnie od wartości zmiennej lub wyrażenia. Odpowiada ciągowi instrukcji warunkowych ale pozwala na bardziej zwarty zapis algorytmu i programu. | |
Symbol "przetwarzanie danych". Wewnątrz opisuje się czynności przetwarzania danych, najczęściej za pomocą wzorów lub tekstu. | |
Wywołanie podprogramu. Wewnątrz zwykle wpisuje się nazwę podprogramu i parametry wywołania. | |
Łączniki umożliwiają połączenie odległych fragmentów sieci działań. Stosowane są przy dużych sieciach działań. Pierwsza para przedstawia łączniki wewnątrzstronicowe, druga międzystronicowe. Wewnątrz symbolu należy wpisać etykietę łącznika (np. litera lub cyfra), a w łączniku międzystronicowym również numer strony, do której prowadzi połączenie. | |
Komentarze, czyli opisy różnych elementów sieci. Można w ten sposób zaznaczać np. istotne, węzłowe miejsca w programie lub dodatkowo opisać niektóre czynności. | |
Bliżej nieokreślony ciąg instrukcji. Stosowany we wstępnych etapach konstruowania algorytmu. | |
Symbol pętli typu for. Pętle konstruuje się zwykle przy pomocy instrukcji warunkowej. Jednak dla pętli for (zwłaszcza zagnieżdżonych) prowadzi do dość skomplikowanych i nieczytelnych struktur sieci. Ten symbol znacznie upraszcza sieć działań. |
Poniżej przedstawiam podstawowe instrukcje w językach Pascal, C++, Java(Java Script) i PHP . Warto zauważyć niemal identyczną postać instrukcji w językach C++, Java Script i PHP.
W instrukcjach typu pętle lub warunki często norma języka przewiduje pojedyńczą instrukcję. Jeżeli chcemy użyć dłuższego ciągu instrukcji, to należy go przekształcić w tzw. instrukcję złożoną (blok instrukcji).) |
Pascal | C++ | Java Script | PHP |
---|---|---|---|
begin Instrukcja1; Instrukcja2; ... Instrukcjan end; | { Instrukcja1; Instrukcja2; ... Instrukcjan; } | { Instrukcja1; Instrukcja2; ... Instrukcjan; } | { Instrukcja1; Instrukcja2; ... Instrukcjan; } |
Jeżeli warunek W jest spełniony to wykonaj instrukcję, w przeciwnym wypadku nie rób nic. |
Pascal | C++ | Java Script | PHP |
---|---|---|---|
if x>0 then Instrukcja; ________________________ if x>0 then begin CiągInstrukcji end; | if (x>0) Instrukcja; ________________________ if (x>0) { CiągInstrukcji; } | if (x>0) Instrukcja; ________________________ if (x>0) { CiągInstrukcji; } | if ($x>0): CiągInstrukcji; endif; ________________________ if ($x>0) { CiągInstrukcji; } |
Jeżeli warunek W jest spełniony to wykonaj instrukcję 1, w przeciwnym wypadku wykonaj instrukcję 2. |
Pascal | C++ | Java Script | PHP |
---|---|---|---|
if x>0 then Instrukcja1 else Instrukcja2; ________________________ if x>0 then begin CiągInstrukcji1 end else begin CiągInstrukcji2 end; | if (x>0) Instrukcja1; else Instrukcja2; ________________________ if (x>0) { CiągInstrukcji1; } else { CiągInstrukcji2; } | if (x>0) Instrukcja1; else Instrukcja2; ________________________ if (x>0) { CiągInstrukcji1; } else { CiągInstrukcji2; } | if ($x>0): CiągInstrukcji1; else: CiągInstrukcji2; endif; ________________________ if ($x>0) { CiągInstrukcji1; } else { CiągInstrukcji2; } |
Jeżeli x=s1 to wykonaj Instr 1, jeżeli x=s2 to wykonaj Instr 2, itd. Jeżeli wartość x nie jest wymieniona, to wykonaj Inne Testowana jest wartość wyrażenia (lub zmiennej) typu porządkowego przez porównanie ze stałymi s1, s2 itd. Jeżeli nie zostanie znaleziona, to nastąpi przejście do frazy else / default, o ile ona występuje. Rzeczywiste działanie instrukcji wyboru w Pascalu i w pozostałych językach nieco się różni. W Pascalu po wykonaniu wskazanej instrukcji następuje wyjście za instrukcję wyboru, natomiast w C++, JS i PHP wykonywane są kolejne instrukcje (należące do następnej frazy case). Wyjście ze struktury instrukcji wyboru należy wymusić poleceniem break; |
Pascal | C++ | Java Script | PHP |
---|---|---|---|
case wyrażenie of s1: Instrukcja1; s2: Instrukcja2; s3: Instrukcja3; ... else Inne end | switch (wyrażenie) { case s1: CiągInstr1; break; case s2: CiągInstr2; break; case s3: CiągInstr3; break; ... default: Inne; } | switch (wyrażenie) { case s1: CiągInstr1; break; case s2: CiągInstr2; break; case s3: CiągInstr3; break; ... default: Inne; } | switch ($wyrażenie): case s1: CiągInstr1; break; case s2: CiągInstr2; break; case s3: CiągInstr3; break; ... default: Inne; endswitch; ________________________ switch ($wyrażenie) { case s1: CiągInstr1; break; case s2: CiągInstr2; break; case s3: CiągInstr3; break; ... default: Inne; } |
Dopóki wyrażenie w jest prawdziwe wykonuj Instrukcję Warunek powtarzania pętli jest sprawdzany przed wejściem do niej. Z tego powodu zmienne wykorzystywane w wyrażeniu warunkowym muszą być określone przed instrukcją pętli. Jeżeli warunek jest fałszywy przy pierwszym testowaniu, to w ogóle nie nastąpi wykonanie pętli. |
Pascal | C++ | Java Script | PHP |
---|---|---|---|
while x<>0 do Instrukcja; ________________________ while x<>0 do begin CiągInstrukcji end | while (x!=0) Instrukcja; ________________________ while (x!=0) { CiągInstrukcji; } | while (x!=0) Instrukcja; ________________________ while (x!=0) { CiągInstrukcji; } | while ($x!=0): CiągInstrukcji; endwhile; ________________________ while ($x!=0) { CiągInstrukcji; } |
Powtarzaj Instrukcje aż do spełnienia warunku w.(Pascal) Istotną różnicą między językami jest znaczenie wyrażenia warunkowego: - w Pascalu jest to warunek zakończenia pętli, - w C++, PHP i JS jest to warunek kontynuacji pętli. Ilustrują to sieci działań. Ze względu na tą różnicę w celu uzyskania takiego samego efektu w Pascalu i językach C++, JS i PHP należy w tych drugich odwrócić warunek. |
Pascal | C++ | Java Script | PHP |
---|---|---|---|
repeat CiągInstrukcji until x=0; | do CiągInstrukcji; while (x!=0); | do CiągInstrukcji; while (x!=0); | do CiągInstrukcji; while ($x!=0); |
Pascal: Dla i zmienniającego się od wartości początkowej (wp) do wartości końcowej (wk) z krokiem 1 wykonuj Instrukcję W Pascalu istnieje druga wersja z krokiem -1 (zamiast to należy wpisać downto). W językach C++, JS i PHP jej działanie jest inne, bardziej uogólnione: for(inicjacja ; warunek ; modyfikacja) Instrukcja; Wykonaj instrukcje inicjujące. Następnie, dopóki warunek jest spełniony wykonuj Instrukcję i Instrukcje modyfikujące Taka postać instrukcji jest bardzo elastyczna i pozwala na realizację dość skomplikowanych i nietypowych pętli. |
Pascal | C++ | Java Script | PHP |
---|---|---|---|
for i:=1 to 20 do Instrukcja; ________________________ for i:=1 to 20 do begin CiągInstrukcji end; | for(i=1; i<=20 ;i++) Instrukcja; ________________________ for(i=1; i<=20 ;i++) { CiągInstrukcji; } | for(i=1; i<=20 ;i++) Instrukcja; ________________________ for(i=1; i<=20 ;i++) { CiągInstrukcji; } | for($i=1; $i<=20 ;$i++) Instrukcja; ________________________ for($i=1; $i<=20 ;$i++) { CiągInstrukcji; } |
Instrukcja pę tli foreach występuje tylko w języku PHP. Daje możliwość obróbki wszystkich elementów tablicy bez znajomości kluczy lub indeksów. Dla wszystkich elementów tablicy wykonaj Instrukcję Taka postać pętli for wynika z nietypowej konstrukcji tabel w PHP. |
Pascal | C++ | Java Script | PHP |
---|---|---|---|
nie istnieje | nie istnieje | nie istnieje | foreach($tablica as $wartość) { CiągInstrukcji; } ________________________ foreach($tablica as $klucz => $wartość) { CiągInstrukcji; } |