• 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

Object Storage Arubacloud
0 głosów
245 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,590 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ź 631 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ź 135 wizyt
pytanie zadane 2 listopada 2016 w C i C++ przez Piotr Królak Obywatel (1,950 p.)
0 głosów
1 odpowiedź 118 wizyt
pytanie zadane 27 sierpnia 2023 w C i C++ przez Code_ Użytkownik (520 p.)

92,555 zapytań

141,402 odpowiedzi

319,538 komentarzy

61,938 pasjonatów

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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...