Odpowiedź :
Odpowiedź
Kod źródłowy programu, który napisałam, znajduje się w pierwszym załączniku. W drugim umieściłam wyniki kilku przykładowych uruchomień na platformie replit.
Kod jest w miarę prosty, ale niestety było to bardzo smutne zadanie. W przypadku tego zadania trudność nie jest związana z napisaniem programu, tylko z analizą specyficznych matematycznych właściwości problemu znajdowania liczb wesołych. Sprawdź czy liczba n jest wesoła, to nie jest jak wrzucenie na głęboką wodę ( grafy cykliczne itd. ), to jest jak wrzucenie na bardzo zimną głęboką wodę.
Sam algorytm jest zwodniczo prosty. Sprawdzamy, czy liczba jest równa 1. Jeżeli nie jest, wtedy prowadzimy obliczenia sumując kwadraty cyfr tak długo aż: albo otrzymamy 1, albo okaże się, że generowane (obliczane) liczby zaczynają się powtarzać. Powtarzanie jest sprawdzane przy użyciu zmiennej widziane. Jest to zbiór (ang. set), ponieważ interesuje nas tylko czy dana liczba już kiedyś wystąpiła, tzn. czy jest elementem zbioru liczb, które poprzednio były widziane. Inicjalizacja tej zmiennej wartością "1" umożliwia jednoczesne sprawdzanie, czy dana liczba jest wesoła.
Wyjaśnienie
Nie będę przepisywała z encyklopedii internetowej hasła liczba wesoła. Odsyłam do niego, ponieważ trzeba samodzielnie przeanalizować podany tam graf cykliczny obliczeń dla liczby 89, a jednocześnie sekwencję obliczeń dla liczb 85 oraz 58. Dla ułatwienia analizy jako trzeci załącznik umieściłam ilustrację tego grafu. Warto popatrzeć jak w stosunku do tego grafu będą przebiegały obliczenia na przykład dla liczb 24, 61, 73.
Program
- bez żadnych zmian działa na platformach używających kompilatora clang oraz nowych wersji g++ (GCC), na przykład replit, Linux;
- używając Visual Studio nazwy zmiennych mogą zawierać polskie litery, natomiast komunikaty nie; czyli zamiast liczbą wesołą musi być liczba wesola;
- używając starszych wersji kompilatora g+=, na przykład używając Code::Blocks lub Dev-C++ zarówno nazwy zmiennych jak i komunikaty nie mogą zawierać polskich liter.
Trudno aby w Polsce, w polskiej szkole w programach nie było polskich liter, więc załączyłam również wersję programu dającą komunikaty po polsku w programach
- Code::Blocks
- Dev-C++
- Visual Studio
Z tym, że używając Code::Blocks lub Dev-C++ nazwy zmiennych nie mogą zawierać polskich liter.