INFORMATYKA W SZKOLE Dr inż. Grażyna KRUPIŃSKA grazyna@fis.agh.edu.pl D-10 pokój 227 Podyplomowe Studia Pedagogiczne
Sortowanie Dane wejściowe : trzy liczby w dowolnym porządku Dane wyjściowe: trzy liczby w porządku rosnącym 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 A[1],,A[10] Min Min A[1] 1 licznik 2 licznik <=10 Min Min A[licznik] Min
Tablica jednowymiarowa A[1],,A[10] Min 1 licznik 2 licznik <=10 Min 26 7 15
Tablica jednowymiarowa A[1],,A[10] Min 1 licznik 2 licznik <=3 Min 26 7 15
Tablica jednowymiarowa A[1],,A[10] Min 1 licznik 2 licznik <=3 Min 26 7 15
Tablica jednowymiarowa A[1],,A[10] Min 1 licznik 2 licznik <=3 A[1] 26 7 15
Tablica jednowymiarowa A[1],,A[10] Min 1 licznik 2 licznik <=3 26 7 15 A[1] 7 26 15
Tablica jednowymiarowa A[1],,A[10] Min 1 licznik 2 licznik <=3 A[1] 7 26 15
Tablica jednowymiarowa A[1],,A[10] Min 2 licznik 3 licznik <=3 7 26 15 A[1]
Tablica jednowymiarowa A[1],,A[10] Min 2 licznik 3 licznik <=3 7 26 15 A[1]
Tablica jednowymiarowa A[1],,A[10] Min 2 licznik 3 licznik <=3 7 26 15 A[2] 7 15 26
Tablica jednowymiarowa A[1],,A[10] Min 2 licznik 3 licznik <=3 7 26 15 A[2] 7 15 26
tablice A pocz 1 Min pocz licznik pocz+1 licznik <=10 A[2] 4 5 6 7 8 9 10 26 7 15 1 5 6 36 8 11 55
tablice A pocz 1 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 26 7 15 1 5 6 36 8 11 55
tablice A pocz 1 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 26 7 15 1 5 6 36 8 11 55
tablice A pocz 1 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 7 15 26 5 6 36 8 11 55
tablice A pocz 1 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 7 15 26 5 6 36 8 11 55
tablice A pocz 2 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 7 15 26 5 6 36 8 11 55
tablice A pocz 2 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 7 15 26 5 6 36 8 11 55
tablice A pocz 2 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 5 15 26 7 6 36 8 11 55
tablice A pocz 2 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 5 15 26 7 6 36 8 11 55
tablice A pocz 3 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 5 15 26 7 6 36 8 11 55
tablice A pocz 3 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 5 15 26 7 6 36 8 11 55
tablice A pocz 3 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 5 6 26 7 15 36 8 11 55
tablice A pocz 4 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 5 6 26 7 15 36 8 11 55
tablice A pocz 4 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 5 6 26 7 15 36 8 11 55
tablice A pocz 5 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 5 6 7 26 15 36 8 11 55
tablice A pocz 6 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 5 6 7 8 15 36 26 11 55
tablice A pocz 7 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 5 6 7 8 11 36 26 15 55
tablice A pocz 8 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 5 6 7 8 11 15 26 36 55
tablice A pocz 9 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 5 6 7 8 11 15 26 36 55
tablice A pocz 10 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 5 6 7 8 11 15 26 36 55
tablice A pocz 10 Min pocz licznik pocz+1 licznik <=10 A[pocz] 4 5 6 7 8 9 10 1 5 6 7 8 11 15 26 36 55
tablice A pocz 1 pocz < 9 Min pocz licznik pocz+1 licznik <=10 A[pocz] 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 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 4 5 6 7 08 9 first = 0 count = 5 indeks końcowy = first + count
Kolejka FIFO - front 0 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 4 5 6 7 08 9 first = 0 count = 5
Kolejka FIFO - pop x 0 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 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 4 5 6 7 8 9 first = 9 count = 6 x first = 0 count = 5
Kolejka FIFO - push 0 4 5 6 7 8 9 first = 0 count = 5 x 0 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 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 4 5 6 7 8 9 first = 3 count = 9
Kolejka FIFO - push 0 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 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.