Jak zaimplementować wzór matematyczny?

0

Hej,

Zaczynam pomału wdrażać się w C++.

Należy napisać program, który oblicza wartość y dla podanych przez użytkownika wartości x, y_0, v_0 i ∝.

Wzór jest następujący:
screenshot-20231023041320.png

Po wpisaniu wartości x = 1.5, y0 = 1, v0 = 14.4 km/h (z km/h na m/s) czyli 4 m/s oraz kąt = 45 wychodzi wynik 2.394..
screenshot-20231023041612.png

Natomiast w wolframiealpha wychodzi 1.12..
screenshot-20231023041658.png
Czy problem leży w samych obliczeniach? Czy coś pominąłem? Z góry dziękuje za pomoc :)

Kod:

#include<iostream>
#include<iomanip>
#include <cmath>
#include <math.h>
#include <cstdlib>
using namespace std;

double DegreestoRadians(double x) {
	const double p = 3.141592653589793238462643;
	double r = x * (p / 180);
	return r;
}

double KmphtoMps(double x) {
	double mps = x / 3.6;
	return mps;
}

double Parable(double x, double y0, double v0, double k) {
	const double g = 9.81;
	double y = (x * tan(k)) - (g * pow(x, 2) / (2 * pow(v0, 2) * pow(cos(k),2))) + y0; /*Do sprawdzenia*/
	return y;
}

int main() {

	double x, y0, v0, k;

	cout << "Podaj x" << endl;
	cin >> x;
	cout << "Podaj y0" << endl;
	cin >> y0;
	cout << "Podaj v0" << endl;
	cin >> v0;
	cout << "Podaj kat" << endl;
	cin >> k;


	cout << fixed << setprecision(3);
	cout << DegreestoRadians(k) << endl;
	cout << KmphtoMps(v0) << endl;
	cout << Parable(x, y0, v0, DegreestoRadians(k)) << endl;
}
1

Nie mam pojęcia, co może być nie tak, ale na pewno wypisując tylko wynik, nie znajdziesz błędu. Wypisz sobie na ekran wszystkie zmienne wejściowe - może coś się psuje podczas zaczytywania zmiennych. Wypisz sobie na ekran wzór "po kawałku" - może coś się psuje przy mnożeniu/potęgowaniu/dzieleniu/.... Na pewno sam znajdziesz co jest nie tak.

Btw, sprawdź też wolframa. Najlepiej innym kalkulatorem, albo excelem np.

Tip: śmierdzi mi tutaj ten cos^2, czy to jest (cos(x))^2 czy (cos(x^2)) :)

3

Widzę literówkę w danych wejściowych wolframalpha. Jest 4 zamiast 14.4
https://www.wolframalpha.com/input?i=x+%3D+1.5%2C+y%3D1%2C+v%3D14.4%2C+a+%3D+45+deg%2C+g+%3D+9.81%2C+x+*+tg+a+-+1%2F%282*v%5E2%29+*+%28g*x%5E2%29+%2F+%28cos+a%29%5E2+%2B+y
vs
https://godbolt.org/z/Ys1c3j5P1

Dlaczego nie należy zamieszczać kodu w postaci obrazków
Szkoda, że dane wejściowe podałeś jako obrazek, a wolframalfa bez linka.
Forum też ma opcje obsługi LaTeX:
<tex>y = x + \tan \alpha - \frac{1}{2\cdot v_0^2}\frac{g \cdot x^2}{\cos^2 \alpha} + y_0</tex>
y = x + \tan \alpha - \frac{1}{2\cdot v_0^2}\frac{g \cdot x^2}{\cos^2 \alpha} + y_0

1

Liczby całkowite mogą poranić paluszki np przy dzieleniu

A funcke trygonometryczne nie karmi się nie stopniami, a radianami

Funkcja pow() ma główne przeznaczenie obliczenia niecałkowite potęgi, dla całkowitych jest niepotrzebną stratą dokładności.

0
MarekR22 napisał(a):

Widzę literówkę w danych wejściowych wolframalpha. Jest 4 zamiast 14.4
https://www.wolframalpha.com/input?i=x+%3D+1.5%2C+y%3D1%2C+v%3D14.4%2C+a+%3D+45+deg%2C+g+%3D+9.81%2C+x+*+tg+a+-+1%2F%282*v%5E2%29+*+%28g*x%5E2%29+%2F+%28cos+a%29%5E2+%2B+y
vs
https://godbolt.org/z/Ys1c3j5P1

Dlaczego nie należy zamieszczać kodu w postaci obrazków
Szkoda, że dane wejściowe podałeś jako obrazek, a wolframalfa bez linka.
Forum też ma opcje obsługi LaTeX:
<tex>y = x + \tan \alpha - \frac{1}{2\cdot v_0^2}\frac{g \cdot x^2}{\cos^2 \alpha} + y_0</tex>
y = x + \tan \alpha - \frac{1}{2\cdot v_0^2}\frac{g \cdot x^2}{\cos^2 \alpha} + y_0

Dziękuje panu Markowi za pomoc w znalezieniu pomyłki!!!
Jestem ogromnie wdzięczny.

Problem leżał w ostatniej linijce kodu:

Poprzednio:

cout << Parable(x, y0, v0, DegreestoRadians(k)) << endl;

A powinno być:

cout << Parable(x, y0, KmphtoMps(v0), DegreestoRadians(k)) << endl;

Czyli nie odniosłem się do funkcji konwertującej.. mnożył to wszystko przez 14.4 a nie 4 jak powinno.. Dziękuje cieplutko jeszcze raz!

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