Laboratorium Informatyki instrukcja 1
Transkrypt
Laboratorium Informatyki instrukcja 1
Laboratorium Informatyki Studia niestacjonarne Instrukcja 1 - Algorytmika Ćwiczenie ma na celu zapoznanie z zagadnieniami związanymi z projektowaniem blokowych schematów algorytmicznych, symbolicznym przedstawieniem elementów algorytmów oraz metodologii procesu tworzenia blokowych schematów opisujących algorytmy. Elementem poprzedzającym pisanie kodu programu powinno być przygotowanie schematu jego działania (algorytmu). Algorytm programowania to ciąg czynności, dzięki którym możliwe jest wykonanie konkretnego zadania. Algorytm dla wielu określany jest jako pewien system, który ma poprowadzić dane zadanie od początku do samego końca. Może być samodzielną operacją, wykorzystywaną w dalszym procesie, ale może też być samym programem, dzięki czemu wiemy, że mają one szerokie zastosowanie. Jednym ze sposobów przedstawiania algorytmów są schematy blokowe. W niektórych sytuacjach korzystanie z nich jest bardzo wygodne. Schemat blokowy jest to układ figur geometrycznych (nazywanych skrzynkami lub blokami) połączonych ze sobą odcinkami prostymi lub łamanymi (ścieżki sterujące). Figury służą do przedstawiania rodzaju działań zaprojektowanych w algorytmie, zaś linie wskazują kolejność wykonywania tych działań. Każda figura w schemacie blokowym prezentuje określony rodzaj operacji. Zasadniczą zaletą schematów blokowych jest to, że graficznie prezentują one algorytm zarówno od strony występujących w nim działań, jak i ich kolejności. Elementy schematu blokowego • Strzałki — określają kierunek przepływu danych lub kolejność wykonywania działań. Powinny składać się z linii prostych, należy unikać łuków oraz krzyżowania się linii. • Operacje systemowe – (np. rozpoczęcie i zakończenie działania oraz instrukcje użycia innych algorytmów) — oznaczane za pomocą owalu, • Operacja START — oznacza punkt startu algorytmu (programu). Od tego bloku rozpoczyna się wykonywanie algorytmu. Występuje dokładnie jeden raz w każdym schemacie blokowym. • Operacja STOP — oznacza punkt zakończenia algorytmu (programu). Na tym bloku kończy się wykonywanie algorytmu. Najczęściej występuje jeden raz, jednakże dla zwiększenia czytelności schematu może zostać powtórzony wielokrotnie. • Blok wykonawczy – najczęściej reprezentuje instrukcje proste, tzn. wykonanie pojedynczej operacji niepodzielnej z punktu widzenia wykonawcy — oznaczane za pomocą prostokąta. Typowym zastosowaniem są operacje arytmetyczne, logiczne, podstawiania. Jeśli kilka operacji tworzy logiczną całość, to wszystkie można umieścić w jednym bloku. • operacje wejścia–wyjścia (tzn. pobieranie lub wysyłanie danych) — oznaczane za pomocą równoległoboku. W środku równoległoboku wpisuje się odpowiedni komentarz, odpowiadający żądanej operacji. Należy podkreślić, że inne operacje, nie będące operacjami wejścia / wyjścia oznaczane są innym blokiem— blokiem operacji. • instrukcje decyzyjne - w których wybór dalszej drogi postępowania zależy od spełnienia pewnego warunku logicznego — oznaczane za pomocą rombu z dwoma wyjściami odpowiadającymi możliwym wartościom warunku. Warunek logiczny znajduje się wewnątrz symbolu. Blok ten utożsamiany jest z operacją warunkową JEŻELI. Operacje warunkowe zawsze prowadzą do konieczności rozważenia dwóch dróg: jednej (TAK) kiedy rozpatrywany warunek jest spełniony i drugiej (NIE), kiedy rozpatrywany warunek nie jest spełniony. Przy zapisie warunku powinno się używać operatorów matematycznych =, ≠,<,>. • Blok proceduralny - proces uprzednio zdefiniowany — proces określony poza programem i z tego powodu nie wymagający zdefiniowania w rozpatrywanym programie (podprogram), przy definiowaniu tych elementów należy pamiętać, że ich wykonanie nie rozpoczyna się od START i nie kończy STOP (najczęściej podprogram kończy wykonanie instrukcji powrotu (RETURN) do głównego programu) • komentarze - nie mają wpływu na wykonanie, zawierają notatki autora schematu. Oznaczane są za pomocą klamry lub nawiasu. Ukośna kreska wskazuje (dotyka) komentowanego bloku. Łączniki - połączenie z inną częścią schematu blokowego, np. gdy nie mieści się on na jednej stronie. • Łącznik stronnicowy (rys.6) — oznacza łączenie w obrębie jednej strony. Używany w przypadku, gdy użycie strzałki znacząco zmniejszyłoby czytelność schematu. Poszczególne łączniki oznacza się liczbami całkowitymi. Zawsze istnieją dwa łączniki oznaczone tym samym numerem: jeden źródłowy, drugi — docelowy. • Łącznik międzystronnicowy — używany w przypadku, gdy konieczne jest przeniesienie sterowania między stronami (arkuszami papieru) schematu. Zasady jego użycia są analogiczne do zasad użycia łącznika stronnicowego. Poszczególne łączniki oznacza się liczbami całkowitymi. Zawsze istnieją dwa łączniki oznaczone tym samym numerem: jeden źródłowy, drugi — docelowy. • Punkt koncentracji — blok używany dla podniesienia czytelności schematu. Oznacza miejsce, do którego wpływa kilka strzałek. Rysuje się go w postaci punktu. Schemat blokowy tworzony jest według następujących reguł: 1. Schemat blokowy składa się z bloków połączonych zorientowanymi liniami; 2. Bloki obrazują ciąg operacji; powinien być start i koniec; 3. Zawsze wykonywane są albo wszystkie instrukcje w bloku albo żadna; 4. Dalsze operacje nie zależą od poprzednich wariantów, chyba że zależności te zostały przekazane za pomocą danych; 5. Kolejność wykonania operacji jest ściśle określona przez zorientowane linie łączące poszczególne bloki; 7. Do każdego bloku może prowadzić co najwyżej jedna linia; 8. Linie mogą się łączyć ale nie mogą się rozdzielać (bez bloku decyzyjnego). Analiza przykładowych algorytmów Przykład prostego algorytmu na sumę trzech liczb. Przykładowy prosty algorytm obliczający średnią z 3 liczb. Przykładowy rozgałęziony algorytm (dzielenie dwóch liczb) Większe projekty wymagają aby wraz ze schematem blokowym definiować listę kroków, proste relacje w języku programowania, wprowadzać komentarze. Należy pamiętać, że wiele aplikacji może mieć różne konfiguracje schematów – a wynik będą wskazywały ten sam. Często prowadzi to do prac optymalizujących cały algorytm. Pomocne mogą być przy wielowątkowych aplikacjach wprowadzenie wspólnej kolorystyki bloków. Umożliwiają to dedykowane schematom blokowym programy. Przykład poniżej to pokolorowany algorytm prezentujący poszukiwanie większej z dwóch liczb a,b. program porownanie; var a,b : integer; begin write(‘podaj a’); readln(a); write(‘podaj b’); readln(b); if a > b then writeln(‘większa była’, a) else if a = b writeln(‘sa rowne’) else writeln(‘wieksza była’, b) end. Do realizacji diagramów graficznych można wykorzystać wiele programów, w tym nawet proste programy graficzne. Na laboratorium wykorzystywany będzie darmowy program Diagram Designer. Aktualną wersje programu można ściągnąć ze strony projektu: http://meesoft.logicnet.dk/ Realizacja ćwiczenia laboratoryjnego Zapoznać się z wprowadzeniem teoretycznym budowania schematów blokowych. Następnie uruchomić program do rysowania diagramów (Diagram Designer). Zapoznać się z jego interfejsem. Przerysować wszystkie przykłady, zapisać diagramy w formacie podstawowym (ddd) oraz w postaci pliku graficznego. Ostatnim etapem zajęć jest wykonanie zadań zleconych przez prowadzącego lub opracowanie poniższych. ZADANIA DO SAMODZIELNEGO WYKONANIA 1. Określić schemat algorytmu prezentującego rozwiązanie wielomianu stopnia drugiego (ax2+bx+c=0). Algorytm powinien podawać rzeczywiste rozwiązania lub ich brak. 2. Określić schemat algorytmu prezentującego obliczanie wartości funkcji f ( x) = x x Podpowiedź: W matematyce opis słowny przedstawiamy następująco: Przykładowy algorytm w postaci listy kroków może być następujący Dane wejściowe: Dowolna liczba rzeczywista x. Wynik końcowy : Wartość funkcji f(x) Krok 1. Wczytaj wartość danej x. Krok 2. Jeśli x > 0, to f(x)=1. Zakończ algorytm. Krok 3. Jeśli x = 0, to f(x)=0. Zakończ algorytm. Krok 4. Jeśli x < 0, to f(x)=-1. Zakończ algorytm. 3. Zdefiniować algorytm prezentujący poszukiwanie największej z trzech liczb a,b,c. 4. Zdefiniować w sposób graficzny algorytm sprawdzający, czy suma dwóch liczb podanych przez użytkownika jest parzysta. 5. Narysować schemat blokowy programu wyznaczającego sumę liczb podawanych z klawiatury tak długo, aż użytkownik nie wprowadzi liczby zero.