Lista zadań z Pascala nr 1. (AKO)

Transkrypt

Lista zadań z Pascala nr 1. (AKO)
1
Lista zadań z Pascala nr 1. (AKO)
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. Niektóre zadania,
np. zadanie 4, wymagają użycia bardziej skomplikowanych środków programistycznych, można zrobić zadanie 3, a poźniej jeszcze zadanie 4. Zadanie 5 też jest innego
rodzaju.
Zad. 1. (Zadanie 1 z listy 1 dr Heleny Krupickiej) Dany jest wielomian W (x) =
a0 · xn + a1 · xn−1 + . . . + an . Napisz program, który:
1) wczyta: stopień wielomianu W i jego całkowite współczynniki (od a0 do an ),
2) wypisze ten wielomian,
3) obliczy jego pochodną,
4) wypisze tę pochodną,
5) za pomocą schematu Hornera obliczy wartość pochodnej w punkcie 2 i wypisze ją.
Uwaga: wielomian należy wypisać czytelnie, bez składników o zerowych współczynnikach (za wyjątkiem wielomianu zerowego) i bez zbędnych operatorów +.
Przykład wyników dla danych n = 5 i współczynników 2 0 0 3 0 1:
W (x) = 2 · x5 + 3 · x2 + 1 · x0 .
W 0 (x) = 10 · x4 + 6 · x1
W 0 (2) = 172
Zad. 2. (Zadanie 2 z listy 1 dr Heleny Krupickiej) Napisz program, w którym wystąpią funkcje zamiany liczby rzymskiej na arabską i arabskiej na rzymską (zakres
liczb [1,3000]). Wyświetl w czytelny sposób dane i odpowiadające im wyniki.
Zad. 3. (Zadanie 4 z listy 1 dr Heleny Krupickiej) Napisz program z ofertą (menu),
który dla danej liczby naturalnej n proponuje następujące usługi (procedury lub
funkcje):
1) sprawdzanie, czy liczba n jest doskonała, tzn. czy jest równa sumie wszystkich jej podzielników mniejszych od niej samej, np. 28=1+2+4+7+14.
2) sprawdzenie, czy n jest liczba pierwszą,
3) sprawdzenie, czy n czytana od początku do końca i od końca do początku
jest taka sama, np. 12321,
4) podanie rozkładu n na czynniki pierwsze,
5) podanie wszystkich liczb pierwszych nie większych niż n (algorytm sito Eratostenesa).
Zad. 4. (Zmodyfikowane zadanie nr 4 z listy 1 dr Krupickiej) Napisz program z
ofertą (menu), który dla danej liczby naturalnej n proponuje następujące usługi
(procedury lub funkcje):
1) sprawdzanie, czy liczba n jest doskonała, tzn. czy jest równa sumie wszystkich jej podzielników mniejszych od niej samej, np. 28=1+2+4+7+14;
2) sprawdzenie, czy n jest liczba pierwszą;
2
3) podanie rozkadu n na czynniki pierwsze;
4) podanie wszystkich liczb pierwszych nie większych niż n (algorytm sito Eratostenesa).
Proponowałbym rozwiązanie tego zadania w specyficzny sposób. A więc po
pierwsze rozwiązanie powinno polegać na utworzeniu jednego lub dwóch modułów
(pakietów).
Jeden pakiet mógłby zawierać specjalną implementację sita Eratostenesa. Zwykłe sito można przekszałcić tak, aby nie tylko badało pierwszość liczb z pewnego
przedziału, ale by przy okazji znajdowało największe (lub najmniejsze) dzielniki
analizowanych liczb, będące liczbami pierwszymi. Taki moduł mógłby dodatkowo
zawierać w części inicjalizacyjnej polecenie wykonania algorytmu Eratostenesa, a
pozostałe procedury wymagane w tym zadaniu mogłyby już tylko korzystać z przeprowadzonych obliczeń. Na przykład stwierdzenie, czy dana liczba jest pierwsza
mogłoby polegać zajrzeniu do tablicy utworzonej na początku działania programu.
Potrafiłbym wykorzystać tablicę tworzoną przez zmodyfikowane sito Eratostenesa we wszystkich usługach wymaganych w zadaniu.
Drugi pakiet mógłby zawierać procedury związane z obsługą samego menu.
Jest spora szansa, że jeżeli będzie dobrze napisany, to przyda się w przyszłości.
Zad. 5. Dla danej liczby n utworzyć jej przedstawienie dziesiętne i zbadać, czy jest
ono palindromem, a więc, czy czytane od początku i od końca jest takie samo, np.
12321.
Aby to zadanie było ciekawsze z programistycznego punktu widzenia proponowałbym, aby rozwiązać go na kilka sposobów. Można próbować stosować różne
algorytmy. Można też stosować ten sam algorytm, ale wyrażać go w różny sposób,
przyjmując np., że wykonuje jedynie pętle określonego rodzaju, czyli tylko pętle while, albo tylko pętle repeat lub for, albo też zamiast instrukcji iteracyjnych
wykorzystuje wyłącznie procedury rekurencyjne.
Zad. 6. Zaprogramuj prosty kalkulator.
Idea programu: program korzysta ze struktury danych złożonej z trzech zmiennych: R - zmienna robocza, P - pamięć, D - ostatnie działanie. Początkowo zmienne
R i P pamiętają wartości 0, a D, że ostatnim wprowadzonym działaniem jest dodawanie. Kalkulator reaguje na naciskanie klawiszy z cyframi i kilkoma innymi, np.
+, −, ∗, &, ESC, BackSpace, Enter. Klawisze z cyframi służą do wprowadzania
cyfr, +, −, ∗, & przekazują informacje o wykonywanym działaniu, ESC – kończy działanie programu, BackSpace wymazuje ostatnio wprowadzoną cyfrę. Warto
przewidzieć kilka dalszych czynności, np. zerowanie zmiennej roboczej. Na ekranie,
w określonym miejscu jest wyświetlana wartość zmiennej R. Naciśnięcie klawisza
z cyfrą powoduje zmianę wartości zmiennej roboczej odpowiadającej dopisaniu do
przedstawienia pamiętanej tam liczby cyfry odpoowiadającej wciśniętemu klawiszowi. Analogicznie definiujemy działanie klawisza BackSpace (usuwanie ostatniej
cyfry przedstawienia liczby pamiętanej w R). Wciśnięcie klawisza z symbolem działania powinno spowodować wykonanie pamiętanego działania i odpowiednią zmianę zmiennej P , wyzerowanie zmiennej R i zapamiętanie nowego, wykonywanego w
przyszłości. Wciśnięcie znaku = lub klawisza Enter powinno wykonać ostatnio pamiętane działanie, przedstawienie wyniku w zmiennej R, wyzerowanie zmiennej P ,
zapamiętanie dodawania jako ostatniego działania. Szczegóły działania kalkulatora
być może wymagają jeszcze przemyślenia i pewnych modyfikacji.
Wygodne korzystanie z takiego programu wymaga chyba wykorzystania takich
funkcji, jak ReadKey, i takich procedur, jak GotoXY z pakietu crt.