piasecki, W4 - elektroniki


  1. Zapisywanie prostych algorytmów w formie schematu blokowego.

1a. Zapisz w postaci słownej algorytm znajdowania pierwiastków równania kwadratowego ax²+bx+c=0, przyjmując założenia : a≠0 oraz b² >4ac.

1b. Jak zmieni się algorytm jeśli zrezygnujemy z drugiego założenia. Tu już lepiej użyć schematu blokowego.

1c. Zrezygnuj również z pierwszego założenia. To już powinien wyjść w pełni uniwersalny algorytm ( radzący sobie z każdym trójmianem).

1d. Wydrukuj dane trzy liczby : A,B i C w kolejności rosnącej.

1e. Uporządkuj dane trzy liczby : A,B i C w kolejności rosnącej. Jaka jest różnica między tymi algorytmami.

1f. Uporządkuj pięć liczb: A,B,C,D i E, tak aby wykonać jak najmniejszą liczę porównań. Ile ich jest ? - jeśli 8 to szukaj dalej.

1g. Narysuj schemat blokowy algorytmu sprawdzającego czy z odcinków o długościach A,B,C można zbudować trójkąt, jeśli tak to jaki :

a) równoboczny, równoramienny czy różnoboczny

b) ostrokątny, prostokątny czy rozwartokątny ?

1h. Czy przyjęcie założenia A ≤ B ≤ C upraszcza algorytm ? Jeśli tak, to może warto go rozbudować o wstępne sortowanie liczb.

1i. Spróbuj opisać algorytm sterowania robotem, który ma zadzwonić z automatu telefonicznego. Przyjmij, że robot rozumie proste polecenia typu: znajdź automat, podejdź, podnieś słuchawkę itp.

  1. Schematy blokowe c.d. - algorytmy iteracyjne.

2a. Oblicz sumę cyfr liczby naturalnej K.

2b. Ile cyfr znaczących ma liczba naturalna K ?

2c. Jaka jest najstarsza (pierwsza z lewej) cyfra liczby naturalnej K ?

2d. Czy w zapisie liczby naturalnej K występuje cyfra C ?

2e. Jaka jest największa cyfra liczby naturalnej K ?

2f. Jaka cyfra występuje najczęściej w zapisie liczby naturalnej K ?

2g. Sprawdź czy liczba naturalna K jest liczbą pierwszą.

2h. Znajdź największy wspólny podzielnik liczb naturalnych M i N. Czy założenie M ≤ N upraszcza problem ?

2i. Wykorzystaj algorytm Euklidesa (z obliczaniem reszty z dzielenia) do zadania 2h.

2j. Wykorzystaj algorytm Euklidesa (bez wykorzystywania dzielenia) do zadania 2h.

2k. Oblicz X do potęgi K ( K- liczba naturalna). Postaraj się zminimalizować liczbę mnożeń.

Podpowiedź : przyda się znajomość schematu Hornera, tylko dlaczego Hornera skoro algorytm szybkiego

potęgowania był znany w Indiach już 2200 lat temu ?

0x08 graphic
2l. Korzystając z podanych poniżej wzorów oblicz przybliżone wartości funkcji. Uwaga: aby uzyskać zadowalającą dokładność należy zsumować wiele elementów szeregu (uwaga na przekroczenie zakresu liczb).

  1. Zapisywanie algorytmów w JAVIE.

Wybrane z 1 i 2 algorytmy należy zapisać jako metody uproszczonych ( ograniczonych do definicji pól i metod) klas obiektowych.

  1. Pełne definicje klas .

Zdefiniuj klasę Data. Klasa powinna przechowywać w formacie dzień, miesiąc, rok i zawierać konstruktor i podstawowe metody odczytujące poszczególne składowe daty i umożliwiające zmianę daty. Należy również zdefiniować dodatkowe metody określające ( Uwaga data oznacza datę zapisaną w polach obiektu wywołującego, natomiast data1 jest przekazywana jako parametr metody - jako obiekt lub osobne wartości dzień, miesiąc , rok) :

4a. czy data jest wcześniejsza od data1

4b. czy rok daty jest rokiem przestępnym

4c. ile dni jest w miesiącu wskazywanym przez data

4d. czy data jest poprawna

4e. zmień data na dzień późniejszą ( wcześniejszą)

4f. zmień data na późniejszą ( wcześniejszą) o miesiąc

4g. zmień data na późniejszą ( wcześniejszą) o rok

Uwaga: Jaka jest różnica między tymi problemami c, d, e ?

4h. oblicz różnicę między data a data1 przy założeniu, że data >= data1

4i. Możemy określić na jaki dzień tygodnia wypadnie określona data obliczając resztę z dzielenia przez 7 ( jeśli ta reszta wychodzi ujemna należy do niej dodać 7 ) następującego wyrażenia :

2.6m-0.2+d +y+y/4+c/4-2c

gdzie: d - numer dnia miesiąca (1,2...),

m - numer miesiąca w roku (marzec=1,kwiecień=2,... ,grudzień=10,styczeń i luty są traktowane jako

11 i 12 miesiąc poprzedniego roku ),

y - dwie ostatnie cyfry roku,

c - dwie początkowe cyfry roku (stulecie),

x - oznacza cześć całkowita z x.

Uwaga: Zależność jest słuszna dla lat 1582 - 4902.

wydrukuj słownie dzień tygodnia przypadający na określona datę.

Pytanie dodatkowe : jakim dniem zaczyna się tydzień ?

  1. Przetwarzanie tablic jednowymiarowych.

5a. Zdefiniuj klasę Tablica. Obiekty tej klasy powinny móc zapamiętać do 100 liczb całkowitych ( oczywiście liczba pamiętanych elementów jest zmienna). Podstawowe metody ( konstruktory, gettery i settery ) każdy może opracować sobie sam. My skupimy się na ciekawszych metodach :

5b. Zdefiniuj klasę TablicaUporządkowana ( niemalejąco ) , przy zachowaniu założeń z 5a. Skupimy się na metodach , które są wyraźnie inne niż te dla zwykłej tablicy.

5c. Zdefiniuj klasę Hotel . Każdy hotel ma określoną liczbę numerowanych pokoi , ustawianą w momencie tworzenia obiektu. Określony pokój jest wyjęty jeśli jest z nim powiązany obiekt klasy Osoba ( taki jak na wykładzie ). Jedna osoba może wynajmować wiele pokoi. Metody do zaprogramowania :

  1. Przetwarzanie tablic wielowymiarowych.

6a. Zdefiniuj klasę Macierz. Obiekty tej klasy powinny móc zapamiętać tablicę dwuwymiarową ( do 10 wierszy i 30 kolumn) liczb całkowitych. Podstawowe metody ( konstruktory, gettery i settery ) każdy może opracować sobie sam. My skupimy się na ciekawszych metodach :

Wskazówki : zacznij od macierzy kwadratowej , a następnie spróbuj z macierzą prostokątną ; pewnie przyda się pomocnicza metoda zamieniająca wskazane elementy macierzy ; wyeliminuj zbędne przepisania ( zamiana to trzy przepisania, a czasami wystarczy jedno)

6b. Zdefiniuj klasę MacierzTab traktując macierz jako jednowymiarową tablicę obiektów typu Tablica ( dla uproszczenia zapisu przyjmij, że mamy uprawnienia do bezpośredniego dostępu do pól obiektów typu Tablica) . Obiekty tej klasy powinny móc zapamiętać tablicę dwuwymiarową ( do 10 wierszy i 30 kolumn) liczb całkowitych. Tym razem zajmiemy się metodami, które można zrealizować prościej wykorzystując metody klasy Tablica:

6c. Zdefiniuj klasę Hotel . Każdy hotel ma określoną liczbę numerowanych pokoi rozmieszczonych na poszczególnych piętrach. Liczba pięter i liczba pokoi na każdym piętrze jest ustawiana w momencie tworzenia obiektu. Pokój jest identyfikowany przez obiekt klasy NumerPokoju ( o polach pietro i pokoj ) . Określony pokój jest wyjęty jeśli jest z nim powiązany obiekt klasy Osoba ( taki jak na wykładzie ). Jedna osoba może wynajmować wiele pokoi. Metody do zaprogramowania :

  1. Definiowanie hierarchii klas - wykorzystanie dziedziczenia.

7a. Zdefiniuj zestaw klas umożliwiający prowadzenie prostej ewidencji płac w Firmie (nie należy się przejmować tym, że przedstawione poniżej założenia są mocno uproszczone a tym samym mało realistyczne ).

Założenia :

Żeby nie marnować czasu przyjmij, że podstawowe metody ( konstruktory, gettery i settery) są już zdefiniowane i możemy się skupić na ciekawszych metodach, np. :

7b. Co i jak należy zmienić aby uwzględnić wymaganie, że tablica Pracowników powinna być uporządkowana według nazwisk Pracowników ? Wprowadź odpowiednie zmiany.

  1. Praca z kolekcjami obiektów.

8a. Zrealizuj zadanie 7a wykorzystując zbiór nieuporządkowany ( HashSet)

8b. Zrealizuj 7a wykorzystując listę ( ArrayList)

8c. Zrealizuj 7a wykorzystując odwzorowanie ( HashMap)

8d. Jaki rodzaj kolekcji będzie najlepszy do realizacji zadania 7b ?

  1. Standardowe wejście i wyjście.

9a. Przyjmując jako punkt wyjścia macierz z zadania 6a. zaimplementuj metody : wczytującą macierz ( podajemy liczbę wierszy i liczbę kolumn oraz elementy macierzy - każdy wiersz macierzy w osobnym wierszu) i drukującą macierz ( macierz powinna wyglądać porządnie, kolumny nie powinny się wyginać; dla uproszczenia przyjmij że wiersz macierzy mieści się w wierszu wydruku). Zadanie należy zrealizować dla elementów typu : int, double,String.

9b. Zmodyfikuj klasy z zadania 7 tak aby było możliwe :

  1. Przetwarzanie plików.

10a. Co i jak trzeba zmienić w rozwiązaniach zadań z punktu 9,aby możliwe było wczytywanie/wydruk z/do pliku tekstowego .

10b. Dla zadania 7 zaimplementuj metody umożliwiające przechowywanie danych między uruchomieniami programu ( odpowiedniki save i restore ).

10c. W pliku o danej nazwie znajduje się pewien tekst. Ile jest wierszy tekstu? Z ilu znaków składa się ten tekst ? Ile jest w nim „czarnych znaków” ? Jaką długość ma najdłuższy wiersz ? Usuń z niego wszystkie wiersze zaczynające się ciągiem „//” . Wyświetl tekst na ekranie pomijając zbędne odstępy między słowami itp.

10d. W pliku binarnym umieszczono ciąg liczb rzeczywistych. Napisz program wczytujący ten ciąg liczb i obliczający wartość średnią i odchylenie średniokwadratowe (sigma) jego elementów . Czy można to zrobić odczytując dane ze zbioru tylko raz ? UWAGA: plik może mieć tak dużo wartości ,że nie zmieszczą się one w tablicy.

Xsr= sigma= 0x01 graphic

  1. Wykrywanie błędów - obsługa wyjątków, wykorzystanie asercji.

Przeanalizuj rozwiązania zadań rozwiązywanych na wcześniejszych zajęciach pod kątem możliwości (i sensowności ) wykrywania i wprowadzenia obsługi sytuacji błędnych. Uzupełnij definicje klas o zgłaszanie nowych wyjątków, ich przechwytywanie i obsługę oraz wstaw odpowiednie asercje.

  1. Rekurencja.

12a. Zapisz rekurencyjne wersje znajdowania NWP.

12b. Szybkie potęgowanie.

12c. Liczby Fibbonacciego zdefiniowane są następująco :

Jest to definicja rekurencyjna. Zapisz odpowiednią funkcję. Czy można zmniejszyć liczbę wykonywanych dodawań ? (Przy okazji kto wie jaki jest sens tych liczb ?)

Uwaga : Liczby te można również obliczyć ze wzoru :

(Niewiarygodne ale dla każdego k wynik jest liczbą całkowitą ). Zazwyczaj dla dużych k upraszcza się ten wzór biorąc tylko jego pierwszy człon. Porównaj otrzymane wyniki dla różnych k.

13e. Funkcja Ackermana A(m ,n) (dla m ,n >=0) określona jest zależnością

 n+1 jeśli m=0

A(m ,n) =  A(m-1,1) jeśli m<>0 i n=0

 A(m-1,A(m,n-1)) jeśli n>0 i m>0

Napisz procedurę obliczająca. Ciekawe czy jest to funkcja wolno czy szybko rosnąca ?

12d. Doskonałym przykładem zadania, które bardzo trudno jest rozwiązać bez wykorzystania rekurencji, jest problem znany jako Wieże Hanoi. Napisz program drukujący ciąg przełożeń N krążków prowadzący do rozwiązania.

12e. * Wbrew temu co napisano wyżej rozwiązanie iteracyjne wcale nie jest takie trudne, kto je znajdzie ?

5

0x01 graphic



Wyszukiwarka

Podobne podstrony:
krzysztofik, W4 - elektroniki
3858, W4 - elektroniki
polak, W4 - elektroniki
krzysztofik, W4 - elektroniki
polak, W4 - elektroniki
1643, W4 - elektroniki
3334, W4 - elektroniki
1663, W4 - elektroniki
pomianek, W4 - elektroniki
zamojski, W4 - elektroniki
radosz, W4 - elektroniki
późniak-koszałka, W4 - elektroniki
7807, W4 - elektroniki
galar, W4 - elektroniki
klink, W4 - elektroniki
borowiec, W4 - elektroniki
staniec, W4 - elektroniki
wieczorek, W4 - elektroniki

więcej podobnych podstron