[ Pobierz całość w formacie PDF ]
.Kluczowa jesttu linia silnia *= i;, którą inaczej można zapisać jakosilnia = silnia * i;.Jest to typowa programistyczna sztuczka.W i-tym obrocie pętli obliczana jest wartość i! (program zapisuje jądo zmiennej silnia), korzystając ze wzoru i! = (i - 1)! " i, gdzie (i - 1)!to stara wartość zmiennej silnia.W ten sposób po n obrotach pętlifor w zmiennej silnia zapisana jest wartość n!.Czytelnik, któremu zaprezentowane powyżej rozwiązanie wydaje się niejasnepowinien spróbować rozwiązać kilka kolejnych zadań.Można je rozwiązaćw bardzo podobny sposób.Rozwiązanie zadania w języku C++ jest podobne.Zadanie 1.4.8Listing 10.21.Rozwiązanie zadania 1.4.8 w języku C10.3.Rozwiązania do zadań z rozdziału 1.4 67W powyższym rozwiązaniu założono, że indeks pierwszego elementu ciąguFibonacciego to 0.Rozwiązanie w języku C++ jest podobne.Zadanie 1.4.9 Tym razem przedstawiono rozwiązanie zadania w językuC++.Rozwiązanie w języku C różni się od zaprezentowanego jedynie ope-racjami wejścia/wyjścia.Zadanie można rozwiązać poprzez przeszukanie wszystkich liczb dodat-nich mniejszych równych zarówno od n, jak i od m:Listing 10.22.Rozwiązanie zadania 1.4.9 w języku C++Ponieważ powyższy program przeszukuje zbiór potencjalnych rozwiązańod dołu, to ostatni znaleziony wspólny dzielnik n i m będzie tym najwięk-szym.W programie użyto operatora % zwracającego resztę z dzieleniapierwszego argumentu przez drugi.Innym sposobem rozwiązania zadania jest zaimplementowanie algoryt-mu Euklidesa szukania NWD:Listing 10.23.Rozwiązanie zadania 1.4.9 w języku C++68 10.Rozwiązania i wskazówki"Drugi z zaprezentowanych programów dla dużych liczb n i m działa znacznieszybciej niż pierwszy.Zadanie 1.4.10 Także to zadanie można rozwiązać poprzez przeszukiwaniewszystkich potencjalnych rozwiązań.Listing 10.24.Rozwiązanie zadania 1.4.10 w języku C"Zadanie 1.4.10 można rozwiązać efektywniej.Jedną z możliwości jest zasto-sowanie algorytmu bisekcji:10.3.Rozwiązania do zadań z rozdziału 1.4 69Listing 10.25.Rozwiązanie zadania 1.4.10 w języku C-"W powyższym programie w każdym obrocie pętli while zbiór potencjalnychrozwiązań zmniejsza się o połowę.Przydaje się tu fakt, iż dzielenie liczbcałkowitych daje w wyniku liczbę całkowitą.W języku C++ to zadanie rozwiązuje się w analogiczny sposób.Zadanie 1.4.12 To zadanie można rozwiązać za pomocą zagnieżdżonychpętli:Listing 10.26.Rozwiązanie zadania 1.4.12 w języku C"70 10.Rozwiązania i wskazówkiW języku C++ to zadanie rozwiązuje się w analogiczny sposób.Zadanie 1.4.13 Pozornie zadanie wymaga zastosowania pętli w pętli.W rze-czywistości jednak tak nie jest:Listing 10.27.Rozwiązanie zadania 1.4.13 w języku C++"W języku C to zadanie rozwiązuje się w analogiczny sposób.10.4.Rozwiązania do zadań z rozdziału 2.2Zadanie 2.2.1Listing 10.28.Rozwiązanie zadania 2.2.1 w języku C" -10.4.Rozwiązania do zadań z rozdziału 2.2 71Rozwiązanie w języku C++ jest podobne.Zadanie 2.2.2Listing 10.29.Rozwiązanie zadania 2.2
[ Pobierz całość w formacie PDF ]