To jest stara wersja strony!
Opis pseudokodu
Stosujemy wcięcia zgodnie z poziomami zagnieżdżania się kodu.
Wszystkie zmienne typów prymitywnych piszemy małą literą.
Wszystkie zmienne będące strukturami złożonymi piszemy dużą literą.
Wprowadzamy symbol nieoznaczony nil.
Zmienne
Nie deklarujemy/definiujemy zmiennych lokalnych funkcji.
Jeżeli zachodzi potrzeba wprowadzenia nowej zmiennej po prostu to robimy.
Każda zmienna jest widzialna w zakresie całej funkcji, wyjątkiem są:
Zmienne globalne, które definiujemy w następujący sposób
global j
-
Przypisanie wartości do zmiennej wykonujemy operatorem
:=:
j := 2
j := j+1
a := j
Komentarze
Operatory
Dostępne są podstawowe operatory arytmetyczne + - / *
Dostępne są również następujące operatory: % (modulo), ^ (potęgowanie), | (dzielenie całkowite)
Tablice
Nazwy tablic piszemy dużymi literami.
Numerowanie elementów tablic rozpoczynamy od 1.
Do danego elementu tablicy odnosimy się podając jego indeks w nawiasach kwadratowych po nazwie tablicy:
A[1] # pierwszy element tablicy
A[i] # i-ty element tablicy
A[i-1] # i-1 element tablicy
Długość tablicy jest zwracana przez funkcję
length:
n := length(A) # teraz n przechowuje długość tablicy, jest to jednocześnie indeks jej ostatniego elementu.
Nie alokujemy/dealokujemy pamięci dla tablic. Zakładamy że jest to robione automatycznie.
Wyznaczanie podtablicy jest możliwe przy pomocy trzykropka:
Wypełnij A ciągiem kolejnych liczb pierwszych od 2 do 17
B := A[3...length(A)-1] # Teraz B zwiera następujące wartości: 5,7,11,13
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:
func SEARCH(A, a, b)
...
instrukcje wewnątrz funkcji wraz z wcięciami
...
endfunc
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:
a := SEARCH(A,i,j)
Zakładamy że funkcja zwracająca wartość zwraca ją w postaci
niestałej referencji, wtedy możliwy staje się zapis:
c := funkcja(A)
funkcja(B) := c
lub po prostu:
funkcja(B) := funkcja(A)
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:
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
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:
MAX(a,b,c)
if (a > b) and (a > c)
return a
elseif (a <= b) and (a > c)
return b
endif
return c
endfunc
Pętle
Działanie każdej pętli może zostać przerwane w dowolnym momencie przy pomocy instrukcji break.
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:
Podanie kroku jest opcjonalne. Domyślną wartością kroku jest 1.
Przykładowa pętla
for:
for zmienna in 7...17 step 2
wypisz zmienna na ekran
endfor
Powyższa pętla wypisze na ekran liczby: 7,9,11,13,15,17
while