background image

Języki programowania II

Elementy języków programowania

Olsztyn 2005

Wojciech Sobieski

background image

Elementy JP

Języki  programowania  wymyślono  po  to,  by  można  było  dzięki  nim 
tworzyć  różnorodne  programy  komputerowe.  Oczekuje  się  również,  że 
tworzone  aplikacje  będą  wykonywać  swoje  zadania  w  sposób 
jednoznaczny i zgodny z określoną na etapie projektowania specyfikacją 
wymagań  -  języki  programowania  muszą  się  więc  opierać  na  ogólnie 
obowiązujących zasadach logiki i arytmetyki. Z tego też względu, można 
wyodrębnić  w  strukturach  różnych  języków  szereg  elementów 
uniwersalnych, spełniających w nich analogiczną rolę. 

background image

Elementy JP

1. Ściśle określony zbiór znaków i symboli. 

Używanie  znaków  niedozwolonych  spowoduje  wystąpienie  błędów 
podczas translacji kodu źródłowego. Zakres znaków obejmuje duże i małe 
litery alfabetu (rozróżniane bądź nie), cyfry oraz znaki specjalne i symbole 
wieloznakowe. Mimo, że wiele języków programowania posiada podobny 
zestaw znaków dopuszczalnych, niektóre z nich mogą mieć zupełnie inne 
znaczenie. Przykładem może być znak “//” - w FORTRANIE służący do 
łączenia łańcuchów tekstowych, zaś w PASCALU do oznaczenia wiersza 
komentarza. 

background image

Elementy JP

Zestaw  znaków i symboli dopuszczalnych 

w językach Fortran G77 oraz Free Pascal.

background image

Elementy JP

2. Skończona (zazwyczaj) liczba słów kluczowych i deklaratorów. 

Słowa  kluczowe  są  to  określone  zbiory  znaków  posiadające  konkretne 
znaczenie dla translatora (najczęściej są to wyrazy z języka angielskiego, 
np. WRITE, READ, PROGRAM, FOR, DO, PROCEDURE, FUNCTION, 
itd.). 

background image

Elementy JP

Zestaw słów kluczowych występujących 

w językach Fortran G77 oraz Free Pascal.

background image

Elementy JP

Bardzo  często  edytory  kodu  źródłowego  stosują  wyróżnienia  dla  słów 
kluczowych (pogrubienie czcionki lub kolory), co ułatwia jego pisanie i 
zmniejsza prawdopodobieństwo wystąpienia błędu. W przypadku braku 
automatycznego  wyróżnienia  należy  stosować  duże  i  małe  litery,  np. 
instrukcje pisać dużymi literami, a inne nazwy małymi. Nazwy takie jak 
SIN, COS, LOG, MOD, itd. nie są słowami kluczowymi lecz nazwami 
funkcji  wewnętrznych.  Oprócz  słów  kluczowych  w  językach 
programowania  występują  również  deklaratory,  czyli  słowa 
odpowiadające za określanie obiektów lub ich właściwości.

background image

Elementy JP

Edi

background image

Elementy JP

ConText

background image

Elementy JP

3. Ściśle określona struktura i zasady pisania kodu źródłowego. 

Kod źródłowy składa się z przynajmniej jednego modułu (programu), 
który  musi  mieć  sztywno  określoną  budowę.  Moduł  musi  posiadać 
wyraźnie  określony  początek  i  koniec,  obszary  deklaracji  obiektów  i 
typów  występujących  zmiennych  oraz  obszary  zawierające  bloki 
instrukcji,  funkcji  lub  procedur.  Budowa  kodu  źródłowego  zależy  w 
decydujący sposób od rodzaju języka i sposobu realizacji drogi punktu 
sterowania.

Zasady pisania kodów źródłowych w językach 

Fortran G77 oraz FreePascal.

background image

Elementy JP

Fortran

Pascal

1.Używanie jedynie znaków dopuszczalnych.

2.Brak rozróżnienia znaków pisanych małą lub 

wielką literą.

3.Znaków narodowych nie należy używać 

(nawet w komentarzach).

4.Nazwy (identyfikatory) stałych, zmiennych, 

podprogramów, funkcji, itp. powinny  
zaczynać się od litery i nie powinny być 
dłuższe niż 6 znaków (słowa kluczowe mają 
budowę identyfikatorów, ale mogą być 
dłuższe).

5.Treść instrukcji wpisuje się między 7 a 72 

kolumną. Nie ma obowiązku zaczynania od 7 
kolumny. Znaki za 72 kolumną są ignorowane.

6.Odstępy umieszczane w instrukcjach są 

ignorowane – nie ma różnicy pomiędzy np. 
GOTO i GO TO.

1.Używanie jedynie znaków dopuszczalnych.

2.Brak rozróżnienia znaków pisanych małą lub 

wielką literą.

3.Znaków narodowych nie należy używać 

(nawet w komentarzach).

4.Nazwy (identyfikatory) stałych, zmiennych, 

podprogramów, funkcji, itp. powinny  
zaczynać się od litery – długość dowolna.

5.Treść instrukcji wpisuje się w dowolnej 

kolumnie.

6.Odstępy umieszczane w instrukcjach są 

ignorowane – nie ma różnicy pomiędzy np. 
x:=4 a x := 4.

background image

Elementy JP

Fortran

Pascal

7.W celu zwiększenia czytelności programu 
należy stosować wcięcia – szczególnie podczas 
stosowania instrukcji zagnieżdżonych.

8.W jednym wierszu może znajdować się tylko 
jedna instrukcja.

9.Instrukcje przypisania realizowane są za 
pomocą znaku „=”.

10.Na końcu wiersza nie stawia się żadnego 
znaku.

11.Poszczególne bloki programu zaczynają się 
i kończą w dowolny sposób.

12.Główny blok programu rozpoczyna się 
słowem PROGRAM z nazwą, a kończy 
słowem END. Po END nie stawia się kropki

13.Warunki arytmetyczne i logiczne określone 
są znakami literowymi.

7.W celu zwiększenia czytelności programu 
należy stosować wcięcia – szczególnie podczas 
stosowania instrukcji zagnieżdżonych.

8.W jednym wierszu może znajdować się kilka 
instrukcji, np. if x=1 then y:=1 else y:=2;.

9.Instrukcje przypisania realizowane są za 
pomocą znaku „:=”.

10.Na końcu wiersza zazwyczaj jest średnik.

11.Poszczególne bloki programu zaczynają się 
i kończą w dowolny sposób, ale muszą być 
umieszczone między słowami BEGIN i END.

12.Główny blok programu rozpoczyna się 
słowem PROGRAM z nazwą, a kończy 
słowem END z kropką na końcu.

13.Warunki arytmetyczne określane są 
znakiem „=”.

background image

Elementy JP

Fortran

Pascal

14.Jedna instrukcja może zajmować 
maksymalnie 20 wierszy, przy czym pierwszy 
wiersz nazywa się wierszem początkowym, a 
pozostałe wierszami kontynuacji. Każdy 
wiersz kontynuacji należy zaznaczyć poprzez 
umieszczenie w szóstej kolumnie znaku 
różnego od zera i spacji.

15.W programie należy umieszczać 
komentarze – zaczynają się one znakiem „*”, 
„C” lub „!”. Komentarze można dodawać na 
początku linii lub w dowolnym jej miejscu. 
Wiersze z samymi spacjami traktowane są jak 
wiersze komentarzy.

16.W kolumnach 1-5 można wpisywać tzw. 
etykiety – niepowtarzalny ciąg cyfr – 
identyfikujące określone miejsce w programie.

14.Jedna instrukcja może zajmować dowolną 

liczbę wierszy.

15.W programie należy umieszczać 

komentarze. Bloki komentarza ujmuje się w 
nawiasy klamrowe:
{
komentarz...
}

16.Brak etykiet (istneje możliwość 

zaznaczania miejsc w kodzie poleceniem 
LABEL).

background image

Elementy JP

Fortran

Pascal

17.Numery etykiet powinny być nadawane w 
odstępach (standardowo co 10) – daje to 
możliwość dopisania nowych etykiet 
pomiędzy już istniejące.

18.W programie najpierw umieszcza się 
deklaracje a dopiero po nich instrukcje.

19.Deklaracja zmiennych: typ nazwa

20.Zmienne są lokalne, tzn. obowiązują w 
obszarze jednego modułu. Wymiana wartości 
odbywa się poprzez odpowiednie instrukcje.

21.Podczas pisania programów należy dążyć 
do zminimalizowania liczby zmiennych.

22.Należy dbać o przejrzystość i czytelność 
kodu – dlatego też zaleca się stosowanie 
podprogramów i funkcji.

17.-

18.W programie najpierw umieszcza się 
deklaracje a dopiero po nich instrukcje.

19.Deklaracja zmiennych: nazwa : typ

20.Zmienne mogą być lokalna oraz globalne 
(zależy to od miejsca deklaracji).

21.Podczas pisania programów należy dążyć 
do zminimalizowania liczby zmiennych.

22.Należy dbać o przejrzystość i czytelność 
kodu – dlatego też zaleca się stosowanie 
podprogramów i funkcji.

background image

Elementy JP

4.  Występowanie  zasady  jednoznaczności  identyfikatorów  w  obrębie 
jednego projektu. 

Identyfikatory  są  to  nazwy  programów,  modułów,  bloków, 
podprogramów,  procedur,  funkcji  i  zmiennych.  Ponieważ  działanie 
każdego programu oparte jest na pewnych logicznych zasadach, nie może 
dochodzić do sytuacji, w których translator nie wie o jaki moduł, funkcję 
czy  procedurę  chodzi.  Większość  języków  programowania  kontroluje, 
przynajmniej w podstawowym zakresie, nazwy poszczególnych struktur i 
zgłasza błędy o powtarzających się nazwach lub ich błędnej budowie.

background image

Elementy JP

Przykłady poprawnego i błędnego deklarowania nazw 

w językach Fortran G77 oraz Free Pascal.

background image

Elementy JP

5. Konieczność komunikacji z użytkownikiem. 

Potrzeba taka dotyczy również innych urządzeń komputera, a także zapisu 
i  odczytu  danych  z  plików.  Czynności  takie  nazywane  są  operacjami 
wejścia-wyjścia.  Standardowo  do  komunikacji  z  użytkownikiem  służy 
klawiatura  (ewentualnie  myszka)  i  monitor.  Pobieranie  danych  z 
klawiatury  (lub  pliku)  wymaga  wcześniejszego  zadeklarowania  typu 
zmiennej  (chyba,  że  istnieje  możliwość  niejawnej  deklaracji  typu)  - 
wprowadzany  typ  będzie  wówczas  jednoznaczny  i  zgodny  z 
oczekiwaniami. Podczas wyprowadzania danych na monitor (lub do pliku) 
należy  ustalić  ich  format  (wygląd).  Podczas  zapisu  (odczytu)  danych  do 
pliku należy dodatkowo określić rodzaj pliku. 

background image

Elementy JP

6. Potrzeba sterowania formatem (wyglądem) zmiennych. 

Formatowanie jest dokonywane podczas wyprowadzania wartości danych 
na  ekran  monitora  lub  podczas  zapisu  do  plików.  Formatowanie 
zmiennych  nie  zawsze  jest  konieczne  (każdy  język  programowania 
posiada domyślne sposoby zapisu poszczególnych typów zmiennych) ale 
może być bardzo przydatne – można zażądać, aby wszystkie liczby miały 
tą  samą  ilość  znaków  i  były  zapisane  np.  w  postaci  wykładniczej  o 
określonej liczbie cyfr po przecinku.

background image

Elementy JP

7. Konieczność jawnego lub niejawnego deklarowania typów zmiennych.

Rozróżnia się typ całkowity, rzeczywisty, zespolony, tekstowy, logiczny i 
inne.  Zależnie  od  języka,  poszczególne  typy  mogą  mieć  wiele  odmian. 
Oprócz  typów  prostych,  wiele  języków  umożliwia  tworzenie  własnych 
typów  lub  struktur  danych  o  bardziej  złożonej  budowie.  Odpowiednie 
dobranie typów zmiennych pozwala zaoszczędzić pamięć operacyjną oraz 
skrócić  czas  wykonywania  obliczeń.  Często  istnieje  konieczność 
konwersji typów, czyli zamiany zawartości jednego typu na inny.

background image

Elementy JP

Należy  pamiętać,  że  nie  każdy  rodzaj  konwersji  jest  możliwy 
(przykładowo: nie da się zamienić łańcucha liter na liczbę) i że nie zawsze 
konwersja jest dokładna (np. podczas konwersji zmiennej rzeczywistej na 
całkowitą traci się część ułamkową). Konwersję wykorzystuje się między 
innymi  podczas  używania  kodów  ASCII  (często  stosowane  w 
FORTANIE),  wyprowadzania  danych  na  ekran  monitora  (OBJECT 
PASCAL)  lub  dostosowywania  do  innych  standardów  danych  (np. 
konwersja typów STRING i PCHAR w języku OBJECT PASCAL).

background image

Elementy JP

Typy występujących zmiennych oraz ich zakresy 

w języku Fortran G77.

background image

Elementy JP

Typy występujących zmiennych oraz ich zakresy 

w języku Free Pascal.

background image

Elementy JP

8. Potrzeba wymiany danych między różnymi modułami (podprogramami, 
funkcjami i procedurami). 

Sposób wymiany danych (wartości zmiennych) zależy w dużej mierze od 
organizacji  i  struktury  konkretnego  języka  programowania.  Podstawowe 
metody to:

 deklarowanie wspólnych bloków pamięci,

 deklarowanie wspólnych adresów pamięci,

 deklarowanie bloków zawierających zbiory zmiennych 

   przenoszenie wartości zmiennych w nagłówkach nazw 
   procedur i funkcji,

 podział zmiennych na zmienne lokalne i publiczne,

 ładowanie pliku wejściowego,

 wykorzystanie plików (zapis i odczyt).

background image

Elementy JP

9. Potrzeba wykonywania działań na zmiennych. 

Rozróżnia  się  trzy  podstawowe  rodzaje  zmiennych:  liczbowe,  tekstowe  i 
logiczne, przy czym każda grupa wymaga innego podejścia. Zdarza się, że 
języki  programowania  (szczególnie  starsze)  są  ukierunkowane  na  jeden 
rodzaj danych. Działania na zmiennych wymagają stosowania operatorów, 
relacji, wyrażeń, instrukcji, funkcji lub procedur.

background image

Elementy JP

10. Potrzeba wykonywania działań na plikach. 

Bardzo  często  programy  komputerowe  odczytują  pewne  dane  z  plików, 
przekształcają  je  lub  na  ich  podstawie  obliczają  nowe  dane,  a  następnie 
zapisują  wyniki  do  pliku.  Język  programowania  powinien  nie  tylko 
umożliwiać zapis i odczyt, ale także wykonywanie podstawowych działań 
na  plikach  (tworzenie,  kasowanie,  przenoszenie  czy  zmiana  nazwy). 
Zależnie  od  rodzaju  języka  i  jego  implementacji  możliwości  w  tym 
zakresie są bardzo zróżnicowane.

background image

Elementy JP

11. Potrzeba komunikacji z systemem operacyjnym. 

Przydatnym elementem języka programowania jest możliwość korzystania 
w  funkcji  systemu  operacyjnego.  Jest  to  zazwyczaj  możliwe  na  dwa 
sposoby: 

 język posiada własne instrukcję odpowiadające poleceniom 

  systemu operacyjnego (ale i tak przeważnie w jakiś sposób z 
  nich korzysta), 

 język posiada mechanizm wywoływania poleceń 

  systemowych i ich parametrów.

background image

Elementy JP

12. Potrzeba zarządzania pamięcią operacyjną komputera. 

Istnieją  dwa  podstawowe  rodzaje  zarządzania  pamięcią:  statyczne  i 
dynamiczne.  Zarządzanie  statyczne  polega  na  ścisłym  przydzielaniu 
zmiennym  określonej  ilości  pamięci  operacyjnej  (identyfikowanej  tzw. 
adresami),  przy  czym  ilość  ta  zależna  jest  od  zadeklarowanego  typu 
zmiennej. Ilość przydzielonej pamięci nie może się już zmienić – wskutek 
czego nie można np. zadeklarować tablicy o nieznanym z góry rozmiarze. 
Zarządzanie  dynamiczne  nie  posiada  takich  ograniczeń,  a  pamięć 
operacyjna przydzielana jest automatycznie, w zależności od potrzeb.

background image

Elementy JP

13. Potrzeba obsługi błędów (wyjątków). 

Jest to konieczne ze względu na dwa podstawowe czynniki: niemożność 
przewidzenia  wszystkich  działań  użytkownika  oraz  możliwość 
wystąpienia awaryjnych stanów pracy komputera (np. uszkodzenie pliku, 
nośnika danych, systemu operacyjnego).

background image

Zmienne i stałe

Zmienna  -  jest  to  symboliczna  nazwa  komórki  w  pamięci  operacyjnej 
komputera i służy do zapisu wartości liczbowej, tekstowej, logicznej, itd. 
Zmienne  są  podstawowym  elementem  algorytmu  obliczeniowego.
W  czasie  działania  programu  wartości  przypisane  zmiennym  mogą  się 
dowolnie  zmieniać,  zależnie  od  wykonywanych  operacji.  Zmienne  są 
rozróżniane  po  nazwach,  czyli  tzw.  identyfikatorach.  Nadanie  wartości 
zmiennym  odbywa  się  poprzez  instrukcję  przypisania  –  bezpośrednio 
podczas deklaracji typu lub później (zależy to od języka programowania).

background image

Zmienne i stałe

Zmienna indeksowana (tablica) – zmienna zawierająca nie jedną wartość 
lecz  cały  ich  zbiór.  W  przypadku  zmiennych  indeksowanych  oprócz 
deklaracji  typu  należy  podać  jej  wymiar.  Służy  do  zapisywania  list, 
wektorów  i  tablic.  Maksymalna  ilość  wymiarów  zmiennej  indeksowanej 
jest zależna od języka programowania.

background image

Zmienne i stałe

Stała  –  jest  to  symboliczna  nazwa  komórki  w  pamięci  operacyjnej 
komputera  i  również  służy  do  zapisu  określonej  wartości.  Różnica 
pomiędzy zmienną a stałą jest taka, że wartości stałej nie można zmienić 
podczas  wykonywania  obliczeń.  Deklaracja  stałej  i  nadanie  wartości 
realizuje się odpowiednią instrukcją.

background image

Zmienne i stałe

Podział zmiennych i stałych ze względu na typ:

 zespolone,

 rzeczywiste,

 całkowite,

 logiczne,

 walutowe,

 daty lub czasu,

 tekstowe.

Podział zmiennych i stałych ze względu na sposób deklaracji:

 deklarowane jawnie,

 deklarowane niejawnie.

background image

Zmienne i stałe

Podział zmiennych i stałych ze względu na dokładność (dotyczy 
zmiennych zespolonych i rzeczywistych):

 o pojedynczej precyzji,

 o podwójnej precyzji.

Podział zmiennych i stałych ze względu na strukturę:

 prosty, 

 indeksowany (wektory i tablice).

background image

Zmienne i stałe

Podział zmiennych i stałych ze względu na ilość zajmowanej pamięci:

 o określonej ilości bajtów (1, 2, 4, 6, 8 lub 10 bajtów),

 o dowolnej ilości bajtów.

Podział zmiennych i stałych ze względu na sposób przydziału pamięci:

 statyczne,

 dynamiczne.

background image

Wyrażenia

Wyrażenia  arytmetyczne  –  służą  do  obliczania  wartości  zmiennych 
liczbowych na podstawie wzorów matematycznych.

W wyrażeniach arytmetycznych mogą wystąpić następujące elementy:

 stałe arytmetyczne,

 odwołania do zmiennych,

 odwołania do elementów tablic,

 wywołania funkcji wewnętrznych i zewnętrznych.

background image

Wyrażenia

Wyrażenia realizowane są przy pomocy operatorów (znaków dodawania, 
odejmowania,  mnożenia,  dzielenia  i  potęgowania)  oraz  funkcji 
(wewnętrznych  i  zewnętrznych).  Podczas  tworzenia  wyrażeń 
arytmetycznych  należy  zwrócić  uwagę  na  typ  wyniku,  szczególnie  w 
przypadku, gdy w wyrażeniu biorą udział zmienne różnych typów. 

Kolejność  wykonywania  operacji  zależy  od  priorytetu  operatora,  wg 
kolejności:  potęgowanie,  mnożenie  i  dzielenie  oraz  dodawanie  i 
odejmowanie. Kolejność wykonywania działań można dowolnie zmienić 
stosując nawiasy.

background image

Elementy JP

Rodzaje operatorów arytmetycznych 

 w językach Fortran G77, Free Pascal, BASIC i C++.

Fortran

+ - * / **

Pascal

+ - * / ** div mod shl shr

BASIC

+ - * / ↑ (**)

C++

+ - * / * % ++ -- << >>

background image

Wyrażenia

Wyrażenia tekstowe – służą do przetwarzania zmiennych tekstowych (np. 
tworzenie  podłańcuchów)  oraz  do  zbierania  określonych  informacji  (np. 
określanie  długości  łańcucha,  położenia  określonego  znaku  w  łańcuchu, 
itp.). Elementami wyrażeń tekstowych są:

 stałe i zmienne tekstowe,

 podłańcuchy,

 wywołania funkcji tekstowych.

background image

Wyrażenia

Wyrażenia relacji – służą do porównania wartości dwóch wyrażeń 
arytmetycznych lub logicznych. Dostępne operatory relacji to znaki:

 mniejsze niż,

 mniejsze lub równe,

 równe,

 nierówne,

 większe lub równe,

 większe niż.

background image

Wyrażenia

Operatory relacji mogą być zapisywane symbolami matematycznymi lub 
tekstowymi w zależności od języka programowania. Często zdarza się, że 
operator  relacji  nie  pokrywa  się  z  operatorem  przypisania  -  poniżej 
przedstawiony jest przykład:

background image

Wyrażenia

Wyrażenia logiczne – służą do wyznaczania wartości logicznej typu 
PRAWDA lub FAŁSZ. Elementami wyrażenia logicznego są:

 stałe i zmienne logiczne,

 elementy tablic logicznych,

 wywołania funkcji logicznych,

 wyrażenia relacji.

Najczęściej stosowane operatory logiczne to:

 negacja,

 koniunkcja,

 alternatywa,

 tożsamość,

 nie tożsamość.

background image

Wyrażenia

Podane  operatory  zostały  uporządkowane  według  priorytetów,  czyli 
kolejności  w  jakiej  wykonywane  są  operacje  podczas  wyznaczania 
wartości wyrażenia logicznego. Argumenty operatorów logicznych muszą 
być  typu  logicznego.  Kiedy  dwa  następujące  po  sobie  w  wyrażeniu 
operatory  mają  równe  priorytety,  to  najpierw  wykonywana  jest  operacja 
stojąca  z  lewej  strony.  Operator  negacji  poprzedza  argument,  pozostałe 
operatory wymagają podania dwóch argumentów w porządku (operator w 
środku).  Jeżeli  w  jakimś  wyrażeniu  występują  jednocześnie  operatory 
arytmetyczne,  relacji  i  logiczne,  to  kolejność  wykonywania  działań  jest 
następująca:

 operacje arytmetyczne,

 operacje relacji,

 operacje logiczne.

background image

Wyrażenia

Tabela wyrażeń logicznych.

background image

Olsztyn 2005

Dziękuję za uwagę

Wojciech Sobieski