Python
2019-03-20
Arkusz z zadaniem znajdziesz tutaj:
Matura_Zbiór_zadań_Informatyka
Repozytorium z danymi i rozwiązaniem:
Github
W pliku dane_ulamki.txt znajduje się 1000 par liczb naturalnych dodatnich, mniejszych niż 12 000. Każda para liczb jest zapisana w osobnym wierszu, liczby w wierszu rozdzielone są pojedynczym znakiem odstępu. Parę liczb zapisanych w tym samym wierszu interpretujemy jako ułamek, którego licznikiem jest pierwsza liczba, a mianownikiem — druga liczba.
Przy ułamkach istotny jest sposób przechowywania informacji o liczniku i mianowniku. Ja zdecydowałem się na tablicę dwuwymiarową.
Każdy ułamek reprezentuje tablica gdzie liczby[0] to licznik, a liczby[1] to mianownik. W późniejszym zapisie odwołuję się już jak do tablicy dwuwymiarowej.
Podaj ułamek o minimalnej wartości. Jeśli w pliku występuje więcej niż jeden taki ułamek, to podaj ten spośród nich, który ma najmniejszy mianownik. Twoja odpowiedź powinna zawierać parę liczb oznaczającą licznik i mianownik ułamka.
Mimo, że kod jest trochę długi to jest to tak na prawdę algorytm na minimalną wartość tyle, że sprawdzamy najpierw wartość, a później mianownik. Warto pamiętać żeby przynajmniej licznik oznaczyć jako float. W innym wypadku python zwróci liczbę całkowitą.
Podaj liczbę zapisanych w pliku ułamków, które zostały podane w postaci nieskracalnej.
Tutaj został zastosowany prosty trik z NWD. Jeżeli największym wspólnym dzielnikiem licznika i mianownika jest 1 to na pewno jest to ułamek nieskracalny.
Zapis danych w postaci nieskracalnej uzyskamy, zamieniając każdy ułamek na jego postać nieskracalną. Podaj sumę liczników wszystkich podanych w pliku ułamków, jaką otrzymalibyśmy po sprowadzeniu ułamków do nieskracalnej postaci.
Tutaj ponownie wykorzystujemy nwd. Licznik skrócony maksymalnie to licznik podzielony przez nwd tego ułamka. Później już wystarczy tylko zliczyć sumę.
Ułamki w pliku zostały tak dobrane, że każdy mianownik jest dzielnikiem liczby `b=2^2 * 3^2 * 5^2 * 7^2 * 13`, a wartość każdego ułamka jest nie większa niż 3. Oznacza to, że sumę wszystkich ułamków można przedstawić jako ułamek , którego mianownikiem jest `b=2^2 * 3^2 * 5^2 * 7^2 * 13`. Wyznacz sumę ułamków ze wszystkich wierszy i podaj licznik takiego ułamka, że suma ułamków jest równa `a/b`
W ostatnim zadaniu musimy przemnożyć licznik każdego ułamka przez liczbę b oraz taką sumę jeszcze raz przez liczbę b podzielić.
Teraz zostaje już tylko wywołać nasze funkcje.
Dziękuję Ci za przeczytanie tego materiału 😀 Jeżeli spodobało Ci się to o czym piszę, możesz sprawdzić więcej materiałów na blogu lub udostępnić znajomym. Będzie mi bardzo miło 😊
Jestem młodym programistą, który dumnie dzierży wiele pasji takich jak bieganie czy piwowarstwo domowe. Jedną z nich jest także programowanie i o tym właśnie zamierzam tutaj pisać.
Zachęcam Cię do odwiedzenia mojej strony na Google Play store i sprawdzenia wszystkich moich aplikacji.