Implementacja klasycznych algorytmów iteracyjnych w C++
Transkrypt
Implementacja klasycznych algorytmów iteracyjnych w C++
Implementacja klasycznych algorytmów iteracyjnych w C++ Na początku tego rozdziału pokażemy, jak iteracyjnie wyznaczyć najmniejszą wartość w ciągu liczb pobieranych z klawiatury. Następnie omówimy kilka klasycznych algorytmów badających własności liczb. Nauczysz się badać, czy liczba jest pierwsza, i poznasz algorytm Euklidesa, za którego pomocą można wyznaczyć NWD i NWW dwóch liczb. Dowiesz się, jak napisać funkcję obliczającą przybliżoną wartość pierwiastka kwadratowego z liczby nieujemnej, nie korzystając z pliku bibliotecznego, w którym zdefiniowane są funkcje matematyczne. Zapoznasz się też z metodą obliczania pola obszaru o nieregularnym kształcie. Pokażemy również jedną z metod znajdowania przybliżonej wartości miejsca zerowego funkcji. Na koniec powiemy ci, czym są metody Monte Carlo. Znajdowanie najmniejszego lub największego elementu w ciągu liczb Wyznaczenie najmniejszego lub największego elementu zbioru znajduje zastosowanie w programach, które służą do wskazania na przykład wieku najstarszego człowieka, najniższej temperatury albo długości skoku najlepszego skoczka. Ten problem omówiliśmy w poprzednim rozdziale dla szczególnego przypadku - zbioru trzyelementowego. Przykład Napiszmy program, który z k wczytanych liczb wyznacza liczbę najmniejszą. Program powinien wczytać najpierw liczbę k oznaczającą, ile liczb znajduje się w badanym ciągu. Następnie program powinien wczytać k liczb i wyznaczyć najmniejszą z nich. Najmniejsza wartość będzie zapamiętywana w zmiennej min. Po wprowadzeniu pierwszej liczby z badanego ciągu przyjmujemy ją za tymczasowe minimum, nie sprawdzając żadnych dodatkowych warunków. Po wprowadzeniu każdej następnej liczby sprawdzamy, czy jest ona mniejsza od dotychczasowego minimum. Jeśli tak, to jej wartość przyjmujemy odtąd za nowe minimum. Po wprowadzeniu i sprawdzeniu ostatniej liczby pozostaje już tylko wypisanie wartości najmniejszego elementu i zakończenie programu. Oczywiście w programie należy zastosować licznik, który będzie kontrolował ilość wprowadzonych liczb. Na początku programu licznik przyjmie wartość równą ilości badanych liczb, a po każdej wprowadzonej liczbie jego wartość zmniejszymy o jeden. Specyfikacja problemu algorytmicznego Problem algorytmiczny: Znalezienie minimum w ciągu liczb Dane wejściowe: ݇ ∈ ܰ - ilość liczb ܽଵ , ܽଶ , … ܽ ; ܽଵ… ∈ ܴ - ciąg licz Dane wyjściowe: ݉݅݊ ∈ ܴ Algorytm w postaci listy kroków zapiszemy następująco: 1. Wczytaj k. 2. Wczytaj a. 3. Zmiennej min przypisz wartość a. 4. Jeśli k jest równe 1, wypisz min i zakończ. 5. Wczytaj a. 6. Zmniejsz k o 1. 7. Jeśli a < min, przejdź do kroku 3. 8. Przejdź do kroku 4. Gotowy schemat blokowy prezentuje rycina: Ryc. 4.1. Schemat blokowy algorytmu wyszukiwania wartości najmniejszej w ciągu k liczb podanych na wejściu Pozostało nam już tylko napisać program, który wykorzystuje ten algorytm: W analogiczny sposób możemy znaleźć największy element w ciągu wprowadzanych liczb. Sprawdzalibyśmy tylko, czy kolejno wprowadzona liczba jest większa od aktualnie ustalonego maksimum.