1 1.3. Specyfikacja problemu algorytmicznego Wiesz juŜ, co to jest

Transkrypt

1 1.3. Specyfikacja problemu algorytmicznego Wiesz juŜ, co to jest
1.3. Specyfikacja problemu algorytmicznego
Wiesz juŜ, co to jest algorytm, jakie wymogi powinien spełniać i jak go zapisać.
Brakuje jeszcze jednego czynnika, aby zadanie, które chcesz rozwiązać za pomocą algorytmu,
było przedstawione w pełni precyzyjnie. Jeśli bowiem zamierzasz napisać program, w którym
zastosujesz utworzony przez siebie algorytm, to musisz wiedzieć, jakiego typu są dane
wejściowe, wyniki, czyli dane wyjścia itp. Wszystkie te informacje powinny zostać
umieszczone w specyfikacji problemu algorytmicznego.
Definicja
Specyfikacją problemu algorytmicznego nazywamy dokładny opis problemu
algorytmicznego, który ma zostać rozwiązany, oraz podanie danych wejściowych i
danych wyjściowych wraz z ich typami.
Najczęściej specyfikacja składa się z opisu danych wejściowych wraz ze wszystkimi
warunkami, jakie mają one spełniać, oraz danych wyjściowych (wyników) z uwzględnieniem
warunków, jakie mają spełniać i ich związku z danymi wejściowymi. PokaŜmy to na
przykładzie.
Specyfikacja problemu algorytmicznego
Problem algorytmiczny: Obliczanie potęgi liczby naturalnej o wykładniku
naturalnym
Dane wejściowe:
a ∈ N - podstawa potęgi, b ∈ N - wykładnik potęgi
Dane wyjściowe:
w∈ N - wartość ab
Dane w algorytmie są najczęściej przedstawiane za pomocą liter lub dłuŜszych nazw,
które nazywamy zmiennymi.
Definicja
Zmienną nazywamy obiekt występujący w algorytmie, określony przez nazwę i
słuŜący do zapamiętywania pewnych danych.
Typy zmiennych
Jeśli uŜywamy w algorytmie zmiennej, musimy dokładnie określić, jakiego rodzaju
wartości moŜe ona przechowywać - mówimy, Ŝe określamy tak zwany typ zmiennej. Mogą
to być liczby całkowite, liczby rzeczywiste, litery, znaki klawiaturowe. RóŜne typy będziemy
omawiać w kolejnych rozdziałach naszych rozwaŜań.
W czasie działania algorytmu moŜna swobodnie zmieniać wartość przypisaną
zmiennej w zakresie jej typu.
Zmienna pomocnicza jest zmienną wprowadzoną do zapisu algorytmu w celu
umoŜliwienia jego realizacji. Zmienne pomocnicze słuŜą w algorytmie do pamiętania danych
przejściowych, czyli danych potrzebnych do działania algorytmu, ale niebędących danymi
wejściowymi ani wynikami. Na przykład w algorytmie obliczającym średnią arytmetyczną
wielu liczb potrzebujemy dwóch zmiennych pomocniczych - jednej do zapamiętywania ilości
podanych liczb, drugiej zaś do zapamiętywania sumy podanych liczb.
Stałe w algorytmie
Prócz zmiennych w algorytmie moŜemy uŜywać stałych. Mogą to być wartości
podane wprost, na przykład liczba 35, albo wartości reprezentowane przez nazwy - podobnie
jak zmienne. Wartość stałej w algorytmie nie moŜe ulec zmianie, na przykład: uŜywamy stałej
JT mającej wartość 3,14 i oczywiście zaleŜy nam, aby ta wartość nie została przypadkowo
zmieniona.
Bezpośrednio po specyfikacji naleŜy umieścić zapis algorytmu - wybór metody zapisu
naleŜy do ciebie. My preferujemy zapis za pomocą schematu blokowego, jako najbardziej
1
czytelny dla odbiorcy. Jeśli więc do powyŜszej specyfikacji dodasz zapis algorytmu
sporządzony w postaci na przykład schematu blokowego, to dokumentacja słuŜąca
rozwiązaniu problemu byłaby niemal pełna. NaleŜy bowiem jeszcze przeprowadzić ocenę
poprawności algorytmu, o czym będzie mowa w dalszej części tego rozdziału.
Przykład
Zapiszmy specyfikację problemu i schemat blokowy algorytmu słuŜącego do
obliczania średniej arytmetycznej dwóch liczb podanych na wejściu i wypisania wyniku na
ekranie.
Zacznijmy od sporządzenia specyfikacji problemu.
Specyfikacja problemu algorytmicznego
Problem algorytmiczny: Obliczanie średniej arytmetycznej dwóch liczb rzeczywistych
i wypisanie wyniku na ekranie monitora
Dane wejściowe:
a, b ∈ R
Dane wyjściowe:
sr ∈ R - średnia liczb a, b
Teraz zapiszmy algorytm w postaci schematu blokowego (ryc. 1.1):
Ryc. 1.1. Schemat blokowy algorytmu obliczającego średnią dwóch liczb
Schemat blokowy jest bardzo prosty, dlatego łatwo zauwaŜyć, Ŝe podaje poprawne
wyniki dla wszystkich danych wejściowych zgodnych ze specyfikacją problemu.
1.4. Opis stosowanych operatorów
Jeśli zmienne lub stałe poprawnie połączymy operatorami zgodnie z regułami
matematycznymi, to otrzymamy wyraŜenie. Zmienne i stałe występujące w wyraŜeniu
nazywamy operandami. Na przykład: a + 4 - b jest wyraŜeniem składającym się z trzech
operandów i dwóch operatorów. Liczba 4 jest operandem stałym, a, b to operandy zmienne.
Operatory występujące w tym wyraŜeniu to operatory arytmetyczne. Proponujemy ci
zapoznanie się juŜ teraz z zapisem operatorów, gdyŜ pomyłki w ich stosowaniu są przyczyną
wielu błędów popełnianych zwłaszcza przez początkujących programistów.
W tabeli 1.3 zestawiliśmy operatory arytmetyczne występujące w językach Pascal i
C+ + . Zwykle w algorytmach przedstawianych za pomocą schematu blokowego będziemy
się posługiwać operatorami zgodnymi z notacją Pascala - jest to tradycyjny sposób
zapisywania algorytmów. Podaliśmy teŜ operatory zgodne z językiem C++, poniewaŜ
będziemy ich uŜywać przy zapisie algorytmów w języku programowania.
2
Pascal C/C + +
+
+
*
*
/
/
div
/
mod
%
Znaczenie
dodawanie
odejmowanie
mnoŜenie
dzielenie
dzielenie całkowite, czyli zaokrąglające wynik
dzielenia do liczby całkowitej, np. 7/5 = 1
reszta z dzielenia liczb całkowitych
Tab. 1.3. Operatory arytmetyczne obowiązujące w językach Pascal i C/C+ +
Kolejna grupa operatorów to operatory relacji, czyli operatory badające relacje pomiędzy
wyraŜeniami (tab. 1.4).
Pascal C/C+ +
=
==
>
>
>=
>=
<
<
<=
<=
<>
!=
Znaczenie
równy
większy
większy lub równy
mniejszy
mniejszy lub równy
róŜny, czyli nieprawda, Ŝe równy
Tab. 1.4. Operatory relacji obowiązujące w językach Pascal i C/C+ +
Operatory relacji słuŜą do tworzenia wyraŜeń logicznych. WyraŜenia logiczne
charakteryzują się tym, Ŝe moŜemy im przypisać wartość logiczną „prawda" lub „fałsz". Na
przykład stwierdzamy: a < 4 lub b >= c + 1, albo badamy warunek prawdziwości relacji x < y.
Wówczas dla zadanych wartości zmiennych moŜemy w sposób jednoznaczny odpowiedzieć:
tak lub nie, co odpowiada wartościom logicznym: prawda lub fałsz.
Zapis w notacji Pascala: „a = b" zinterpretujemy jako pytanie: Czy wartości
argumentów a i b są sobie równe? Oczywiście, równieŜ tu odpowiedź jest jednoznaczna: albo
a jest równe b, albo a nie jest równe b.
Operator przypisania (podstawienia) opisuje operację nadania zmiennej
umieszczonej po lewej stronie operatora wartości wyraŜenia występującego po prawej stronie
tego operatora -jest to instrukcja przypisania. Do oznaczania tej instrukcji przyjmiemy
umownie oznaczenie operatora zgodnie ze składnią języka Pascal, czyli znak równości
poprzedzony dwukropkiem. W składni C+ + ten sam operator jest reprezentowany przez znak
równości (tab. 1.5).
Pascal C/C + +
operator przypisania
:=
=
Znaczenie
Tab. 1.5. Operator przypisania w językach Pascal i C/C+ +
Jeśli na przykład x jest zmienną przeznaczoną do przechowywani; liczb całkowitych,
to operację x : = 7 zinterpretujemy jako nadanie zmiennej x wartości 7. Po prawej stronie
operatora przypisania moŜe być umieszczone równieŜ wyraŜenie algebraiczne. W takim
wypadki najpierw będzie obliczone to wyraŜenie, a następnie wartość wyraŜeni; zostanie
przypisana zmiennej występującej po lewej stronie operatora Na przykład zapis x := x + 5
działa w następujący sposób: najpierw jest pobierana wartość zmiennej x, potem liczona
3
wartość wyraŜenia x + 5 i na końcu wartość ta zostaje przypisana zmiennej x. Jeśli więc
przed wykonaniem instrukcji zmienna x miała wartość 2, to po jej wykonaniu ma wartość 7.
Po lewej stronie operatora przypisania moŜna umieścić tylko zmienną. Nie moŜe tam
być stałej ani wyraŜenia.
Kolejną waŜną grupą operatorów, za pomocą których budujemy zło Ŝonę wyraŜenia logiczne,
są operatory logiczne (tab. 1.6):
Pascal C/C+ +
Znaczenie
and
&& koniunkcja (iloczyn zdań)
alternatywa (suma zdań)
or
||
negacja (zaprzeczenie zdania)
not
!
Zapis
matematyczn
∧
∨
~
Tab. 1.6. Operatory logiczne stosowane w językach Pascal i C/C++ oraz zapis matematyczny tych operatorów
Dla przykładu, jeśli x, y są współrzędnymi punktu P w kartezjańskim układzie
współrzędnych, to zapis (x>0 ) and (y>0) oznacza, Ŝe punkt P(x,y) naleŜy do I ćwiartki
układu. Jest to koniunkcja dwóch wyraŜeń logicznych prostych.
4

Podobne dokumenty