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.

Podobne dokumenty