Nowa wersja
|
Poprzednia wersja
|
pl:dydaktyka:asd:cwiczenia:pseudokod [2010/02/27 17:38] kinio utworzono |
pl:dydaktyka:asd:cwiczenia:pseudokod [2019/06/27 15:50] (aktualna) |
* Stosujemy wcięcia zgodnie z poziomami zagnieżdżania się kodu. | * Stosujemy wcięcia zgodnie z poziomami zagnieżdżania się kodu. |
* Wszystkie zmienne typów prymitywnych piszemy małą literą. | * Wszystkie zmienne typów prymitywnych piszemy małą literą. |
* Wszystkie zmienne będące strukturami złożonymi (tablice, obiekty) piszemy dużą literą. | * Wszystkie zmienne będące strukturami złożonymi piszemy dużą literą. |
| * Wprowadzamy symbol nieoznaczony **nil**. |
| |
==== Zmienne ==== | ==== Zmienne ==== |
j := 2 | j := 2 |
j := j+1 | j := j+1 |
a := j | a := j |
| </code> |
| |
==== Komentarze ==== | ==== Komentarze ==== |
... | ... |
</code> | </code> |
| ==== Operatory ==== |
| * Dostępne są podstawowe operatory arytmetyczne + - / * |
| * Dostępne są również następujące operatory: % (modulo), ^ (potęgowanie), | (dzielenie całkowite) |
| |
===== Tablice ===== | ===== Tablice ===== |
* Numerowanie elementów tablic rozpoczynamy od **1**. | * Numerowanie elementów tablic rozpoczynamy od **1**. |
* Do danego elementu tablicy odnosimy się podając jego indeks w nawiasach kwadratowych po nazwie tablicy:<code> | * Do danego elementu tablicy odnosimy się podając jego indeks w nawiasach kwadratowych po nazwie tablicy:<code> |
A[0] # pierwszy element tablicy | A[1] # pierwszy element tablicy |
A[i] # i-ty element tablicy | A[i] # i-ty element tablicy |
A[i-1] # i-1 element tablicy | A[i-1] # i-1 element tablicy |
B := A[3...length(A)-1] # Teraz B zwiera następujące wartości: 5,7,11,13 | B := A[3...length(A)-1] # Teraz B zwiera następujące wartości: 5,7,11,13 |
</code> | </code> |
| ===== Funkcje ===== |
| * Definicję funkcji rozpoczynamy słowem **func**. |
| * Koniec definicji funkcji oznaczamy przy pomocy **endfunc**. |
| * Definiując funkcję specyfikujemy jedynie listę argumentów jakie przyjmuje. Nie specyfikujemy typu wartości jaką funkcja zwraca oraz typów argumentów. |
| * Argumenty do funkcji są przekazywane przez wartość. |
| * Szkielet przykładowej definicji funkcji (o nazwie search) wygląda następująco:<code> |
| func SEARCH(A, a, b) |
| ... |
| instrukcje wewnątrz funkcji wraz z wcięciami |
| ... |
| endfunc |
| </code> |
| * Funkcja może zwrócić dowolną wartość w dowolnym momencie. |
| * Zwrócenie wartości przez funkcję następuję przy pomocy słowa **return** po którym musi wystąpić wartość zwracana. |
| * Funkcje wywołujemy pisząc jej nazwę a następnie w okrągłych nawiasach listę argumentów rozdzielonych przecinkami:<code> |
| a := SEARCH(A,i,j) |
| </code> |
| * Zakładamy że funkcja zwracająca wartość zwraca ją w postaci **niestałej referencji**, wtedy możliwy staje się zapis:<code> |
| c := funkcja(A) |
| funkcja(B) := c |
| </code>lub po prostu:<code> |
| funkcja(B) := funkcja(A) |
| </code> |
===== Instrukcje warunkowe ===== | ===== Instrukcje warunkowe ===== |
| * Będziemy stosować głównie instrukcję **if-elseif-else-endif**. |
| * Instrukcje **elseif** oraz **else** są opcjonalne. |
| * Dostępne są następujące operatory relacji: =, !=, >, >=, <, < =. |
| * Warunki możemy łączyć przy pomocy następujących operatorów: |
| * **and** - binarny - zwraca prawdę jeżeli oba warunki są prawdziwe |
| * **or** - binarny - zwraca prawdę jeżeli przynajmniej jeden warunek jest prawdziwy. |
| * **xor** - binarny - zwraca prawdę jeżeli jeden z warunków jest prawdą a drugi fałszem. |
| * **not** - unarny - zwraca prawdę jeżeli warunek jest niespełniony. |
| * Przykładowe zastosowanie instrukcji warunkowej do określenia maksymalnej z pośród trzech wartości:<code> |
| func MAX(a,b,c) |
| if a > b |
| if a > c |
| return a |
| else |
| return c |
| endif |
| else |
| if b > c |
| return b |
| else |
| return c |
| endif |
| endif |
| endfunc |
| </code> |
| * Przy pomocy nawiasów okrągłych możemy grupować wyrażenia relacji, definiując równocześnie kolejności ich sprawdzania.\\ Powyższy kod może zostać przepisany także w następującej postaci:<code> |
| func MAX(a,b,c) |
| if (a > b) and (a > c) |
| return a |
| elseif (a <= b) and (a > c) |
| return b |
| endif |
| return c |
| endfunc |
| </code> |
| |
===== Pętle ===== | ===== Pętle ===== |
| * Działanie każdej pętli może zostać przerwane w dowolnym momencie przy pomocy instrukcji **break**. |
===== Obiekty i metody ===== | * Działanie każdej pętli może zostać przerwane i natychmiast wznowione przy pomocy instrukcji **continue**. |
| * Instrukcje **break** i **continue** odnoszą się tylko do najbardziej zagnieżdżonej pętli. |
| ==== for ==== |
| * Poprawna konstrukcja pętli **for** wymaga podania: |
| * nazwy zmiennej która będzie licznikiem w danej pętli, |
| * krańcowych wartości licznika. |
| * Podanie kroku jest opcjonalne. Domyślną wartością kroku jest **1**. |
| * Przykładowa pętla **for**:<code> |
| for zmienna in 7...17 step 2 |
| wypisz zmienna na ekran |
| endfor |
| </code> |
| * Powyższa pętla wypisze na ekran liczby: 7,9,11,13,15,17 |
| ==== while ==== |
| * Pętla **while** wykonuje kod tak długo jak długo jest spełniony warunek działania pętli. |
| * Przykład pętli **while** odpowiadający powyższej pętli **for**:<code> |
| zmienna := 7 |
| while zmienna <= 17 |
| wypisz zmienna na ekran |
| zmienna := zmienna + 2 |
| endwhile |
| </code> |