ZAD: Napisać program wczytujący liczbę naturalną \(\displaystyle{ n}\). Należy obliczyć \(\displaystyle{ n}\)-ty wyraz ciągu zadanego
wzorem \(\displaystyle{ a_n = 3\cdot (-1)^n \cdot 2^{n+1}}\) i wypisać wynik na ekranie.
Problem pierwszy to uzyc komendy int czy double? bo naturalna jest i rzeczywistą i całkowitą, więc tu sie gubie. Drugi problem to wyczytałam że nie ma mozliwosci w c++ uzyc indeksu dolnego.. a więc jak zapisać ciąg \(\displaystyle{ a_n}\)?
[C++] Oblicz wyraz ciągu
-
- Użytkownik
- Posty: 15
- Rejestracja: 15 gru 2019, o 20:24
- Płeć: Kobieta
- wiek: 19
[C++] Oblicz wyraz ciągu
Ostatnio zmieniony 26 lut 2020, o 14:17 przez Afish, łącznie zmieniany 2 razy.
Powód: Poprawa wiadomości.
Powód: Poprawa wiadomości.
Re: [C++] Oblicz wyraz ciągu
Ani
Co do drugiego problemu - co masz na myśli mówiąc "indeks dolny"? Przecież C++ to nie jest język zapisu równań matematycznych, tylko język programowania. Zdefiniuj zmienną, która będzie odpowiednikiem \(\displaystyle{ a_n}\) i nazwij ją jak chcesz (no prawie jak chcesz, nie możesz jej nazwać z indeksem dolnym - ale co z tego?).
int
, ani double
nie jest komendą - są to typy. Powinnaś użyć typu, który najlepiej reprezentuje opisywaną przez ciebie operację. Zastanów się - czy gdzieś w twojej operacji będzie potrzebna liczba rzeczywista, czy liczby całkowite wystarczą? Jeżeli przecinek będzie niezbędnny - użyj float
albo double
, a jeżeli liczby całkowite wystarczą użyj int
.Co do drugiego problemu - co masz na myśli mówiąc "indeks dolny"? Przecież C++ to nie jest język zapisu równań matematycznych, tylko język programowania. Zdefiniuj zmienną, która będzie odpowiednikiem \(\displaystyle{ a_n}\) i nazwij ją jak chcesz (no prawie jak chcesz, nie możesz jej nazwać z indeksem dolnym - ale co z tego?).
- Dasio11
- Moderator
- Posty: 10227
- Rejestracja: 21 kwie 2009, o 19:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 40 razy
- Pomógł: 2362 razy
Re: [C++] Oblicz wyraz ciągu
Akurat w tym wypadku lepszy jest
float
, ale nie ze względu na możliwość reprezentowania liczb niecałkowitych, lecz na zakres przyjmowanych wartości: int
zadziała tylko dla \(\displaystyle{ n \le 28}\), podczas gdy float
poradzi sobie gdy \(\displaystyle{ n \le 125}\).Re: [C++] Oblicz wyraz ciągu
Zastanawiałeś się kiedyś jak to jest, że
Edit. Pomyślałem, że może Ci chodzić o to, że wyraz zadanego ciągu przypomina liczbę zmiennoprzecinkową, dlatego
float
, może przyjmować wartości niecałkowite, zajmuje cztery bajty (tyle samo co int
) i ma zakres nieporównywalnie większy niż int
? Otóż precyzja nie dotyczy ilości cyfr "po przecinku", a precyzji jako takiej. Precyzja nie jest stała, jest ona funkcją samej liczby - duże liczby są mało precyzyjne, podczas gdy liczby małe są bardzo precyzyjne. Wynika to z natury reprezentacji liczb rzeczywistych - takie liczby są reprezentowane jako zmiennoprzecinkowe. Innymi słowy podstawowa metoda zapisu takiej liczby wykorzystuje mnożenie i potęgowanie, liczby nie są zapisywane per se. W przypadku int
mowy o precyzji nie ma, każda liczba jest zapisana w pełni precyzyjnie. float
, jak można się domyślić bardzo szybko staje się nieprecyzyjny. Jeżeli chcesz poświęcić precyzję na rzecz większego zakresu - użyj float
, precyzyjny wynik uzyskasz za pomocą int
.Edit. Pomyślałem, że może Ci chodzić o to, że wyraz zadanego ciągu przypomina liczbę zmiennoprzecinkową, dlatego
float
mógłby reprezentować liczby dość precyzyjnie w większym zakresie. Okazuje się, że tak jest, ale liczby są reprezentowane precyzyjnie nie w całym zakresie, ale do \(\displaystyle{ n=57}\), czyli faktycznie jest to zakres większy niż int
.- Dasio11
- Moderator
- Posty: 10227
- Rejestracja: 21 kwie 2009, o 19:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 40 razy
- Pomógł: 2362 razy
Re: [C++] Oblicz wyraz ciągu
Słusznie pomyślałeś, ale odnośnie zakresu nie masz racji, bo liczba \(\displaystyle{ a_{125} = (-1) \cdot 1{,}1_{(2)} \cdot 2^{127}}\) ma dokładną reprezentację w typieDudenzz pisze: ↑27 lut 2020, o 23:46Pomyślałem, że może Ci chodzić o to, że wyraz zadanego ciągu przypomina liczbę zmiennoprzecinkową, dlategofloat
mógłby reprezentować liczby dość precyzyjnie w większym zakresie. Okazuje się, że tak jest, ale liczby są reprezentowane precyzyjnie nie w całym zakresie, ale do \(\displaystyle{ n=57}\), czyli faktycznie jest to zakres większy niżint
.
Kod: Zaznacz cały
https://pl.wikipedia.org/wiki/IEEE_754
-
- Użytkownik
- Posty: 15
- Rejestracja: 15 gru 2019, o 20:24
- Płeć: Kobieta
- wiek: 19
- Dasio11
- Moderator
- Posty: 10227
- Rejestracja: 21 kwie 2009, o 19:04
- Płeć: Mężczyzna
- Lokalizacja: Wrocław
- Podziękował: 40 razy
- Pomógł: 2362 razy
Re: [C++] Oblicz wyraz ciągu
Jeśli wejściowe \(\displaystyle{ n}\) może przyjmować wartości większe niż \(\displaystyle{ 28}\), to lepszy będzie
float
. W przeciwnym razie możesz użyć int
a (i nawet jest to delikatnie lepszy wybór ze względu na dokładność, z jaką liczba jest wypisywana na ekran).