Lista zadań z Pascala nr 3.
Transkrypt
Lista zadań z Pascala nr 3.
Lista zadań z Pascala nr 3. Pisząc pierwsze programy proszę zwrócić szczególną uwagę na pojęcie procedury (a także funkcji). Celem początkowych zajęć jest wyrobienie umiejętności korzystania z procedur, posługiwania się parametrami procedur, przekazywania informacji za pomocą parametrów, tworzenia strukturalnych programów. Rozwiźzywane teraz zadania powinny zawierać nieco bardziej skomplikowane algorytmy i/lub moduły. Zad. 1. Napisz program, który ułatwia (umoliwia) szkolne rozwiźzywanie układów trzech równań liniowych z trzema zmiennymi. Zakadamy, e współczynniki równań są liczbami cakowitymi. Program na ekranie powinien wyświetlać tablicę złożoną z trzech wierszy z czterema liczbami (wiersz z liczbami a, b, c i d odpowiada równaniu a · x + b · y + c · z = d) i umożliwia użytkownikowi wykonywanie trzech operacji: zamiany wskazanych wierszy miejscami dodania do wskazanego wiersza pewnej wielokrotności innego wiersza (także „wielokrotności” ujemnej) oraz dzielenia wskazanego wiersza przez daną liczbę pod warunkiem, że wszystkie liczby są podzielne. Program główny powinien umożliwiać dokonanie wyboru operacji, wczytywać danych i wykonywać poszczególne operacje. Poza tym powinien korzystać z dwóch modułów (pakietów). Jeden z nich zawierać definicję operacji na wierszach, drugi – procedury odpowiedzialne za wyświetlanie tablicy na ekranie komputera. Zad. 2. Napisz program, który znajdzie w danej tablicy największy element i drugi w kolejności (ten element, który po uporządkowaniu danej tablicy znajdzie się tuż obok największego). Dobry program powinien wykonywać mało porównań, mniej niż półtora n, gdzie n oznacza liczb elementów danej tablicy. Wskazówki dotyczące algorytmu: Drzewo binarne o n liściach można reprezentować w tablicy o elementach indeksowanych od 0 do 2 ∗ n − 2. Liście znajdują się w elementach indeksowanych od n − 1 do 2 ∗ n − 2. Lewy i prawy z synów elementu o indeksie i znajdują się w elementach o indeksach 2 ∗ i + 1 i 2 ∗ i + 2 odpowiednio. Aby znaleźć największą liczbę w ciągu danych, dane te umieszczamy w liściach pewnego drzewa, a następnie wypełniamy całe drzewo od liści do korzenia stosując następującą zasadę: jeżeli w obu elementach potomnych pewnego węzła są umieszczone jakieś liczby, to w tym węźle umieszczamy większą z liczb. Jeżeli w ten sposób wypełnimy całe drzewo, to w korzeniu znajdzie się liczba największa. Liczba druga w kolejności musiała być porównywana z największą. Analizując tak wypełnione drzewo łatwo ustalić, które dane były porównywane z największą liczbą. Dalej wystarczy jakkolwiek znaleźć największą z tych danych. Zad. 3. (Zadanie 8 z listy 1 dr Krupickiej.) Napisz program testujący wybrany zestaw metod sortowania. Zakłada się, że dane są umieszczone w tablicy [1..N]. Zestaw metod (zaprogramowany w module) składa si z metody prostej i odpowiadającej jej metody zaawansowanej dla: losowo wygenerowanych elementów tablicy, posortowanych elementów tablicy, odwrotnie posortowanych elementów tablicy. 1) Zestaw nr 1: proste wstawianie i ShellSort. 2) Zestaw nr 2:. prosta selekcja i HeapSort. 3) Zestaw nr 3: sortowanie bąbelkowe i QuickSort. Zad. 4. (Zadanie 5 z listy 1 dr Krupickiej.) Zdefiniuj w module i wykorzystaj w programie stos do zamiany wyrażenia arytmetycznego w postaci nawiasowej na postać ONP. W wyrażeniu argumentami mogą być jednoliterowe zmienne, np. a, b, jednocyfrowe stałe, np. 5, 7, i dwuargumentowe operatory działań: +, , ∗ i /, np. dla danych (a + b) ∗ (c − a)/2 wynikiem jest ab + ca ∗ /. Antoni Kościelski