Podprogramy, czyli procedury Przykład zastosowania: dane
Transkrypt
Podprogramy, czyli procedury Przykład zastosowania: dane
Podprogramy, czyli procedury Zarys schematu blokowego: Przykład zastosowania: start K0 ustaw wskaźnik znaku na pierwszej literze tekstu WEWNĄTRZ TEKSTU dane wejściowe – poprawnie zredagowany tekst w języku polskim K – licznik zdań zawierających ciąg znaków „algorytm” wynik - liczba zdań zawierających słowo „algorytm” szukanie ciągu znaków „algorytm” szukanie ciągu znaków „. ” Sprawdź tyle kolejnych znaków, ile liczy szukany ciąg czy jest „algorytm” ? TAK NIE Przesuń wskaźnik na następny znak sprawdzając, czy nie jest to koniec tekstu podaj stan licznika K stop KONIEC TEKSTU WEWNĄTRZ TEKSTU Sprawdź tyle kolejnych znaków, ile liczy szukany ciąg Nie interesują nas algorytmy, które nie działają dobrze dla wszystkich danych wejściowych odpowiadających specyfikacji. Zwykle łatwo znaleźć algorytm, NIE czy jest „. ”? TAK który działa dobrze... Przesuń wskaźnik na następny znak sprawdzając, czy nie jest to koniec tekstu podaj stan licznika K stop KONIEC TEKSTU KK+1 Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r. 1 Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r. 2 start podaj opis procedury znajdź_tekst (X) Procedura znajdź_tekst (X) K0 ustaw wskaźnik znaku na pierwszej literze tekstu początek procedury start wywołaj procedurę znajdź_tekst („algorytm”) Sprawdź tyle kolejnych znaków, ile liczy szukany ciąg czy jest X? NIE Przesuń wskaźnik na następny znak sprawdzając, czy nie jest to koniec tekstu WEWNĄTRZ TEKSTU Procedura Sprawdź tyle kolejnych znaków, ile liczy szukany ciąg wywołaj procedurę znajdź_tekst („. ”) podaj stan licznika K TAK K0 ustaw wskaźnik znaku na pierwszej literze tekstu stop czy jest „algorytm” ? TAK NIE podaj stan licznika K WEWNĄTRZ TEKSTU Procedura Sprawdź tyle kolejnych znaków, ile liczy szukany ciąg koniec procedury i powrót do programu głównego Program główny NIE czy jest „. ”? TAK stop KONIEC TEKSTU KK+1 KONIEC TEKSTU Przesuń wskaźnik na następny znak sprawdzając, czy nie jest to koniec tekstu Przesuń wskaźnik na następny znak sprawdzając, czy nie jest to koniec tekstu podaj stan licznika K stop KONIEC TEKSTU KK+1 Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r. 3 Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r. 4 Zalety stosowania procedur przy budowie algorytmów: ALGORYTM Zwartość opisu algorytmu procedura Czytelność struktury programu Możliwość zastosowania „analitycznej” metody budowania algorytmu, czyli rozłożenia całego programu na podprogramy opracowywane oddzielnie PROCESOR A→B→C→ wywołanie procedury → ... → X → Y → Z proces główny Możliwość zastosowania „syntetycznej” metody budowania algorytmu, czyli składanie programu z wcześniej dopracowanych podprogramów zakończenie procedury K → L → M → ... → R → S Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r. podproces 5 Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r. 6 1 REKURENCJA Idea rozwiązania rekurencyjnego: Wywołanie procedury wewnątrz niej samej 1. Problem „wież Hanoi” dla N krążków: 2. T(N−1) 1 3. 4. T(N−1) dane wejściowe - trzy kołki i N krążków o różnych średnicach wynik - sekwencja ruchów przenosząca krążki z pierwszego kołka na kołek trzeci zgodnie z zadanymi regułami Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r. 7 Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r. 8 Rozwiązanie algorytmiczne: A B Procedura przenieś (N) krążków z (X) na (Y) używając (Z) 1. jeśli N = 1, to wypisz ruch „X → Y”, 2. w przeciwnym razie (tj. jeśli N > 1) wykonaj co następuje: 2.1. Wywołaj procedurę przenieś (N – 1) krążków z (X) na (Z) używając (Y), 2.2. Wypisz ruch „X → Y”, 2.1. Wywołaj procedurę przenieś (N – 1) krążków z (Z) na (Y) używając (X), 3. wróć do poziomu wywołania procedury. C Oznaczmy przez X → Y przeniesienie szczytowego krążka z kołka X na Y Wynik dla N = 3: A → B, A → C, B → C, A → B, C → A, C → B, A → B Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r. 9 Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r. Poziomy: 10 Stop Start Rozwiązanie dla trzech krążków: Przenieś 3 z A na B używając C 1. dla N = 3 Przenieś 2 z A na C używając B 2. dla N = 2 A B C 3. Przenieś 1 z A na B używając C A→C Przenieś 2 z C na B używając A A→B Przenieś 1 z B na C używając A Przenieś 1 z C na A używając B B→C C→A C→B Przenieś 1 z A na B używając C dla N = 1 Wywołaj procedurę A→B A→B przenieś (3) krążki z (A) na (B) używając (C) A→B A→C B→C A→B C→A C→B A→B 1 2 3 4 5 6 7 wywołanie Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r. 11 powrót na poziom wywołania Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r. proste następstwo 12 2 STRUKTURY DANYCH Przykładowe typy zmiennych (i danych): Elementy zbioru danych wejściowych, które opisują konkretny przypadek problemu algorytmicznego (zadanie) muszą zostać zapisane w pamięci (operacyjnej) przed rozpoczęciem działania algorytmu liczbowy (całkowity, rzeczywisty), znakowy (pojedynczy symbol z przyjętego alfabetu, ciąg symboli), Podstawową formą zapisania pojedynczego elementu zbioru danych, np. a, w pamięci jest utworzenie w niej zmiennej (pamięciowej), np. X, i przypisanie tego elementu jako jej wartości: X ← a wskaźnikowy (adres, pod którym można znaleźć w pamięci inną zmienną określonego typu) Odczytanie elementu z pamięci symbolizowane jest przez odwołanie się do wartości zmiennej: Zmienna ma nadaną nazwę, np. X i określony typ. np. X ← Y oznacza odczytanie z pamięci elementu będącego aktualną wartością zmiennej Y i przypisanie go zmiennej X; Zmienna symbolizuje pewien obszar pamięci, w którym można wielokrotnie zapamiętywać i z którego można odczytywać pojedyncze elementy zbioru danych z zachowaniem zgodności typu elementu i zmiennej. Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r. w obu obszarach pamięci symbolizowanych przez X i Y będzie po tej operacji przechowywany ten sam element zbioru danych 13 Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r. 14 Zmienne pamięciowe mogą być łączone w zespoły nazywane (abstrakcyjnymi) strukturami danych Jeśli w trakcie działania algorytmu struktura danych, utworzona przed rozpoczęciem jego działania, nie może być zmieniana w trakcie wykonywania algorytmu ani w zakresie liczby zmiennych, ani sposobu ich powiązania, to nazywamy ją strukturą statyczną W przeciwnym przypadku, jeśli dysponujemy operacjami, za pomocą których możemy modyfikować strukturę (np. usuwać jej fragmenty albo dodawać nowe) w trakcie działania algorytmu, to nazywamy ją strukturą dynamiczną Jarosław Sikorski - BUDOWA i ANALIZA ALGORYTMÓW, WIT 2006 r. 15 3