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

Podobne dokumenty