here
Transkrypt
here
Zadania projektowe w roku akademickim 2012/2013 Wydział Matematyki Stosowanej Przedmiot: Algorytmy i struktury danych Typ zajęć: Laboratorium komputerowe Kierunek: Informatyka ZESTAW 1 Zadanie 1.1. - OKRĘGI Program wczytuje ze zbioru "dane1.txt" współrzędne środków dwóch okręgów oraz ich promienie. Następnie oblicza punkty przecięcia się tych okręgów i wpisuje wynik do zbioru "wynik1.txt". Wejście. Pierwszy wiersz zawiera trzy liczby rzeczywiste przedzielone spacjami i zakończone znakiem nowej linii. Pierwsza z nich określa promień pierwszego okręgu, druga współrzędną X, a trzecia współrzędną Y środka pierwszego okręgu. Drugi wiersz zawiera trzy liczby rzeczywiste przedzielone spacjami i zakończone znakiem nowej linii. Pierwsza z nich określa promień drugiego okręgu, druga współrzędną X, a trzecia współrzędną Y środka drugiego okręgu. Wyjście. Jeżeli okręgi się przecinają to program zapisuje jeden wiersz, w którym wpisane są parami współrzędne X i Y punktów przecięcia się okręgów. W przeciwny wypadku program wpisuje napis "brak wspólnych punktów". Linia jest zakończona znakiem nowej linii. Zadanie 1.2. - ŚCIANA Ściana do plakatowania została zestawiona z prostokątnych tablic różnej wysokości i szerokości umieszczonych obok siebie ( tablic nie można stawiać jedną nad drugą). Ścianę postanowiono pokryć plakatami prostokątnymi nie zostawiając pustych miejsc w ten sposób, że plakaty muszą krawędziami przylegać do siebie i nie mogą zachodzić na siebie. Należy napisać program, który wczyta ze zbioru "dane2.txt" ilość i opis tablic tworzących ścianę. Wyznaczy najmniejszą liczbę plakatów przeznaczonych do całkowitego pokrycia ściany i wynik zapisze do zbioru "wynik2.txt". Wejście. Pierwszy wiersz zawiera tylko jedną liczbę całkowitą 1 ≤ n ≤1 00 000 000 oznaczającą liczbę tablic, z który zbudowana jest ściana. Kolejne wiersze zawierają po dwie liczby całkowite dodatnie oddzielone odstępami i zakończone znakiem nowej linii oznaczające szerokość i wysokość kolejnej tablicy ściany. Wyjście. Pierwszy i jedyny wiersz zawiera minimalną liczbę plakatów, jakimi należy pokryć ścianę. Zadanie 1.3. - SZYBKIE SORTOWANIE Dany jest algorytm szybkiego sortowania z wyborem elementu środkowego w połowie sortowanego ciągu liczb. Program sortuje liczby generowane losowo z przedziału od 0 do n-1, których jest dokładnie n różnych liczb. Należy napisać program, który czyta ze zbioru "dane3.txt" wymiar zadania i zapisuje w zbiorze "wynik.3" wszystkie ciągi liczbowe, dla których algorytm działa w czasie O(n2). Wejście. Pierwszy i jedyny wiersz zawiera jedną dodatnią liczbę określającą wymiar zadania. Wyjście. Kolejne wiersze zawierają ciągi liczb oddzielone spacjami, które dają przy szybkim sortowaniu złożoność czasową O(n2). Zadanie 1.4. - ZEGAR Wskazówki zegara są ustawione na godzinę 1200. Należy napisać program obliczający czas w sekundach, jaki upłynął od momentu startu zegara do momentu ustawienia się wskazówek w jednej linii. Wynik należy zapisać w pliku "wynik 4.txt" . Linia jest zakończona znakiem nowej linii. Zadanie 1.5. - LICZBY ANTYPIERWSZE Liczbę całkowitą nazywamy antypierwszą, jeżeli ma ona więcej dzielników niż każda dodatnia liczba całkowita mniejsza od niej. Przykładowymi liczbami antypierwszymi są: 1, 2, 4, 6, 12 i 24. Należy napisać program, który wczyta z pliku "dane5.txt" dodatnią liczbę całkowitą n, 1 ≤ n ≤ 8 000 000 000 i zapisze największą liczbę anytypierwszą nieprzekraczającą n w zbiorze o nazwie "wynik5.txt". Linia jest zakończona znakiem nowej linii. ZESTAW 2 Zadanie 2.1. - MONETY Na placu targowym umieszczono worków, w których z każdym z nich znajdowało się złotych monet. Każda złota moneta waży 3 gramy. Fałszerz monet podmienił jeden worek, zamieniając w nim wszystkie monety na podrobione. Fałszywa moneta waży 2 gramy. Sprzedawca chce znaleźć worek z fałszywymi monetami. Może to zrobić tylko w ten sposób, że wyciąga dowolną ilość monet z każdego worka i waży je złożone razem tylko jeden raz. Program wczytuje ze zbioru "dane1.txt" ilość worków znajdującą się na targu, ilość monet wyciągniętych przez sprzedawcę kolejno ponumerowanych worków oraz wagę wszystkich wyciągniętych monet. Na podstawie wagi stwierdza, w który worku znajdują się fałszywe monety i wpisuje nr worka z fałszywymi monetami w zbiorze "wynik1.txt" albo w przypadku nie możliwości określeni nr worka wpisuje komunikat „dokonaj wyciągnięcia monet jeszcze raz”. Wejście. Pierwszy wiersz zawiera liczbę całkowitą określającą ilość worków i zakończoną znakiem nowej linii. Druga linia zawiera n liczb całkowitych oddzielonych spacjami i każda z nich jest ilością wyciągniętych monet przez sprzedawcę z ponumerowanych worków od 1 do n. W ostatnim wierszu znajduje się waga wszystkich wyciągniętych monet, prawdziwych i fałszywych. Wyjście. Liczba typu całkowitego określająca numer worka z fałszywymi monetami albo napis „dokonaj wyciągnięcia monet jeszcze raz”. Zadanie 2.2. - KULKA Kulka znajduje się w punkcie zerowym dwuwymiarowej siatki równomiernej (w początku układu współrzędnych).W zależności, co pojawi się na wejściu przemieszcza się od jednego węzła siatki do drugiego w ośmiu kierunkach oznaczonych 0 – góra, 1 – prawo, 2 – dół 3- lewo, 4 – góra-prawo, 5 – dół-prawo, 6 – dół-lewo i 7 – góra-lewo . Należy napisać program, który wczyta ze zbioru "dane2.txt" liczby całkowite określające ruchy kulki ( nie jest znana ilość ruchów kulki i określa ją koniec wczytywanych liczb - EOF) i wyznaczy końcową odległość położenia kulki od punktu zerowego. Wynik zostaje zapisany w zbiorze "wynik2.txt". Wejście. Kolejne wiersze zawierają liczby całkowite określające ruchy kulki ( zbór "dane2.txt" ). Wyjście. Pierwszy i jedyny wiersz zbioru "wynik2.txt" zawiera liczbę rzeczywistą – odległość położenia kulki od punktu zerowego. Zadanie 2.3. - SZYBKIE SORTOWANIE Dany jest algorytm szybkiego sortowania z wyborem elementu środkowego w połowie sortowanego ciągu liczb. Program sortuje liczby generowane losowo z przedziału od 0 do n-1 , których jest dokładnie n różnych liczb. Należy napisać program, który czyta ze zbioru "dane3.txt" wymiar zadania i zapisuje w zbiorze "wynik.3" wszystkie ciągi liczbowe, dla których algorytm działa w czasie O(n2). Wejście. Pierwszy i jedyny wiersz zawiera jedną dodatnią liczbę określającą wymiar zadania. Wyjście. Kolejne wiersze zawierają ciągi liczb oddzielone spacjami, które dają przy szybkim sortowaniu złożoność czasową O(n2). Zadanie 2.4. - ZEGAR Pan Andrzej wchodząc do zakładu zegarmistrzowskiego spojrzał na zegarek, była dokładnie godzina 900. Na ścianie wisiały dwa zegary. Pierwszy z nich wskazywał na godzinę 800, a drugi 1000. Pan Andrzej wiedział, ze pierwszy zegar spieszy się 5 na minutę, a drugi spóźnia o 5 sekund na minutę. Po jakimś czasie Pan Andrzej spojrzał na zegary, które wskazywały tą samą godzinę. Ile sekund upłynęło od czasu wejścia zegarmistrza do zakładu do momentu wskazania przez nie tej samej godziny. Należy napisać program obliczający czas w sekundach, jaki upłynął od momentu startu zegara wskazującego godzinę 900 do momentu wskazanie przez wszystkie zegary tej samej godziny. Wynik należy zapisać w pliku "wynik 4.txt”. Linia jest zakończona znakiem nowej linii. Zadanie 2.5. - GRA SUDOKU Adam przesyła Basi plik "dane5.txt" z rozwiązaniem gry sudoku. Plik ten zawiera dziewięć liczb oddzielonych spacjami, w każdym z dziewięciu wierszy (razem 81 liczb). Basia nie chce sama sprawdzać czy rozwiązanie jest poprawne. Prosi Cię o pomoc w napisaniu programu, który wykona pracę za nią i jeśli jest to poprawne rozwiązanie to w pliku "wynik5.txt" znajdzie się słowo „TAK”, a jeśli nie to słowo „NIE”. 1 6 4 2 3 8 5 7 9 2 7 5 1 6 9 3 4 8 3 8 9 4 5 7 1 2 6 4 1 6 3 8 2 7 9 5 5 2 7 6 9 1 4 8 3 9 3 8 5 7 4 2 6 1 6 4 1 8 2 3 9 5 7 7 5 2 9 1 6 8 3 4 8 9 3 7 4 5 6 1 2 Zadania programu: 1. Testuje, czy liczb w pliku "dane5.txt" jest 81 i czy są to liczby całkowite z zakresu od 1 do 9. 2. Sprawdza, czy w każdym wierszu i w każdej kolumnie wszystkie liczby całkowite z zakresu od 1 do 9 występują dokładnie jeden raz. 3. Sprawdza, czy w każdym z dziewięciu kwadratów wszystkie liczby całkowite z zakresu od 1 do 9 występują dokładnie jeden raz (przykład powyżej). 4. Zapisuje wynik do pliku "wynik5.txt" ZESTAW 3 Zadanie 3.1. – LICZBA PIERWSZA Wejście. W zbiorze wejściowym we1.txt umieszczona jest jedna liczba całkowita t z zakresu 2 < t < 263. Wyjście. W zbiorze wyjściowym wy1.txt zapisana zostaje największa liczba pierwsza nie większa niż t. Przykład. Dla liczby 9 poprawnym rozwiązaniem jest 7. Zadanie 3.2. – STACJA KARETEK Istnieje miasto, które wyglądem bardzo przypomina układ współrzędnych, tzn. wszystkie ulice przecinają się pod katem prostym, a mieszkania leżą tylko przy skrzyżowaniu (dla uproszczenia załóżmy, ze mieszkanie M1,3 leży na skrzyżowaniu w punkcie (1, 3), zgodnie z układem współrzędnych). Miasto ma wymiary nxn, gdzie n to ilość skrzyżowań. Karetka na przejechanie każdej ulicy miedzy skrzyżowaniami potrzebuje dokładnie 2 minuty. Zdarza się jednak, że dana ulica jest zakorkowana, wtedy przejazd nią wynosi 5 minut. Wiemy również, że, jeżeli karetka nie dojedzie do pacjenta w przeciągu 30 minut, to pacjent umiera. Burmistrz miasta poprosił Cię o pomoc, w celu określenia ile minimalnie stacji karetek (miejsce skąd karetki wyruszają) trzeba zbudować w mieście, aby do każdego miejsca dało się dojechać na czas, żeby uratować pacjenta, wiedząc, które ulice są zawsze zakorkowane. Wejście. Pierwszy wiersz pliku wejściowego we2.txt zawiera dwie liczby całkowite n oraz k oddzielone pojedynczym odstępem (1 ≤ n ≤ 1024, 0 ≤k ≤ n2), oznaczające kolejno wymiary miasta oraz liczbę zakorkowanych odcinków. Kolejne k wierszy zawiera liczby całkowite , oznaczające miejsce, w którym się zaczyna korek i miejsce gdzie kończy się korek . Wyjście. W pierwszym i jedynym wierszu zbioru wyjściowego wy2.txt powinna zostać wypisana jedna liczba całkowita - minimalna ilość stacji karetek, które należy wybudować, aby każdy potencjalny pacjent był bezpieczny. Przykład. Dla danych wejściowych: 11 13 7 0 7 3 10 0 10 3 7 2 10 2 2 1 2 7 8 0 8 3 4 4 4 5 7 0 10 0 5 4 5 8 7 3 7 10 6 7 9 7 9 0 9 3 4 5 6 5 7 1 10 1 Poprawnym wynikiem jest: 1 Zadanie 3.3. - WYLICZANKA Jak co dzień, Jasiu bawił się z koleżankami i kolegami na dworze. Ktoś wpadł na pomysł i przyniósł cukierki. Cukierki zostały rozdane pomiędzy wszystkich po równo, lecz pojawił się problem. Jeden cukierek został i nie wiadomo było, kto ma go dostać. Jasiu stwierdził, ze chyba najlepiej będzie stanąć w kółku i zrobić wyliczankę. Wyliczanka miała polegać na tym, że co druga osoba, (która jeszcze nie odpadła), zgodnie ze wskazówkami zegara, odpada, poczynając od miejsca zerowego. Osoba, która zostanie, jako ostatnia, dostaje cukierka. Pomóż Jasiowi stwierdzić, w którym miejscu ma stanąć, aby dostać cukierka. Wejście. Pierwszym wierszu zbioru wejściowego we3.txt znajduje się liczba całkowita t (1 ≤ t < 232), oznaczająca liczbę przypadków do przeanalizowania. Kolejne t wierszy zawiera liczby całkowite ni (1 ≤ ni < 232 dla 1 ≤ i ≤ t), oznaczające początkową liczbę osób biorących udział w wyliczance w i-tym przypadku. Wyjście. W zbiorze wyjściowym wy3.txt powinno zostać wypisanych t wierszy. W i-tym wierszu wyjścia (dla 1 ≤ i ≤ t) powinna się znajdować pojedyncza liczba całkowita oznaczająca miejsce, w którym powinien stanąć Jasiu, aby dostać cukierka. Przykład. Dla danych wejściowych: 5 7 2 8 5 4 Poprawnym wynikiem jest: 5 1 5 1 3 Zadanie 3.4. – SKOCZEK SZACHOWY W pliku tekstowym we4.txt w pierwszym wierszu znajduje się pozycja skoczka szachowego, a w drugim pole na które ma dotrzeć. Zadanie polega na zapisaniu do pliku wy4.txt liczby minimalnej ilości posunięć, którą musi wykonać skoczek, aby dotrzeć na określone pole. Posunięcie skoczka to dwa pola do przodu i jedno w bok (w kształcie litery „L” - patrz rysunek) Przykład. we4.txt wy4.txt A4 E3 3 Przykładowa trasa skoczka: A4 → B2 → D1 → E3 ZESTAW 4 ZESTAW 4 Zadanie 4.1. – SIATKA TOMKA Tomek narysował siatkę o wymiarach n1 na n2 składającą się z kwadratów. Następnie próbował rozmieścić na tej siatce prostokąty o wymiarach l1 na l2 w taki sposób, aby prostokąty nie zachodziły na siebie i nie wychodziły poza siatkę, a ich boki pokrywały się z liniami siatki. Jeśli udało się pokryć nimi całą siatkę, zapisywał liczbę wszystkich możliwych ustawień prostokątów na siatce. Jeśli nie było takiej możliwości, szukał takiego ustawienia, w którym liczba pozostałych kwadratów, z których złożona jest siatka, była najmniejsza. Wtedy notował liczbę tych kwadratów. Wejście. Pierwszy i jedyny wiersz wejścia zawiera cztery liczby naturalne n1, n2, l1, l2 (0 < n1 ≤ n2 < 2³², 0 < l1 ≤ n1, 0 < l2 ≤ n2) oznaczające kolejno: ilość wierszy siatki, ilość kolumn siatki, krótszy bok prostokąta, drugi bok prostokąta. Wyjście. Pierwszy wiersz wyjścia powinien zawierać słowo: „TAK”, jeśli można pokryć całą siatkę prostokątami, „NIE”, jeśli nie można pokryć całej siatki prostokątami. Drugi (ostatni) wiersz wyjścia powinien zawierać liczbę naturalną k (0 < k < 2³²), która oznacza liczbę wszystkich możliwych ustawień prostokątów służących do pokrycia całej siatki, jeśli w pierwszym wierszu było „TAK”, najmniejszą liczbę kwadratów pozostałych po ustawieniu prostokątów na siatce, jeśli w pierwszym wierszu było „NIE”. Przykład. Dla danych wejściowych: 5623 Poprawnym wynikiem jest: TAK 2 Dla danych wejściowych: 12 50 10 10 Poprawnym wynikiem jest: NIE 100 Zadanie 4.2. – LISTA ZAKUPÓW Masz n - złotych. Chcesz wydać dokładnie całą kwotę na zakupy. Zrobiłeś sobie listę produktów (i ich cen), które chętnie chciałbyś mieć. Napisz program, który wybierze z Twojej listy produkty, które musisz kupić w taki sposób, aby wydać wszystkie pieniądze. Takich konfiguracji produktów może być kilka, może się zdarzyć, że będzie dokładnie jedna albo, że nie ma takiej konfiguracji, aby wydać dokładnie wszystkie pieniądze. Wejście - plik: wej.txt Pierwsza linia tego pliku to kwota, jaką mamy na zakupy. Kolejne linie zawierają ceny produktów, którymi jesteśmy zainteresowani oraz (po spacji do końca linii) opis tej pozycji. Produktów może być do 32. Suma cen produktów jest zawsze większa niż kwota, jaką posiadamy. Wyjście - plik: wyj.txt Każda linia tego pliku to konfiguracje produktów spełniające założenia zadania. Każda konfiguracja składa się z wybranych numerów porządkowych produktów z listy. Przykład. wej.txt 100.00 59.99 płyta z muzyką 12.90 czasopismo 999.99 gitara 50.10 T-shirt 37.00 bilet do kina 89.19 film BR 45.20 książka wyj.txt 245 Zadanie 4.3. - KOŁO Dany jest środek koła w początku układu współrzędnych (0,0) Dla danego promienia (liczba zmiennoprzecinkowa) ustal ilość punktów całkowitych należących do tego koła. Przykład r=1 Liczba punktów całkowitych jest równa 5: (0,0), (0,1), (0,-1), (1,0), (-1,0). Zadanie 4.4. – LICZBY PIERWSZE Wyznacz wszystkie sumy różnych liczb pierwszych równe 100. ∑p i = 100 , gdzie p i - różne liczby pierwsze. Zadanie 4.5. - TABLICZKA Dana jest tablica: int table[]={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,0}; Wartości liczbowe zamieszczone w tej tablicy odpowiadają następującemu rozmieszczeniu pól układanki 4 na 4 pola: Należy napisać program permutujący wartości tablicy (innymi słowy losujący rozmieszczenie pól liczbowych układanki) w taki sposób, aby rozmieszczenie pól liczbowych w układance umożliwiało jej poprawne ułożenie zaprezentowane na początku. Przykładowe rozmieszczenie: Odpowiada permutowanej tablicy: table[]={10,9,11,1,7,13,0,12,6,4,15,3,8,14,5,2}; Wyjście - plik: wy.txt W pliku program zapisuje 16 liczb całkowitych (każda z liczb zapisana w jednej linii) odpowiadających wylosowanemu ułożeniu początkowemu tabliczki. W linii siedemnastej program zapisuje liczbę potrzebnych ruchów do ułożenia tabliczki. Jako ruch rozumiemy możliwe przesunięcie kwadratu o współrzędnych (i, j) numerując od lewego górnego rogu siatki o współrzędnych (0,0) na niezajętą pozycję. Co zawiera kompletny projekt zaliczeniowy? 1. Pliki projektu WSZYSTKIE PLIKI PROJEKTU, tzn całość projektu MS Visual Studio, Eclipse, Dev C++, Net Beans, Mathematica, lub innego studia projektowego czy platformy obliczeniowej, z której Student korzystał w trakcie pisania projektu. Projekt musi być pisany z uwzględnieniem następujących uwag: 1. Wszystkie dane wejściowe i wyjściowe zamieszczone są w plikach zewnętrznych, chyba że wyraźnie inaczej formułuje to treść zadania. 2. W projekcie Student korzysta wyłącznie z własnych funkcji, nie można używać funkcji natywnych, zawartych w bibliotekach lub opracowanych przez inne osoby. 3. Kod programu musi spełniać kryteria omawiane na zajęciach (funkcje zewnętrzne, dynamiczne tablice, pliki zewnętrzne, itd.). 2. Dokumentacja 1. Strona tytułowa zawiera: Laboratorium komputerowe z przedmiotu Algorytmy i struktury danych Tytuł projektu - Dokumentacja Imię Nazwisko Kierunek, Rok akademicki Semestr, Rok kalendarzowy Wydział 2. Dokumentacja powinna być napisana według schematu: 1. 2. 3. 4. a. b. c. 5. a. b. 6. a. b. 7. a. b. Strona tytułowa. Spis treści. Opis problemu postawionego w zadaniu. Model matematyczny przedstawionego zadania. Opis modelu matematycznego, Schemat powiązań, Przykład obliczeniowy. Algorytm. Algorytm słowny, Schemat blokowy. Implementacja. Kod programu z odpowiednim komentarzem, Opis działania. Podsumowanie. Opis, co zostało zrobione w projekcie, „Co dalej?”, czyli pomysł jak rozwinąć przedstawione zadanie.