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