• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++/CLI ]Niepoprawne liczenie sinusa w projekcie kalkulatora graficznego

HackNation - ogólnopolski hackathon
0 głosów
637 wizyt
pytanie zadane 26 października 2016 w C i C++ przez Piotr Królak Obywatel (1,950 p.)

Cześć, Jestem w trakcie projektowania kalkulatora graficznego który będzie wyświetlał wartości trygenometryczne, przy czym niestety, dla kalkulatora  "sin(30) = -0,988031624092862" co oczywiście nie jest poprawną wartością... fragment kodu odpowiedzialny za akcję przycisku SIN znajduje się poniżej, proszę o pomoc lub chociaż naprowadzenie na prawidłowy tok rozumowania...
 

private: System::Void butSin_Click(System::Object^  sender, System::EventArgs^  e) 
		 {
			 //sin
			 double b = Double::Parse(txtDisplay -> Text);
			 label -> Text = System::Convert::ToString("sin " + "(" + (txtDisplay -> Text) + ")" );
			 b = Math::Sin(b);
			 txtDisplay -> Text = System::Convert::ToString(b);
		 }

 

2 odpowiedzi

0 głosów
odpowiedź 26 października 2016 przez criss Mędrzec (172,570 p.)
wybrane 26 października 2016 przez Piotr Królak
 
Najlepsza
Źle przeliczasz na radiany. Chcesz uzyskać wartość 1 kąta w radianach, więc powinieneś podzielić ~3.14 (pi w radianach) przez 180 (pi w stopniach). Ty robisz na odwrót.

Druga sprawa: w C++ (i innych C) do rozdzielenia części całkowitej i ułamkowej służy kropka.
komentarz 26 października 2016 przez Piotr Królak Obywatel (1,950 p.)
przecinek to przeoczenie..podobnie jak dzielenie, źle wyprowadziłem...Dziękuję ! :)
0 głosów
odpowiedź 26 października 2016 przez Eryk Andrzejewski Mędrzec (164,260 p.)
Funkcja Math::Sin() wylicza wartość dla radianów, a ty chcesz jak rozumiem obliczyć wartość dla argumentu w stopniach, dlatego musisz ją sobie przekonwertować.
komentarz 26 października 2016 przez Piotr Królak Obywatel (1,950 p.)
W dalszym ciągu nie tłumaczy to jednak znaku - przy wyniku...
komentarz 26 października 2016 przez Piotr Królak Obywatel (1,950 p.)

Po zmianie jak niżej, czyli zamianie argumentu podawanego do funkcji na stopnie w dalszym ciągu wartość jest nieprawidłowa, dla sin(30)=0,132202352755937...kiedy powinno oczywiście 0,5...

Kod po zmianie, poniżej:

private: System::Void butSin_Click(System::Object^  sender, System::EventArgs^  e) 
		 {
			 //sin
			 double b = Double::Parse(txtDisplay -> Text);
			 b = (b*180)/3,1415;
			 label -> Text = System::Convert::ToString("sin " + "(" + (txtDisplay -> Text) + ")" );
			 b = Math::Sin(b);
			 txtDisplay -> Text = System::Convert::ToString(b);
		 }

 

komentarz 26 października 2016 przez niezalogowany

Nie powinno być czasem:

b = (b*3,1415)/180;

Na początku z wejścia wczytujesz w kątach, a sinus przyjmuje radiany. Wcześniej miałeś jakby zamianę na kąt.

 

komentarz 26 października 2016 przez Piotr Królak Obywatel (1,950 p.)
To prawda, źle wyprowadziłem...mój bąłąd dziękuję ! :)

Podobne pytania

0 głosów
1 odpowiedź 877 wizyt
pytanie zadane 27 października 2016 w C i C++ przez Piotr Królak Obywatel (1,950 p.)
0 głosów
1 odpowiedź 278 wizyt
pytanie zadane 2 listopada 2016 w C i C++ przez Piotr Królak Obywatel (1,950 p.)
0 głosów
1 odpowiedź 316 wizyt
pytanie zadane 27 sierpnia 2023 w C i C++ przez Code_ Użytkownik (520 p.)

93,626 zapytań

142,549 odpowiedzi

323,034 komentarzy

63,129 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 1210p. - dia-Chann
  2. 1197p. - DziarnowskiJ
  3. 1177p. - Łukasz Piwowar
  4. 1172p. - CC PL
  5. 1161p. - Maurycy W
  6. 1141p. - Adrian Wieprzkowicz
  7. 1138p. - raydeal
  8. 1134p. - Tomasz Bielak
  9. 1116p. - rucin93
  10. 1101p. - robwarsz
  11. 1100p. - Mariusz Fornal
  12. 1024p. - ssynowiec
  13. 885p. - Dominik Łempicki (kapitan)
  14. 847p. - Grzegorz Aleksander Klementowski
  15. 838p. - Wojciech Malicki
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...