Języki programowania II
Instrukcje języków programowania
Olsztyn 2005
Wojciech Sobieski
Instrukcje
Instrukcje są jednym z najbardziej podstawowych elementów języka
programowania. Podstawowe instrukcje, występujące w wielu językach
programowania (np. FORTRAN, PASCAL, BASIC) to:
●
instrukcje czynne - związane są bezpośrednio z tokiem
obliczeń i wpływają na wartości poszczególnych zmiennych,
●
instrukcje bierne - są elementami pomocniczymi, służącymi
do organizacji kodu źródłowego i określenia ogólnych
właściwości poszczególnych obiektów.
Instrukcje
Instrukcje czynne:
●
instrukcje przypisania,
●
instrukcje sterujące:
skoku, zatrzymania, wstrzymania, końca, powrotu, warunkowa,
wyboru, powtórzeń (pętli), wejścia-wyjścia.
Instrukcje bierne:
●
specyfikacje segmentów i ich wejść,
●
specyfikacje cech obiektów,
●
specyfikacje formatu danych,
●
instrukcje funkcji i procedur,
●
instrukcje inicjowania danych.
Instrukcje czynne
Instrukcja przypisania - zwana inaczej instrukcją podstawienia, pozwala
nadawać zmiennym określoną wartość. Instrukcja przypisania ma postać:
zmienna = wyrażenie
gdzie zmienna oznacza zmienną prostą lub element tablicy, zaś wyrażenie
jest dowolną wartością liczbową, logiczną lub tekstową (w zależności od
typu zmiennej) lub odpowiednio wzorem matematycznym, funkcją
tekstową lub zwrotem logicznym.
Instrukcje czynne
Zależnie od języka programowania, jako symbol przypisania stosuje się
znak “=” (np. FORTRAN, BASIC), “:=” (np. PASCAL) lub też
wyrażenie słowne. W wyniku zastosowania instrukcji przypisania zmienia
się bezpowrotnie wartość lewej strony zależności, elementy strony prawej
nie ulegają zmianie. Tworząc instrukcję przypisania pamiętać należy o
odpowiednim doborze typów i konsekwencjach ich mieszania.
Warto podkreślić, że instrukcja przypisania nie jest tożsama ze wzorem
matematycznym, stąd możliwe są podstawienia typu i = i+1, fałszywe z
punktu widzenia matematyki, ale poprawne i często stosowane w językach
programowania.
Instrukcje czynne
Instrukcja skoku – służy do przeniesienia punktu sterowania w inne,
wcześniej zdefiniowane, miejsce programu. Instrukcja skoku nie jest
zalecana
przez
teoretyków
programowania,
jednak często znacznie ułatwia realizację algorytmu. Instrukcja skoku ma
ogólną postać logiczną:
IDŹ DO nazwa miejsca
gdzie nazwa miejsca musi być już jednoznacznie zdeklarowana: może to
być etykieta (FORTRAN) lub „label” (PASCAL).
Instrukcje czynne
Instrukcja zatrzymania – służy do bezwarunkowego zakończenia
wykonywanego programu. Instrukcja często spotykana w blokach
podejmowania decyzji, uruchamiana gdy nie są spełnione warunki do
wykonywania dalszych działań.
Instrukcje czynne
Instrukcja wstrzymania – służy do chwilowego zatrzymania wykonywania
programu. Kontynuacja może być podjęta wskutek działania użytkownika
bądź też po upływie określonego czasu.
Instrukcje czynne
Instrukcja powrotu – służy do wyjścia z podprogramu, procedury, funkcji
lub też do wskazania ponownego wykonania pętli.
Instrukcje czynne
Instrukcja końca – służy do określenia końca programu, procedury,
funkcji, bloku deklaracji, bloku instrukcji bądź bloku inicjacji danych.
Instrukcje czynne
Instrukcje warunkowe – służą do podejmowania decyzji w zależności od
postawionych warunków:
JEŻELI warunek TO instrukcja
lub
JEŻELI warunek1 TO instrukcja1
W INNYCH PRZYPADKACH instrukcja2
gdzie warunek jest dowolnym wyrażeniem arytmetycznym, relacją lub
wyrażeniem logicznym, a instrukcja dowolnym blokiem poleceń,
wykonywanym gdy warunek jest prawdziwy.
Instrukcje czynne
Często zachodzi konieczność rozważenia większej liczby możliwości,
wówczas stosuje się inną konstrukcję logiczną:
JEŻELI warunek1 TO instrukcja1
JEŻELI ZAŚ warunek2 TO instrukcja2
JEŻELI ZAŚ warunek3 TO instrukcja3
JEŻELI ZAŚ warunek4 TO instrukcja4
……
W INNYCH PRZYPADKACH instrukcjaN
Zależnie od języka programowania budowa instrukcji warunkowych może
być nieco inna, mogą też występować odmiany instrukcji. Tworząc
instrukcję warunkową należy uwzględnić wszystkie możliwe przypadki –
zaniedbanie może spowodować błędne działanie programu lub też jego
zawieszenie.
Instrukcje czynne
Inną typową instrukcją warunkową, występującą w wielu językach
programowania, jest instrukcja wyboru (CASE) o ogólnej postaci
logicznej:
WYBIERZ ZALEŻNIE OD WARTOŚCI zmienna
JEŻELI (lista przypadków 1) TO instrukcja1
JEŻELI (lista przypadków 2) TO instrukcja2
JEŻELI (lista przypadków 3) TO instrukcja3
JEŻELI (lista przypadków 4) TO instrukcja4
...
DOMYŚLNIE instrukcjaN
Instrukcje czynne
gdzie zmienna jest identyfikatorem zmiennej, zaś lista przypadków
zawiera oczekiwane wartości, dla których mają być wykonane
odpowiednie instrukcje. W instrukcji wyboru występuje często możliwość
określenia wartości domyślnej - instrukcjaN, dla przypadku, gdy wartość
zmiennej nie należy do żadnej wymienionej wyżej listy przypadków.
Konkretna realizacja instrukcji wyboru zależy od składni użytego języka
programowania.
Instrukcja wybory CASE może być realizowana tylko dla zmiennej
całkowitej.
Instrukcje czynne
Instrukcje powtórzeń (pętle) – służą do wielokrotnego wykonania tego
samego bloku instrukcji. Rozróżnia się dwa podstawowe typy instrukcji
powtórzeń:
●
o znanej z góry liczbie powtórzeń:
- realizowane “od dołu”,
- realizowane “od góry”,
●
o nieznanej z góry liczbie powtórzeń:
- z warunkiem “na początku”,
- z warunkiem “na końcu”.
Instrukcje czynne
Ogólna postać logiczna pętli o znanej liczbie powtórzeń wygląda
następująco:
POWTARZAJ OD wartość1 DO wartość2
instrukcje
gdzie wartość1 i wartość2 są liczbami typu całkowitego, a instrukcje
dowolnym zestawem poleceń. Zestaw poleceń musi posiadać wskazanie
początku i końca bloku. Czasami możliwe jest również określenie kroku
przyrostu – licznik pętli nie musi bowiem wzrastać lub maleć zawsze o 1.
Instrukcje czynne
Ogólna postać logiczna pętli o nieznanej liczbie powtórzeń z warunkiem
na początku wygląda następująco (tzw. warunek WHILE w PASCALU):
JEŻELI warunek
= prawda WYKONAJ instrukcje I POWRÓĆ
= fałsz WYJDŹ Z PĘTLI
Należy podkreślić, że w przypadku, gdy warunek jest od razu fałszywy
blok instrukcje nie zostanie wykonany ani razu.
Instrukcje czynne
Ogólna postać logiczna pętli o nieznanej liczbie powtórzeń z
warunkiem na końcu wygląda następująco (tzw. warunek REPEAT-
UNTIL w PASCALU):
WYKONAJ instrukcje I JEŻELI warunek
= prawda WYJDŹ Z PĘTLI
= fałsz POWRÓĆ
W tym przypadku blok instrukcje wykonany zostanie przynajmniej raz.
Instrukcje czynne
Instrukcje wejścia-wyjścia (I-O) – służą do przesyłania danych pomiędzy
różnymi elementami komputera, takimi jak monitor, klawiatura, drukarka
czy plik. Dla informacji wysyłanych domyślnym urządzeniem jest
monitor, zaś dla informacji wczytywanych: klawiatura. Przesyłane
informacje składają się z rekordów. Rekord jest to elementarna porcja
informacji, jaka może być przesyłana pomiędzy urządzeniami
zewnętrznymi a pamięcią operacyjną. W przypadku monitora i klawiatury
pojedynczy rekord odpowiada wierszowi znaków na ekranie monitora, w
przypadku drukarki wierszowi poleceń.
Instrukcje czynne
Proces wprowadzania i wyprowadzania danych może być ograniczony do
jednej tylko zmiennej, lub może być bardziej rozbudowany – służą do tego
celu tzw. listy wejścia i wyjścia. Lista zawiera spis zmiennych, którym
mają być przypisywane wprowadzane wartości według ich kolejności.
Ważne jest, aby wartości wprowadzane odpowiadały zadeklarowanym
typom zmiennych i aby liczba wprowadzonych wartości była zgodna z
liczbą elementów listy. Składnikami listy mogą być zmienne proste,
elementy tablic, łańcuchy znakowe oraz nazwy tablic (oznacza to
przesłanie wszystkich elementów tej tablicy).
Instrukcje czynne
W przypadku korzystania z plików należy określić rodzaj pliku oraz
wskazać, że to on będzie “odbiorcą” lub “dawcą” informacji.
Rozróżnia się dwa podstawowe rodzaje plików:
- o dostępie sekwencyjnym,
- o dostępie swobodnym.
Instrukcje czynne
Pliki o dostępie sekwencyjnym oferują odczyt elementów pliku
“od początku”. W takim przypadku, aby odczytać n-ty element pliku,
należy najpierw odczytać wszystkie elementy go poprzedzające. Pliki o
dostępie sekwencyjnym są wygodne w przypadku zapisu i odczytu
zmiennych indeksowanych (wektorów lub tablic), w których i tak trzeba
przejść przez wszystkie indeksy. Pliki takie nie nadają się natomiast do
zapisu i odczytu informacji przetwarzanych “na wyrywki” – jest to co
prawda możliwe, ale dużo wolniejsze niż w przypadku korzystania z
plików o dostępie swobodnym.
Instrukcje czynne
Pliki o dostępie swobodnym składają się z ponumerowanych rekordów,
umożliwiających bezpośredni zapis i odczyt w dowolnym rekordzie (bez
konieczności odczytu rekordów poprzedzających). Są bardzo przydatne do
przetwarzania danych o strukturze baz danych.
Instrukcje bierne
Specyfikacje segmentów i ich wejść – służą do wyodrębniania
określonych bloków instrukcji i poleceń stanowiących pewną logiczną
całość. Segmentem może być podprogram, procedura lub funkcja.
Segmenty mogą być wywoływane w głównym bloku programu lub też w
innych segmentach (co zależy często od odpowiedniej deklaracji).
Instrukcje bierne
Podprogram – samodzielny fragment programu, posiadający zazwyczaj
budowę podobną do segmentu głównego: zawiera oznaczenie początku i
końca, obszar deklaracji typów, bloki instrukcji, itd. Podprogram może
być wywoływany w segmencie głównym lub w innych podprogramach. W
całym programie może być zazwyczaj tylko jeden podprogram o
określonej nazwie, zaś ilość podprogramów jest nieograniczona.
Instrukcje bierne
Ogólna budowa logiczna podprogramu jest następująca:
POCZĄTEK BLOKU segment
instrukcje
WYWOŁAJ PODPROGRAM nazwa
instrukcje
KONIEC BLOKU segment
PODPROGRAM nazwa
instrukcje
KONIEC PORPROGRAMU nazwa
gdzie segment oznacza główny segment programu lub inny podprogram,
instrukcje – dowolny zestaw poleceń i instrukcji, nazwa – identyfikator
podprogramu.
Instrukcje bierne
Procedura – element podobny do podprogramu, stanowiący jego
rozszerzenie dla języków sterowanych zdarzeniami w systemie. Ogólna
postać logiczna procedury sterowanej zdarzeniem jest następująca:
PROCEDURA nazwa JEŻELI zdarzenie
…
instrukcje
…
KONIEC PROCEDURY nazwa
Instrukcje bierne
gdzie nazwa jest identyfikatorem procedury, instrukcje - dowolnym
zestawem poleceń i instrukcji, zaś zdarzenie – dowolnym, ale konkretnie
określonym zdarzeniem w systemie. Procedury nie muszą być sterowane
zdarzeniami - spełniają wówczas rolę podprogramów i mogą być
wywoływane z dowolnego miejsca programu (jeżeli mają status
“publiczny”), lub też w obrębie bieżącego modułu (jeżeli mają status
“prywatny”). W nagłówku procedury może być zawarta lista
przekazywanych zmiennych. Nie jest to zazwyczaj konieczne i zależy od
woli programisty.
Instrukcje bierne
Zdarzenie – dowolne działanie wykonane przez program lub użytkownika
(zdarzeniem może być np. kliknięcie myszką, naciśnięcie klawisza, wybór
elementu menu, najechanie kursorem na element formularza, aktywacja
lub zamknięcie formularza, itd.).
Instrukcje bierne
Funkcja – jest to również samodzielny segment programu.
W odróżnieniu od podprogramu lub procedury, funkcja wykonuje
konkretne działania na zdefiniowanych wcześniej zmiennych i zwraca
wynik. Funkcja wymaga zazwyczaj przekazania listy zmiennych o
określonych typach. Ogólna postać logiczna funkcji jest następująca:
FUNKCJA nazwa (lista zmiennych)
instrukcje
KONIEC FUNKCJI nazwa
gdzie nazwa jest identyfikatorem funkcji, instrukcje - dowolnym zestawem
poleceń i instrukcji, zaś lista zmiennych – uporządkowanym zbiorem nazw
zmiennych, niezbędnych do obliczenia funkcji. W funkcjach mogą być
wykorzystane zmienne liczbowe, tekstowe, walutowe lub typu data i czas.
Instrukcje bierne
Specyfikacje cech obiektów – służą do określenia pewnych właściwości
zmiennych, procedur lub funkcji. Zazwyczaj jest to rodzaj definiowanego
obiektu (zmienna czy stała), rozmiar zmiennej indeksowanej, obszar
obowiązywania (obiekt “publiczny” czy “lokalny”), zasady organizacji
pamięci, itd. Zależnie od języka programowania, jego możliwości w
zakresie definicji cech obiektów mogą być bardzo zróżnicowane.
Instrukcje bierne
Specyfikacje formatu danych – służą do określania wyglądu zmiennych
podczas wyprowadzania lub wprowadzania danych.
Procesowi formatowania podlegają najczęściej następujące elementy:
Instrukcje bierne
• całkowita liczba zajmowanych znaków. W przypadku gdy liczba znaków
jest krótsza od zadeklarowanej, pozostałe znaki uzupełniane są spacjami (z
przodu lub na końcu). W przypadku zaś, gdy liczba znaków jest dłuższa,
znaki ostatnie są obcinane lub też zgłaszany jest błąd wejścia-wyjścia.
Spacja, znak wartości liczby (plus-minus) czy separator dziesiętny zajmują
jeden znak.
Instrukcje bierne
●
liczba cyfr po przecinku (dla liczb rzeczywistych). Należy pamiętać, że
zmiana formatu nie wpływa na zapisaną w pamięci komputera, bieżącą
wartość danej ani też na jej dokładność. Przykład formatu zmiennej o
wartości 1234,56789:
Instrukcje bierne
●
znak separatora dziesiętnego (dla liczb rzeczywistych) – przecinek lub
kropka. Znak separatora może być definiowany w języku programowania
lub też może być zmieniany poprzez zastosowanie własnoręcznie
napisanej funkcji.
Instrukcje bierne
●
postać danej (dla liczb rzeczywistych). Dostępne możliwości to postać
prosta lub wykładnicza. W postaci wykładniczej można zazwyczaj
określić całkowitą liczbę znaków oraz ilość cyfr wykładnika. Przykład
formatu zmiennej o wartości 1234,56789 w postaci wykładniczej.
Instrukcje bierne
●
sposób interpretacji znaku wartości liczby. Domyślnie liczby dodatnie
nie posiadają podczas wyświetlania na monitor (lub zapisu do pliku) znaku
“+”, można to jednak zmienić w większości języków programowania.
Instrukcje bierne
●
sposób interpretacji spacji (dotyczy wprowadzania danych). Określa, czy
podczas wprowadzania wartości liczbowych, znak spacji ma być
ignorowany czy też nie.
Instrukcje bierne
●
sposób zapisu czasu i daty. W przypadku czasu określa dokładność
wyświetlania, (godzina, minuta, sekunda), zaś w przypadku daty określa
kolejność składników oraz sposób wyświetlania roku (dwie lub cztery
cyfry).
Instrukcje bierne
Instrukcje funkcji i procedur – są tworzone przez programistę i służą do
realizacji jednostkowych zadań algorytmu programu.
Instrukcje bierne
Instrukcje inicjowania danych – służą do nadawania początkowych
wartości zmiennych. Nadają się szczególnie do określania wartości
wektorów i tablic - jest to zazwyczaj znacznie wygodniejsze i szybsze niż
indywidualne przypisywanie wartości każdemu elementowi zmiennej
indeksowanej.
Wyjątki
Wyjątki - są to różne błędy, mogące pojawić się podczas działania
programu. Przykładem może być dzielenie przez zero lub wprowadzenie
nieodpowiedniego typu danej. Program zgłosi wówczas błąd i przestanie
działać (czasem nawet zawiesi komputer). Aby tego uniknąć konieczne
jest zastosowanie odpowiednich środków zaradczych. Można to uzyskać
na kilka sposobów:
●
poprzez stosowanie obsługi wyjątków,
●
poprzez tworzenie własnych procedur wprowadzania danych,
●
poprzez stosowanie tzw. masek wprowadzania.
Wyjątki
Stosowanie obsługi wyjątków. Niektóre języki posiadają specjalne
instrukcje pozwalające na kontrolę i eliminację błędów.
Ogólna struktura logiczna obsługi błędów jest następująca
WYKONAJ
instrukcje
A JEŚLI SIĘ COŚ NIE UDA
instrukcje
KONIEC
Wyjątki
lub
WYKONAJ
instrukcje
A JEŚLI SIĘ COŚ NIE UDA
GDY błąd1 TO instrukcja1
GDY błąd2 TO instrukcja2
GDY błąd3 TO instrukcja3
...
KONIEC
Zależnie od języka programowania i jego implementacji obsługa błędów
może dotyczyć dowolnej instrukcji w programie lub też wybranego zbioru
instrukcji (np. tylko instrukcje wejścia-wyjścia). Pozostałe fragmenty
programu muszą być wówczas zabezpieczane inaczej.
Wyjątki
Tworzenie własnych procedur wprowadzania danych. Proces
wprowadzania danych można tak zorganizować, że program nie przyjmie
żadnej innej wartości niż prawidłowa. Poprzez odpowiednie stosowanie
instrukcji warunkowych można określić dopuszczalny typ danej oraz
zakres jej wartości. W każdym innym przypadku program wyświetli
komunikat o błędzie i poprosi o ponowne wprowadzenie danej. Taki
system nie spowoduje przerwania pracy programu.
Wyjątki
Stosowanie tzw. masek wprowadzania. Maska wprowadzania jest to
pewien wzór, według którego mają być wprowadzane dane.
W takim przypadku nie da się wprowadzić danych o innym wzorze niż
zadeklarowany. Maski wprowadzania występują jedynie w aplikacjach
posiadających formularze.
Olsztyn 2004
Dziękuję za uwagę
Wojciech Sobieski