Ciąg arytmetyczny to taki ciąg w którym różnica dwóch kolejnych wyrazów jest stała i wynosi r. Dla takiego ciągu definiuje się następujący wzór na n + 1 wyraz:
an + 1 = an + r
gdzie: an - oznacza n-ty wyraz ciągu, a r to różnica ciągu arytmetycznego.
a1 | r | Kolejne wyrazy ciągu |
---|---|---|
3 | 1 | 3, 4, 5, 6, 7, ... |
10 | 5 | 10, 15, 20, 25, 30, ... |
6 | -2 | 6, 4, 2, 0, -2, ... |
Celem artykułu jest wyjaśnienie jak zaimplementować w programie funkcje, które pozwolą na obliczanie wyrazów ciągu i sprawdzanie jego cech przy pomocy języka C++.
Pierwszą funkcją, która przyda się podczas implementacji innych funkcji będzie wyliczała n-ty wyraz ciągu arytmetycznego:
Jest to wersja rekurencyjna kodu do obliczania n-tego wyrazu zgodnie z wyżej podanym kodem. (1.) Program przyjmuje trzy argumenty: a1 - pierwszy wyraz ciągu, r - różnica ciągu arytmetycznego oraz n - numer wyrazu do wyznaczenia. (2.) Jeśli numer wyrazu jest równy 1 to (3.) należy zwrócić a1. W przeciwnym wypadku (5.) zgodnie ze wzorem należy zwrócić sumę wyrazu poprzedniego oraz różnicy ciągu.
Jednak zdecydowanie lepszym rozwiązaniem jest wyliczanie n-tego wyrazu nie przy pomocy rekurencji, a gotowego stałego wzoru: an = a1 + (n - 1)r. Wtedy kod znacząco upraszcza się do jednej linijki i nie wymaga żadnej rekurencji:
W celu zsumowania n pierwszych wyrazów ciągu i nie korzystając z wzoru podawanego na zajęciach z matematyki kod może wyglądać tak:
Jednak ponownie jak w poprzednim przypadku wystarczy specjalny wzór: i liczba operacji wykonywanych przez komputer jest stała i niezależna od ilości sumowanych wyrazów:
Ze względu na fakt, że ciąg arytmetyczny ma stałą różnicę pomiędzy wyrazami to z tego wynika, że . Na podstawie tej własności można napisać program, który będzie sprawdzał czy wprowadzony ciąg liczb jest ciągiem arytmetycznym:
(1.) Funkcja zwraca wartość logiczną, która określa czy liczby zapisane na liście l o długości n spełniają kryterium ciągu arytmetycznego. (2.) Dla każdego wyrazu (prócz pierwszego i ostatniego): (3.) należy sprawdzić czy zachodzi warunek. Uwaga: należy pamiętać, że podczas dzielenie może dojść do błędu zaokrąglenie, dlatego sumę należy rzutować na typ double.. (4.) Jeśli choć raz warunek nie jest spełniony można od razu zwrócić fałsz. Jeśli jednak program nie przerwie pętli for to program zwróci prawdę.
Powyższe funkcje można sprawdzić przy pomocy poniższego programu:
Napisz funkcje generuj_ciag(), która utworzy nową listę o zadanej długości n, a kolejne elementy listy będą odpowiadały kolejnym wyrazom ciągu począwszy od pierwszego wyrazu. Spróbuj napisać funkcję bez użycia funkcji o podobnym działaniu do funkcji podajNwyraz()
Napisz funkcje sumakn(), która będzie obliczała sumę wyrazów począwszy od numeru k do numeru n. Funkcja powinna mieć nagłówek sumakn(int a1, int r, int k, int n)