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