Podstawy algorytmiki
Schemat blokowy albo 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ń.
|
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ń. |
Instrukcje 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.
1. Instrukcja złożona (blok, ciąg instrukcji)
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;
}
|
2. Instrukcja warunkowa prosta - "if-then"
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;
}
|
3. Instrukcja warunkowa złożona- "if-then-else"
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;
}
|
4. Instrukcja wyboru - "case"
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;
}
|
5. Pętla ze sprawdzaniem warunku na początku - "while"
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;
}
|
6. Pętla ze sprawdzaniem warunku na końcu - "repeat"
Powtarzaj Instrukcje aż do spełnienia warunku w.(Pascal) Powtarzaj Instrukcje dopóki warunek w jest spełniony.(C++, JS i PHP)
Ponieważ warunek pętli sprawdzany jest na końcu, to jej treść zostanie wykonana przynajmniej raz. 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);
|
7. Pętla z licznikiem - "for"
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;
}
|
8. Pętla dostępu do tablic - "foreach"
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;
}
|
|