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; }

by Kasprzak 2014-2015