Precyzja z jaką ma być obliczony wynik

0

user image

Program już napisałem tzn. do zadania 3. Teraz myślę jak ogarnąć to 4.
Kod do zad: 3 jest prosty: http://wklej.org/id/1504124/

Troszkę kodu już zdążyłem stworzyć na laborkach do zad.4, ale nie działa tak jak powinien: http://wklej.org/id/1504127/
Tzn. teraz już sam właściwie nie wiem co miałem na myśli pisząc kod: pow(10.0,-warunek)

Może pomożecie mi z tym warunkiem pętli, ja zaraz przeniosę się na lapka gdzie mam Visuala, i zacznę pisać kod.

2

Zacznijmy od tego, że do 3 też masz źle. Nie po to masz ten cały szereg, żeby korzystać z pow.

2

No kod tego 3 jest prosty, ale ten który napisałeś jest do d**y ;]
Za tego pow() to powinni cię tam łamać kołem... Rozumiem że nie potrafisz stwierdzić czy wynikiem (-1)n jest -1 czy 1 bez liczenia potęgi? :D Słyszałeś o takich rzeczach jak liczby parzyste albo nieparzyste? Wiesz że -1*-1 = 1? Więc czemu nie trzymasz sobie w zmiennej licznika tego ułamka i nie mnożysz przez -1 w każdym kroku?

Jeśli chodzi o zadnie 4 to nie wiem co ten WTF który wstawiłeś niby miał robić, ale z zadaniem to nie ma nic wspólnego. A to jest trywialna sprawa -> jeśli dwa kolejne przybliżenia twojego szeregu różnią sie o mniej niż ten zadany epsilon to znaczy że masz wynik z zadaną dokładnością, bo szereg ma wyrazy malejące i dążące do 0. To znaczy ze jeśli dwa kolejne przybliżenia różnią się o mniej niż epsilon to o więcej się już różnić nie będą.

0
twonek napisał(a):

Zacznijmy od tego, że do 3 też masz źle. Nie po to masz ten cały szereg, żeby korzystać z pow.

To czym to załatwić zamiast 'pow'?

Shalom napisał(a):

No kod tego 3 jest prosty, ale ten który napisałeś jest do d**y ;]
Za tego pow() to powinni cię tam łamać kołem... Rozumiem że nie potrafisz stwierdzić czy wynikiem (-1)n jest -1 czy 1 bez liczenia potęgi? :D Słyszałeś o takich rzeczach jak liczby parzyste albo nieparzyste? Wiesz że -1*-1 = 1? Więc czemu nie trzymasz sobie w zmiennej licznika tego ułamka i nie mnożysz przez -1 w każdym kroku?

Dla twojej wiadomości kod był realizowany na laborkach i zapisany przez wykładowcę.

0

@studenciaczekek Jak się pozbyć pow to @Shalom już Ci napisał.
Natomiast nie wiem jak wyjaśnić 4, bo treść zadania dosyć jasno mówi, więc może dam na przykładzie:
''wczytana precyzja: 0.1

  1. obliczany składnik: 1/1, mniejszy od precyzji? nie - licz dalej
  2. obliczany składnik: 1/3, mniejszy od precyzji? nie - licz dalej
  3.                 1/5                        nie
    
  4.                 1/7                        nie
    
  5.                 1/9                        nie
    
  6.                 1/11                       TAK - kończ''
    
0
twonek napisał(a):

@studenciaczekek Jak się pozbyć pow to @Shalom już Ci napisał.
Natomiast nie wiem jak wyjaśnić 4, bo treść zadania dosyć jasno mówi, więc może dam na przykładzie:
''wczytana precyzja: 0.1

  1. obliczany składnik: 1/1, mniejszy od precyzji? nie - licz dalej
  2. obliczany składnik: 1/3, mniejszy od precyzji? nie - licz dalej
  3.                 1/5                        nie
    
  4.                 1/7                        nie
    
  5.                 1/9                        nie
    
  6.                 1/11                       TAK - kończ''
    

Zrozumiałem to: jeszcze mam prośbę o pomoc, bo jak dla mnie sposób który przedstawił @Shalom dla rozwiązania problemu z pow to:

if (i % 2 == 0) // licznik potęgi parzysty
1/......

else
-1/....... 

O to chodzi, tak?

Co do Zad.4 - już zrozumiałem o co Ci chodzi moja pętla wykonuje się dopóki różnica dwóch kolejnych wyników jest większa od żądanej precyzji -> kod: http://wklej.org/id/1504175/

I otrzymuję takie coś:
dla 10 - 4
dla 1 - 3.46667
dla 0.1 - 3.18918
dla 0.01 - 3.14657
dla 0.001 - 3.14209
dla 0.0001 - 3.14164

Problem w tym czy wykładowcy chodziło o to, że jeśli np. użytkownik miał wpisać 0.01 to miał się wyświetlić wynik tylko do 2 miejsc po przecinku jak myślisz? Czy po prostu o działanie takie jak teraz, że podaje precyzję i im mniejszą wprowadzi tym większa precyzja wyniku który się wyświetla, ale w całej swojej okazałości nie ograniczony do danej liczby miejsc po przecinku?

Ostatnie pytanie, czy funkcja pow, ma jakieś ograniczenia, że wolelibyście żebym ją zastąpił?

1

O to chodzi, tak?
Nie trzeba użyć %, wystarczy zmienna, która będzie się mnożyć * -1 w każdej iteracji.

Co do Zad.4 - już zrozumiałem o co Ci chodzi moja pętla wykonuje się dopóki różnica dwóch kolejnych wyników jest większa od żądanej precyzji
Nadal źle robisz. Po pierwsze masz tam 4-krotność różnicy, a po drugie tę różnicę miałeś wcześniej obliczoną w pętli, wystarczy jej użyć.

Problem w tym czy wykładowcy chodziło o to, że jeśli np. użytkownik miał wpisać 0.01 to miał się wyświetlić wynik tylko do 2 miejsc po przecinku jak myślisz?
wczytać precyzję, z jaką ma być obliczony wynik - co ma jedno do drugiego?

Ostatnie pytanie, czy funkcja pow, ma jakieś ograniczenia, że wolelibyście żebym ją zastąpił?
Nikt nie wsiada do samochodu, żeby jechać do spożywczaka 20m dalej, prawda?

0
twonek napisał(a):

Problem w tym czy wykładowcy chodziło o to, że jeśli np. użytkownik miał wpisać 0.01 to miał się wyświetlić wynik tylko do 2 miejsc po przecinku jak myślisz?
wczytać precyzję, z jaką ma być obliczony wynik - co ma jedno do drugiego?

Chyba mnie nie rozumiesz, obliczam wynik dla precyzji 0.01 -> 3.14657

Pytanie czy wykładowcy chodziło o to, że wynik też ma być wyświetlony do 0.01 tzn. 3.14 - rozumiem, że nie.

PS: Gdzie w pętli mam obliczoną różnicę?

1

Ale ja nie mam żadnej zmiennej w której bym przechowywał wartość tego składnika
No to stwórz ją. Wtedy możesz wywalić wynik2 i drugie pytanie przestanie mieć rację bytu.

int i = 0;
int znak = 1;
double skladnik = 1000000;
while (skladnik > precyzja)
{
    skladnik = ...
    suma = ...
    ++i;
    znak *= -1;
}

1 użytkowników online, w tym zalogowanych: 0, gości: 1