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.