INFORMATYKA W SZKOLE Dr inż. Grażyna KRUPIŃSKA grazyna@fis.agh.edu.pl D-10 pokój 227 Podyplomowe Studia Pedagogiczne
2 Algorytmy Nazwa algorytm wywodzi się od nazwiska perskiego matematyka Muhamed ibn Musy al-chorezmi (z Chorezmu), który ok. 820 roku n.e. opisał pozycyjny system kodowania dziesiętnego liczb i sztukę liczenia w tym systemie. W XII w. Europie przetłumaczono jego książkę i rozpoczęto wykonywanie obliczeń metodą "pisemną".
Algorytmy 3 Algorytmem nazywamy skończony ciąg instrukcji prowadzących do rozwiązania danego problemu lub zadania. Jest to przepis postępowania prowadzący do osiągnięcia jakiegoś celu. Implementacja to zapis algorytmu w języku programowania.
Algorytmy 4 Algorytmika - podstawowy dział informatyki poświęcony poszukiwaniom, konstruowaniu i badaniom algorytmów, zwłaszcza w kontekście ich przydatności do rozwiązywania problemów za pomocą komputerów. Program komputerowy - to logicznie uporządkowany ciąg instrukcji języka programowania realizujący algorytm.
Algorytmizacja zadania 5 Sformułowanie zadania Określenie danych wejściowych Określenie celu, czyli oczekiwanego wyniku Poszukanie metody rozwiązania, czyli algorytmu Przedstawienie algorytmu w postaci opisu słownego listy kroków schematu blokowego języka programowania Analiza poprawności rozwiązania Testowanie rozwiązania dla różnych danych ocena efektywności przyjętej metody
Cechy algorytmu 6 Skończoność (realizowany ciąg operacji powinien mieć swój koniec). Określoność (zarówno operacje, jak i porządek ich wykonywania powinny być ściśle określone, nie zostawiając miejsca na dowolną interpretację użytkownika). Ogólność (algorytm nie ogranicza się do jednego, pojedynczego, szczegółowego przypadku, ale odnosi się do pewnej klasy zadań). Efektywność (algorytm powinien prowadzi do rozwiązania możliwie najprostszą drogą).
Algorytmy 7 Liniowe - po każdym kroku jako kolejna wykonywana jest zawsze ta sama instrukcja. Algorytm liniowy posiada tylko i wyłącznie instrukcje bezpośredniego następstwa. Są one wykonywane w przewidzianej kolejności bez względu na dane, na których algorytm operuje. liczenie pola powierzchni
Algorytmy 8 Warunkowe (nazywanymi też algorytmami z rozgałęzieniami) może nastąpić kilka alternatywnych ciągów działań. Wybór jednego z nich następuje w zależności od spełnienia (bądź niespełnienia) warunku. sprawdzanie czy liczba jest dodatnia
Algorytmy 9 Iteracyjne występuje powtarzanie danego ciągu operacji. Liczba powtórzeń może być ustalona przed wykonaniem instrukcji lub może zależeć od spełnienia pewnego warunku, który jest sprawdzany w każdej iteracji. Iteracja inaczej zwana jest pętlą. sumowanie kilku kolejnych liczb
Opis słowny 10 Kontrola biletów Dane wejściowe: rok urodzenia Dane wyjściowe: decyzja o wpuszczeniu na seans Każdemu wchodzącemu należy sprawdzić wiek, odejmując od obecnego roku jego rok urodzenia. Jeżeli wchodzący ma 18 lub więcej lat należy go wpuścić do sali, w przeciwnym wypadku nie.
11 Lista kroków Kontrola biletów Dane wejściowe: rok urodzenia Dane wyjściowe: decyzja o wpuszczeniu na seans 1. Podaj rok urodzenia wchodzącego 2. Odejmij od obecnego roku rok urodzenia wchodzącego 3. Jeżeli wynik < 18 nie wpuszczaj do sali 4. Jeżeli wynik 18 wpuść do sali
Schemat blokowy 12 Algorytm w postaci schematu blokowego jest graficzną reprezentacją słownego zapisu algorytmu
Schemat blokowy 13 START STOP Skrzynki graniczne - wskazują początek i koniec wykonywania schematu blokowego. S a + b Skrzynka operacyjna (instrukcji) Wprowadź Wyprowadź Skrzynki wejścia/wyjścia dane lub wyniki.
Schemat blokowy 14 S > 10 Nie Tak Skrzynka warunku jest rombem, w którym umieszcza się warunek decydujący o dalszej kolejności wykonywania operacji.
Tak Start popatrz w lewo czy cos jedzie Nie Przejście przez ulicę przejdź do osi jezdni popatrz w prawo Schemat blokowy iteracyjny (warunkowy) Tak czy cos jedzie Nie przejdź przez jezdnię
Zmienne Zmienna jest synonimem pewnego obszaru pamięci, służącego do przechowywania danych. Posiada trzy podstawowe atrybuty: symboliczną nazwę identyfikator, miejsce przechowywania, wartość; Za pomocą nazwy możemy w kodzie źródłowym odwołać się do zawartości. W programie wartość zmiennej może być odczytywana lub zastępowana nową wartością, tak więc wartość zmiennej może zmieniać się w trakcie wykonywania programu. Nazwa i miejsce przechowywania nie zmieniają się w trakcie istnienia zmiennej
Zmienne Abstrakcja komórek pamięci: programista może przechowywać dane w pamięci, nie martwiąc się o techniczne szczegóły (np. przydział pamięci). Odpowiedniość między zmiennymi, a komórkami pamięci może być bezpośrednia (np. dla zmiennych typu całkowitego) odległa (np. wielowymiarowe tablice).
Zmienna Nazwa Adres liczba 23 Zakres widoczności Okres życia Wartość Typ
Typy danych Typ to pewien ustalony zbiór wartości, które mogą być przyjmowane przez zmienne. Z każdym typem związany jest rozmiar przydzielanej pamięci dla zmiennej danego typu. Z każdym typem związany jest zbiór operacji, które można wykonywać na wartościach z tego typu. Dozwolone operacje to wszystkie operatory, których dziedziną jest typ lub typ z nim zgodny (tu zgodność rozumiana jako zawieranie).
Schemat blokowy - liniowy 20 START Podaj (a) Podaj (b) Obliczanie sumy dwóch liczb S a + b STOP Wypisz S
Schemat blokowy - liniowy 21 START Podaj (a) Pole a * a Obliczanie pola kwadratu Wypisz Pole STOP
Schemat blokowy - warunkowy 22 START Podaj (a) Obliczanie wartości bezwzględnej Tak wynik a a 0 Nie wynik -a STOP Wypisz wynik
Start Czytaj N (2) S 0 L N N 2 S 0 L 2 Tak L > 0 Nie S 2 L 1 S 3 L 0 S S + L L L 1 Pisz S Schemat blokowy iteracyjny (z licznikiem) Obliczanie sumy N-kolejnych liczb naturalnych
Start Czytaj N S 0 N 2 S 0 N 2 Tak N > 0 Nie S 2 N 1 S 3 N 0 S S + N N N 1 Pisz S Schemat blokowy iteracyjny (z licznikiem) Obliczanie sumy N-kolejnych liczb naturalnych
Start Czytaj N S 0 Tak N > 0 Nie S S +N N N 1 Pisz S Schemat blokowy iteracyjny (z licznikiem) Obliczanie sumy N-wczytanych liczb naturalnych
Start Czytaj N S 0 Czytaj Liczba Tak N > 0 Nie S S + L N N 1 Pisz S
Start Czytaj N S 0 Czytaj Liczba Tak N > 0 Nie S S + Liczba N N 1 Pisz S
Start Czytaj N S 0 Czytaj Liczba N 3 S 0 Liczba 2 S 2 N 2 Liczba 4 Czytaj Liczba Tak N > 0 Nie S 6 N 1 Liczba 4 S 10 N 0 Liczba 5 S S + Liczba N N 1 Pisz S
Start Czytaj N S 0 N 3 S 0 Liczba 2 S 2 N 2 Liczba 4 N 3 S 0 Liczba 2 S 2 N 2 Tak Czytaj Liczba N > 0 Nie S 6 N 1 Liczba 4 S 10 N 0 Liczba 5 Liczba 4 S 6 N 1 Liczba 4 S 10 N 0 S S + Liczba N N 1 Pisz S
Start Czytaj N S 0 Tak N > 0 Nie Czytaj Liczba Pisz S S S + Liczba N N 1 Minimalna wartość z N-wczytanych liczb naturalnych
Start Czytaj N S 0 Tak Czytaj Liczba S <=30 Nie Wypisz Liczba Pisz S S S + Liczba Wczytywanie liczb aż suma > 30
Start Czytaj N Czytaj Liczba S Liczba S S + Liczba Tak S <=30 Nie Wypisz Liczba Wczytaj Liczba Wypisz Suma Wczytywanie liczb suma > 30, z przekroczeniem
Start Czytaj N S 0 Czytaj Liczba Min Liczba S S + Liczba N N 1 Min Liczba Tak N > 0 Nie Tak Nie Czytaj Liczba Pisz S Min > Liczba Pisz Min S S + Liczba N N 1
Rysowanie wzoru * * * * * * * * * * Start Czytaj N Tak Pisz * N > 0 Nie N N 1
Rysowanie wzoru * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Start Czytaj N Tak Pisz * N > 0 Nie Trzeba powtórzyć trzy razy N N 1
Rysowanie wzoru * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Start Czytaj linia N linia ile 3 N > 0 Nie Pisz \n Tak Pisz * N linia ile ile 1 N N 1 ile > 0 Tak Nie
Rysowanie wzoru * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Start Czytaj linia N linia ile 3 N > 0 Nie Pisz \n Tak Pisz * N linia ile ile 1 N N 1 ile > 0 Tak Nie
Rysowanie wzoru * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Start Czytaj ile N ile Tak N > 0 Nie Pisz \n Pisz * N ile ile ile 1 N N 1 ile > 0 Tak Nie
Rysowanie wzoru * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * Start Czytaj ile N 1 Tak Pisz * N > 0 N N+1 Nie Pisz \n ile ile 1 N N 1 ile > 0 Tak Nie
Systemy pozycyjne System pozycyjny o dowolnej podstawie p p > 1 W systemie tym mamy p cyfr, które oznaczymy c i Zapisujemy pewną liczbę za pomocą n cyfr: c n-1 c n-2... c 2 c 1 c 0
Systemy pozycyjne wagi pozycji 0 1 2 2 1... p p p p p n n 0 1 2 2 1... c c c c c n n 1 1 2 2 2 2 1 1 0 0... n n n n p c p c p c p c p c 1 0 n i i c i p
Systemy pozycyjne p = 7, zbiór cyfr to {0,1,2,3,4,5,6} 43521 (7) =??? (10) 43521 (7) = 1 * 7 0 + 2 * 7 1 + 5 * 7 2 + 3 * 7 3 + 4 * 7 4 43521 (7) = 1 * 1 + 2 * 7 + 5 * 49 + 3 * 343 + 4 * 2401 43521 (7) = 10893 (10)
Systemy pozycyjne p = 17, zbiór cyfr to {0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F,G} AGF63B (17) =??? (10) AGF63B (17) = 11 * 17 0 + 3 * 17 1 + 6 * 17 2 + 15 * 17 3 + 16 * 17 4 + 10 * 17 5 AGF63B (17) = 11 *1 + 3 * 17 + 6*289 + 15 *4.913 + 16 *83.521 + 10*1.419.857 AGF63B (17) = 15 610 397 (10)
Systemy pozycyjne Podany sposób obliczania wartości liczby zapisanej w dowolnym systemie pozycyjnym jest poprawny, lecz z punktu widzenia wykonywania obliczeń czasochłonny, ponieważ występują w nim potęgi podstawy. Działanie potęgowania jest czasochłonne - komputery dużo szybciej wykonują mnożenie i dodawanie.
Schemat Hornera Sposób obliczenia wartości wielomianu dla danej wartości argumentu wykorzystujący minimalną liczbę mnożeń. L = C 4 p 4 + C 3 p 3 + C 2 p 2 + C 1 p 1 + C 0 p 0 Ponieważ p 1 = p oraz p 0 = 1 L = C 4 p 4 + C 3 p 3 + C 2 p 2 + C 1 p + C 0
Schemat Hornera L = C 4 p 4 + C 3 p 3 + C 2 p 2 + C 1 p + C 0 L = p*( C 4 p 3 + C 3 p 2 + C 2 p 1 + C 1 )+ C 0 L = p*(p*( C 4 p 2 + C 3 p 1 + C 2 ) + C 1 )+ C 0 L = p*(p*( p*(c 4 p 1 + C 3 )+ C 2 ) + C 1 )+ C 0 L = p*(p*( p*(p*(c 4 )+ C 3 )+ C 2 ) + C 1 )+ C 0
Schemat Hornera L = p*(p*( p*(p*(c 4 )+ C 3 )+ C 2 ) + C 1 )+ C 0 Możemy przekształcić ze względu na przemienność mnożenia: L = (((C 4 *p + C 3 )* p + C 2 ) *p + C 1 ) *p + C 0
Dla wielomianu n-tego stopnia w zwykłej postaci należy wykonać Schemat n*(1+n)/2 Hornera mnożeń, a dla wielomianu po zastosowaniu schematu Hornera tylko n mnożeń! L = ((((C 4 ) *p + C 3 )* p + C 2 ) *p + C 1 ) *p + C 0 Budujemy algorytm : L 0 = C 4 - wartość początkowa L 1 = L 0 p + C 3 = C 4 p + C 3 L 2 = L 1 p + C 2 = (C 4 p + C 3 ) p + C 2 = C 4 p 2 + C 3 p + C 2 L 3 = L 2 p + C 1 = (C 4 p 2 + C 3 p + C 2 ) p + C 1 = C 4 p 3 + C 3 p 2 + C 2 p + C 1 L 4 = L 3 p + C 0 = (C 4 p 3 + C 3 p 2 + C 2 p + C 1 ) p + C 0 = C 4 p 4 + C 3 p 3 + C 2 p 2 + C 1 p + C 0
Struktury danych - tablice Tablica jednowymiarowa - to zestaw elementów takiego samego typu. Dostęp do poszczególnych elementów jest poprzez indeksowanie. 6 liczba1 6 tablica[1] 7 liczba2 7 tablica[2] 15 liczba3 15 tablica[3]
Tablica jednowymiarowa Tablica jednowymiarowa - to zestaw elementów takiego samego typu. Dostęp do poszczególnych elementów jest poprzez indeksowanie. 6 liczba1 indeks 1 6 tablica[1]=6 7 liczba2 indeks 2 7 tablica[2] = 7 15 liczba3 indeks 3 15 tablica[3] = 15
Tablica jednowymiarowa Wczytanie zawartości tablicy 3elementowej Start wczytaj tab[1] wczytaj tab[2] Start i 1 i 3 Nie wczytaj tab[3] Tak 6 tablica[1] wczytaj tab[i] 7 tablica[2] 15 tablica[3] i i + 1
Tablica jednowymiarowa Wczytanie i wypisanie zawartości tablicy 3elementowej Start i 1 i 3 Nie i 1 Tak 6 tablica[1] wczytaj tab[i] i i + 1 Nie i 3 Tak wypisz tab[i] 7 15 tablica[2] tablica[3] i i + 1
Tablica jednowymiarowa Start i 1 i 3 Nie i 3 Tak 6 tablica[1] wczytaj tab[i] i i + 1 Nie i 1 Tak wypisz tab[i] 7 15 tablica[2] tablica[3] i i - 1
Tablica jednowymiarowa Dane wejściowe : 10-cio elementowa tablica liczb całkowitych Dane wyjściowe: suma elementów tablicy Start wczytaj : A[1],,A[10] Suma 0 licznik 1 licznik <=10 Suma Suma + A[licznik] licznik licznik + 1 Wypisz Suma
Tablica jednowymiarowa Dane wejściowe : 10-cio elementowa tablica liczb całkowitych Dane wyjściowe: najmniejszy elementów tablicy Start wczytaj : A[1],,A[10] Min A[1] licznik 2 A[licznik]< Min licznik <=10 licznik licznik + 1 Min A[licznik] Wypisz Min
Tablica jednowymiarowa Dane wejściowe : 10-cio elementowa tablica liczb całkowitych Dane wyjściowe: najmniejszy elementów tablicy Start wczytaj : A[1],,A[10] Min Min A[1] 1 licznik 2 A[licznik]< A[Min] licznik <=10 licznik licznik + 1 Min Min A[licznik] Wypisz Min Wypisz A[Min]
Tablica jednowymiarowa Dane wejściowe : 10-cio elementowa tablica liczb całkowitych Dane wyjściowe: najmniejszy elementów tablicy Start wczytaj : A[1],,A[10] Min Min A[1] 1 licznik 2 A[licznik]< A[Min] licznik <=10 licznik licznik + 1 Min Min A[licznik] Wypisz Min Wypisz A[Min]
Sortowanie Dane wejściowe : trzy liczby w dowolnym porządku Dane wyjściowe: trzy liczby w porządku rosnącym Start wczytaj : a, b, c a>b a b b > c a > c a c b c
Tablica jednowymiarowa Dane wejściowe : 10-cio elementowa tablica liczb całkowitych Dane wyjściowe: posortowana 10-cio elementowa tablica liczb całkowitych Start wczytaj : A[1],,A[10] Min Min A[1] 1 licznik 2 A[licznik]< A[Min] licznik <=10 licznik licznik + 1 Min Min A[licznik] Wypisz Min Wypisz A[Min]
Tablica jednowymiarowa Start wczytaj : A[1],,A[10] Min 1 licznik 2 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 Wypisz Min Wypisz A[Min] 1 2 3 26 7 15
Tablica jednowymiarowa Start wczytaj : A[1],,A[10] Min 1 licznik 2 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 Wypisz Min Wypisz A[Min] 1 2 3 26 7 15
Tablica jednowymiarowa Start wczytaj : A[1],,A[10] Min 1 licznik 2 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 Wypisz Min Wypisz A[Min] 1 2 3 26 7 15
Tablica jednowymiarowa Start wczytaj : A[1],,A[10] Min 1 licznik 2 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[1] Wypisz A[Min] 1 2 3 26 7 15
Tablica jednowymiarowa Start wczytaj : A[1],,A[10] Min 1 licznik 2 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 1 2 3 26 7 15 A[Min] A[1] Wypisz A[Min] 1 2 3 7 26 15
Tablica jednowymiarowa Start wczytaj : A[1],,A[10] Min 1 licznik 2 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[1] Wypisz A[Min] 1 2 3 7 26 15
Tablica jednowymiarowa Start wczytaj : A[1],,A[10] Min 2 licznik 3 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 1 2 3 7 26 15 A[Min] A[1] Wypisz A[Min]
Tablica jednowymiarowa Start wczytaj : A[1],,A[10] Min 2 licznik 3 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 1 2 3 7 26 15 A[Min] A[1] Wypisz A[Min]
Tablica jednowymiarowa Start wczytaj : A[1],,A[10] Min 2 licznik 3 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 1 2 3 7 26 15 1 2 3 A[Min] A[2] Wypisz A[Min] 7 15 26
Tablica jednowymiarowa Start wczytaj : A[1],,A[10] Min 2 licznik 3 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 1 2 3 7 26 15 1 2 3 A[Min] A[2] Wypisz A[Min] 7 15 26
Start wczytaj : tablice A pocz 1 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[2] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 26 7 15 1 5 6 36 8 11 55
Start wczytaj : tablice A pocz 1 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 26 7 15 1 5 6 36 8 11 55
Start wczytaj : tablice A pocz 1 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 26 7 15 1 5 6 36 8 11 55
Start wczytaj : tablice A pocz 1 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 7 15 26 5 6 36 8 11 55
Start wczytaj : tablice A pocz 1 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 7 15 26 5 6 36 8 11 55
Start wczytaj : tablice A pocz 2 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 7 15 26 5 6 36 8 11 55
Start wczytaj : tablice A pocz 2 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 7 15 26 5 6 36 8 11 55
Start wczytaj : tablice A pocz 2 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 5 15 26 7 6 36 8 11 55
Start wczytaj : tablice A pocz 2 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 5 15 26 7 6 36 8 11 55
Start wczytaj : tablice A pocz 3 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 5 15 26 7 6 36 8 11 55
Start wczytaj : tablice A pocz 3 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 5 15 26 7 6 36 8 11 55
Start wczytaj : tablice A pocz 3 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 5 6 26 7 15 36 8 11 55
Start wczytaj : tablice A pocz 4 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 5 6 26 7 15 36 8 11 55
Start wczytaj : tablice A pocz 4 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 5 6 26 7 15 36 8 11 55
Start wczytaj : tablice A pocz 5 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 5 6 7 26 15 36 8 11 55
Start wczytaj : tablice A pocz 6 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 5 6 7 8 15 36 26 11 55
Start wczytaj : tablice A pocz 7 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 5 6 7 8 11 36 26 15 55
Start wczytaj : tablice A pocz 8 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 5 6 7 8 11 15 26 36 55
Start wczytaj : tablice A pocz 9 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 5 6 7 8 11 15 26 36 55
Start wczytaj : tablice A pocz 10 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 5 6 7 8 11 15 26 36 55
Start wczytaj : tablice A pocz 10 Min pocz licznik pocz+1 licznik licznik + 1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] Wypisz A[Min] 1 2 3 4 5 6 7 8 9 10 1 5 6 7 8 11 15 26 36 55
Start wczytaj : tablice A pocz 1 pocz < 9 Min pocz licznik pocz+1 A[licznik]< A[Min] Min licznik licznik <=10 A[Min] A[pocz] licznik licznik + 1 pocz pocz+1
Listy, kolejki, drzewa Kolejka FIFO (First In First Out) Kolejka LIFO (Last In First Out) - Stos
Kolejka FIFO 1. Sprawdzenie, czy kolejka jest pusta operacja empty zwraca true, jeśli kolejka nie zawiera żadnego elementu, w przeciwnym razie zwraca false. 2. Odczyt elementu z początku kolejki operacja front zwraca wskazanie do elementu, który jest pierwszy w kolejce. 3. Zapis elementu na koniec kolejki operacja push dopisuje nowy element na koniec elementów przechowywanych w kolejce. 4. Usunięcie elementu z kolejki operacja pop usuwa z kolejki pierwszy element.
Kolejka FIFO - tablica ograniczona długość kolejki n rozmiar tablicy Q indeks początku kolejki first ilość elementów w kolejce count 0 1 2 3 4 5 6 7 08 9 first = 0 count = 5 indeks końcowy = first + count
Kolejka FIFO - empty Wejście Q tablica count liczba elementów przechowywana w kolejce first indeks początku kolejki Wyjście: true, jeśli kolejka jest pusta, false jeśli kolejka niepusta K01: Jeśli count = 0, to wynik true K02: Zakończ z wynikiem false 0 1 2 3 4 5 6 7 08 9 first = 0 count = 5 indeks końcowy = first + count
Kolejka FIFO - front 0 1 2 3 4 5 6 7 08 9 first = 0 count = 5 indeks końcowy = first + count K01: Jeśli count = 0, to komunikat, że kolejka pusta K02: Wynik wartość Q[first];
Kolejka FIFO - pop x 0 1 2 3 4 5 6 7 08 9 first = 0 count = 5
Kolejka FIFO - pop x 0 1 2 3 4 5 6 7 08 9 K01 Jeśli count = 0, to zakończ K02: count count - 1 K03: x Q[first] K03: first first + 1 K04: Zakończ first = 1 count = 4
Kolejka FIFO - pop 0 1 2 3 4 5 6 7 08 9 x K01 Jeśli count = 0, to zakończ K02: count count - 1 K03: x Q[first] K03: first first + 1 K04: Jeśli first = n, to first 0 K05: Zakończ 0 1 2 3 4 5 6 7 8 9 first = 9 count = 6 x first = 0 count = 5
Kolejka FIFO - push 0 1 2 3 4 5 6 7 8 9 first = 0 count = 5 x 0 1 2 3 4 5 6 7 8 9 K01: Jeśli count = n, to zakończ K02: i first + count K03: Q[i] x, K04: count count + 1, K05: zakończ first = 0 count = 6
Kolejka FIFO - push 0 1 2 3 4 5 6 7 8 9 x first = 3 count = 8 i = 8 + 3-10 = 1 K01: Jeśli count = n, to zakończ K02: i first + count K03: Q[i] x, K04: count count + 1, K05: zakończ 0 1 2 3 4 5 6 7 8 9 first = 3 count = 9
Kolejka FIFO - push 0 1 2 3 4 5 6 7 8 9 x first = 3 count = 8 i = 8 + 3-10 = 1 K01: Jeśli count = n, to zakończ K02: i first + count K03: jeśli i n to i i-n, K04: Q[i] x, K05: count count + 1, K06: zakończ 0 1 2 3 4 5 6 7 8 9 first = 3 count = 9
Schematy blokowe start pobierz a, b c a mod b a b wypisz a b c stop b = 0
start a, b Program NWD; dane wejściowe: a, b; dopóki b <> 0 wykonuj{ pod c podstaw mod(a,b) podstaw za a liczbę b; podstaw za b liczbę c;} rezultat: a; b <> 0 c a mod b a b zwróć a b c stop
Podprogramy Mówiąc o podprogramach będziemy zakładali : każdy podprogram posiada jeden punkt wejścia; program wywołujący podprogram zostaje zawieszony na czas działania podprogramu; sterowanie zawsze powraca do programu wywołującego w momencie zakończenia działania podprogramu.
Program NWD; dane wejściowe: a, b; dopóki b > 0 wykonuj; wywołaj podprogram mod(a,b) podstaw wynik do c; (c mod (a,b)) podstaw za a liczbę b; podstaw za b liczbę c; podstaw za rezultat liczbę a; rezultat: rezultat; podprogram mod(m,n); podstaw za i liczbę 0; dopóki i *n m wykonuj; podstaw za j wartość m (i * n); powiększ i o liczbę 1; podstaw za reszta liczbę j; rezultat: reszta;
Podprogramy start wczytaj a, b a, b start n n a m m b b>0 wypisz a i*n m j stop stop c mod (a,b) j m-(n*i) a b b c j i i+1
Podprogramy start wczytaj a, b a, b start n n a m m b b>0 wypisz a i*n m j stop stop c mod (a,b) j m-(n*i) a b b c j i i+1
Podprogramy Przekazywanie parametrów odbywa się za pośrednictwem stosu tak jest w zdecydowanej większości języków programowania. Przekazywanie przez wartość i/lub wynik jest realizowane poprzez kopiowanie wartości na stos/ze stosu. Odpowiednia komórka pamięci na stosie jest alokowana w chwili wywołania podprogramu. W trakcie działania podprogramu funkcjonuje ona jako zmienna lokalna. Przekazywanie przez referencję jest realizowane poprzez umieszczenie odpowiedniego adresu na stosie. Jeśli parametr aktualny jest stałą (a w szczególności literałem, np. abc, 12.34), to na stosie trzeba umieścić jej adres. Kompilator nie może pozwolić, by parametr taki był zmieniany. Jeśli parametr aktualny jest wyrażeniem, na stosie trzeba umieścić adres komórki pamięci z wynikiem wyrażenia.