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

Dokonaj analizy toru mrówki

VPS Starter Arubacloud
0 głosów
680 wizyt
pytanie zadane 9 października 2020 w C i C++ przez AdamKe Nowicjusz (200 p.)


 

#include <iostream>
#include <cmath>
#include <math.h>

using namespace std;
float r,T,t,t_pocz,x,y,wynik;
int main()
{
    cout << "Podaj promien: ";
    cin >> r;
    cout << "\nPodaj czas pelnego okrazenia: ";
    cin >> T;
    cout << "\nPodaj pelen krok czasowy: ";
    cin >> t;
    cout << "\nPodaj czas poczatkowy: ";
    cin >> t_pocz;

    x = r * sin(2*M_PI*t/T);
    y = r * cos(2*M_PI*t/T);

    cout << "x= "<<x<<endl; //pomocnicze wyswietlanie
    cout << "y= "<<y<<endl; //pomocnicze wyswietlanie

    for(int i=3; i>y; i=i+t){
        x = r * sin(2*M_PI*i/T);
        wynik = t;
    }
    cout << wynik;


    return 0;
}

Czemu pod koniec wynik = 0?

komentarz 9 października 2020 przez Oscar Nałogowiec (29,300 p.)
Dwa poziomy problemów:

Informatyczne - dodajesz do inta małą wartość float - krok czasowy to 0.02, jak tyle się doda do inta i wynik podstawi do int to nie będzie efektu.

Dlaczego w pętli liczysz tylko x? y też się zmienia.

Fizyczne - Zmienna i w programie reprezentuje czas, zmienna y to współrzędna. Porównujesz dwie liczby reprezentujące inne wielkości fizyczne.

Tak ogólnie współrzędna y jest równa x gdy ten argument funkcji trygonometrycznej to PI/4 (45 stopni) przy przekraczaniu tych ukośnych zostaje spełniony warunek zakończenia, ale rozumiem, że masz napisać rozwiązanie informatyczne a nie analityczne. Ale jeden problem - wynik ma być z dokładnością do 0.01 a krok obliczeń to 0.05.

1 odpowiedź

0 głosów
odpowiedź 9 października 2020 przez TOM_CPP Pasjonat (22,640 p.)

Jeżeli w pętli

for(int i=3; i>y; i=i+t)

warunkiem jej opuszczenia jest i>y oraz wartość i za każdym razem wzrasta, to mamy do czynienia z overflow.

Drugą sprawą jest dodawanie i=i+t gdzie dodajesz zmienną typu float do zmiennej typu int, co prowadzi do niejawnego zaokrąglenia wartości (gdy t<0.5 to i w ogóle nie rośnie)

komentarz 9 października 2020 przez AdamKe Nowicjusz (200 p.)
Okej, rozumiem, ale to jak mam zamknąć pętle kiedy x przekroczy y oraz jak zwiększać czas o 0.05 w takim razie?
komentarz 9 października 2020 przez TOM_CPP Pasjonat (22,640 p.)
for( float x0 = 3.0f ; x0<y ; x0 += t )
{
    x = r * sin(2*M_PI*x0/T);
    cout << "Dla x0 = " << x0 << " : wartosc x = " << x << endl;
}

 

komentarz 9 października 2020 przez AdamKe Nowicjusz (200 p.)
Dziękuje za pomoc!

Podobne pytania

–2 głosów
1 odpowiedź 269 wizyt
pytanie zadane 4 grudnia 2020 w Java przez PirchHD Obywatel (1,730 p.)
0 głosów
1 odpowiedź 111 wizyt
pytanie zadane 5 sierpnia 2021 w Systemy operacyjne, programy przez Bartek12 Mądrala (5,510 p.)
0 głosów
1 odpowiedź 205 wizyt
pytanie zadane 23 grudnia 2019 w Grafika i multimedia przez wuufer Nowicjusz (120 p.)

92,963 zapytań

141,927 odpowiedzi

321,161 komentarzy

62,296 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.

Wprowadzenie do ITsec, tom 2

Można już zamawiać tom 2 książki "Wprowadzenie do bezpieczeństwa IT" - będzie to około 650 stron wiedzy o ITsec (17 rozdziałów, 14 autorów, kolorowy druk).

Planowana premiera: 30.09.2024, zaś planowana wysyłka nastąpi w drugim tygodniu października 2024.

Warto preorderować, tym bardziej, iż mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy dodatkowe 15% zniżki! Dziękujemy zaprzyjaźnionej ekipie Sekuraka za kod dla naszej Społeczności!

...