Instrukcje 1
Definicje wstępne
Formalny opis akcji wykonywanej przez
komputer nazywamy instrukcją.
statement
– instrukcja,
Każda instrukcja kończona jest średnikiem.
Efektem wykonania instrukcji jest
przekształcenie stanu obliczeń.
Stanem obliczeń nazywamy wartości
wszystkich zmiennych programu.
Kolejność wykonywania instrukcji w programie
nazywamy czasami przepływem sterowania
(
flow of control
).
Instrukcje 2
W danej chwili komputer steruje (kontroluje)
wykonaniem jednej instrukcji
Najprostszą sytuację mamy w przypadku
sekwencyjnego przepływu
(przekazywania) sterowania.
1.
Ciąg instrukcji
Instrukcja_1;
Instrukcja_2;
.
Instrukcja_N;
sequence_of_statements
– ciąg instrukcji.
Instrukcje 3
2.
Instrukcja skoku –
goto
Każda instrukcja może być poprzedzona
etykietą, która jest identyfikatorem
ujętym w podwójne nawiasy kątowe.
<<Etykieta>> Instrukcja;
Umożliwia to wykonanie skoku do takiej
instrukcji. Realizuje to instrukcja skoku
goto
Etykieta
Wynikiem skoku jest przekazanie
sterowania do instrukcji poprzedzonej
etykietą.
Instrukcje 4
Nie można przekazać sterowania do wnętrza
instrukcji warunkowych i pętli lub pomiędzy
rozgałęzieniami instrukcji warunkowych. Można
jej użyć do wyjścia z pętli, albo z bloku.
Zalecenie.
Nie stosować instrukcji skoku.
Wymaganie dotyczące ćwiczeń
laboratoryjnych.
Nie wolno stosować instrukcji skoku.
3.
Instrukcja pusta
;
Instrukcje 5
4.
Instrukcja podstawienia (
assignment
statement
)
Desygnator := Wyrazenie;
Akcje:
• Wyznaczenie wartości desygnatora opisującego
zmienną
• Wyznaczenie wartości wyrażenia
• Zastąpienie wartości zmiennej opisanej
desygnatorem przez wartość wyrażenia
Desygnator i wyrażenie muszą być zgodnych
typów.
Wartość wyrażenia musi spełniać ograniczenia
nałożone na zmienną.
Instrukcje 6
Pierwsza reguła sprawdzana jest podczas
kompilacji.
Druga reguła sprawdzana jest podczas
wykonywania instrukcji i w przypadku
naruszenia ograniczeń zgłaszany jest wyjątek
Constraint_Error
5.
Instrukcja
declare
-
bloku
(
block statement
)
declare
[Deklaracje;]
begin
Instrukcje;
end
;
Przykład 1.
Blok_Nazwy
Instrukcje 7
Zasięg i widzialność
(
scope and visibility
)
Zasięgiem nazywamy fragment tekstu
programu, w którym obiekt ma znaczenie.
Obiekt jest widzialny w swoim zasięgu tzn.
można się do niego odwoływać, chyba że
zostanie przesłonięty przez nową
deklarację obiektu o tej samej nazwie.
Instrukcje 8
6.
Instrukcja warunkowa
if_then_else_statement ::=
if
condition
then
sequence_of_statements
else
sequence_of_statements
end if
;
condition ::= Boolean_expression
sequence_of_statements ::=
statement{statement}
condition
– warunek – wyrażenie typu
logicznego (Boolean)
Instrukcje 9
if_then_statement ::=
if
condition
then
sequence_of_statements
end if
;
if_statement ::=
if
condition
then
sequence_of_statements
{
elsif
condition
then
sequence_of_statements}
[
else
sequence_of_statements]
end if
;
Instrukcje 10
7.
Instrukcja wyboru
case_statement ::=
case
expression
is
case_statement_alternative
{case_statement_alternative}
end case
;
case_statement_alternative ::=
when
discrete_choice_list =>
sequence_of_statements
Instrukcje 11
discrete_choice_list ::= choice{|choice}
choice ::=
component_simple_name |
discrete_range
|
subtype_indication
|
expression
|
others
Przykład 2.
Funkcja_Signum
Instrukcje 12
Słowniczek
• case_statement_alternative
– alternatywa
instrukcji wyboru
• discrete_choice_list
– dyskretna lista
wyboru
• choice
– wybór
• component_simple_name
– nazwa składowej
• discrete_range
– zakres dyskretny
• subtype_indication
– nazwa podtypu
(dyskretnego)
Instrukcje 13
Reguły
• Zbiory określone przez listy wyboru muszą
być wzajemnie rozłączne
• Suma tych zbiorów musi być całym
zbiorem wartości typu selektora
• Wariant
others
musi być umieszczony na
końcu
• Wszystkie wyrażenia określające listy
wyboru muszą być statyczne
Przykład 3.
Musztra, Dni_Tygodnia_Case,
Czytanie_Znakow
Instrukcje 14
Definicja 1.
Skalarnym typem danych (
scalar
data type
) nazywamy typ, w którym wartości
są uporządkowane i każda jest niepodzielna.
Definicja 2.
Dyskretnym typem danych
(
discrete data type
) nazywamy typ skalarny, w
którym każda wartość (z wyjątkiem pierwszej)
ma jednoznacznie określony poprzednik i
każda wartość (z wyjątkiem ostatniej) ma
jednoznacznie określony następnik.
Instrukcje 15
Zalecenia
Jeżeli istnieją tylko dwie możliwości to używaj instrukcji
if
Jeżeli decyzja wyboru nie bazuje na wartości jednego
wyrażenia dyskretnego, to używaj instrukcji
if
Jeżeli jest wiele możliwości bazujących na wartości
jednego wyrażenia dyskretnego, używaj instrukcji
case
Jeżeli istnieje kilka możliwości bazujących na wartości
jednego wyrażenia dyskretnego używaj
case
, albo
if
tak, aby uzyskać bardziej czytelny program
Instrukcję wyboru należy stosować tylko wtedy, gdy
podzbiory wartości określone listami wyboru ściśle do
siebie przylegają. Jeżeli tak nie jest, to często lepiej
stosować instrukcję
if
Część
others
powinna być wykonywana w przypadkach
szczególnych tzn. takich, które rzadko mogą wystąpić.
Instrukcje 16
exit when
Warunek
Ciąg_Instrukcji
FALSE
TRUE
Następna_Instrukcja
end loop
Pętla z testem początkowym
8. Pętle
Instrukcje 17
exit when
Warunek
Ciąg_Instrukcji
FALSE
TRUE
Następna_Instrukcja
end loop
Pętla z testem końcowym
Instrukcje 18
exit when
Warunek
Ciąg_Instrukcji_1
FALSE
TRUE
Następna_Instrukcja
end loop
Pętla z testem pośrednim
Ciąg_Instrukcji_2
Instrukcje 19
Pętle z warunkiem początkowym występują tak
często, że istnieje specjalna instrukcja do
realizacji takich pętli. Jest to instrukcja, albo
pętla
while
while
Warunek
loop
...
end loop
;
Przykład 4.
Odliczanie
Przykład 5.
Najwiekszy_Wspolny_Dzielnik
Instrukcje 20
Warto zwrócić uwagę na następujące
zagadnienia:
1. Wykonanie każdego ciągu instrukcji pętli powinno
powodować zbliżanie się do spełnienia warunku
zakończenia pętli. Oznacza to, że na warunek zakończenia
powinny mieć wpływ powtarzane obliczenia.
2.
Jeżeli warunek reprezentowany wyrażeniem logicznym nie
jest początkowo spełniony, to instrukcja
while
jest pusta.
3.
Dobrym zwyczajem programistycznym jest sformułowanie
zależności nazywanej niezmiennikiem pętli, która
pozwala kontrolować stan iteracji.
4.
Należy unikać powtarzania tych samych obliczeń. Oznacza
to, że wewnątrz pętli nie należy stosować wyrażeń, w
których żadna ze zmiennych nie zmienia swojej wartości.
Przykład 6.
Niezmiennik_Petli
Instrukcje 21
Typy pętli
Pętle sterowane zdarzeniem (
event driven
loops
) – wykonanie pętli odbywa się do
zaistnienia pewnego zdarzenia wewnątrz
pętli
Pętle sterowane licznikiem (
counter driven
loops
) –
for
– wykonanie pętli odbywa się
określoną ilość razy
Przykład 7.
Odliczanie_For
Instrukcje 22
Zalecenia
1. Teoretycznie każdą instrukcję
while
i
for
można wyrazić jako instrukcję
loop
zawierającą jedną instrukcję
exit
. W praktyce
prowadziłoby to do niejasnych programów.
Należy używać
while
i
for
tam gdzie jest to
możliwe, a
loop
gdy nie ma innej możliwości.
2. Instrukcja
loop
jest wygodna, gdy
zakończenie procesu iteracyjnego
powodowane jest przez spełnienie jednego z
kilku niezależnych warunków.
Przykład 8.
Zloty_Podzial
Zadania. Literatura podstawowa
Literatura podstawowa
Morawski, M., i Zajączkowski, A. M.
(2003).
Wstęp do programowania w języku
Ada’95. Rozdział 4.
Użyteczne materiały dydaktyczne:
zskl.zsk.p.lodz.pl/~zajaczko