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

Odleglosc miedzy dwoma punktami

Object Storage Arubacloud
0 głosów
2,064 wizyt
pytanie zadane 28 listopada 2016 w C i C++ przez unbearable Początkujący (450 p.)

Hej!

Potrzebuje obliczyc odleglosc miedzy dwoma punktami z dokladnoscia do dwóch miesjc po przecinku. Stworzyłem funkcje która powinna zwracać poprawna niestety podczas pierwiastkowania nastepuje zaokraglenie. Np. dla wartosci A(2,-4) B(-3,5) powinienem otrzymac wynik sqrt(106) ~= 10,29 Program zwraca natomiast liczbe 10. W którym miejscu popełniłem błąd ? 

policz_odleglosc(double x1,double y1,double x2,double y2)
{
    double d,pom1,pom2;
    pom1 = pow((x2-x1),2.0); // (x2-x1)^2
    pom2 = pow((y2-y1),2.0); // (y2-y1)^2
    d = sqrt(pom1+pom2); // calosc
    return d;

}

int main()
{
    double x1,y1,x2,y2;
    cout << "Podaj punkt x1 oraz y1: ";
    cin >> x1 >> y1;
    cout << "Podaj punkt x2 oraz y2: ";
    cin >> x2 >> y2;
    cout << "Odleglosc miedzy punktami wynosi: " << policz_odleglosc(x1,y1,x2,y2);
    return 0;
}

1 odpowiedź

+1 głos
odpowiedź 28 listopada 2016 przez plkpiotr Stary wyjadacz (12,420 p.)
edycja 28 listopada 2016 przez plkpiotr
 
Najlepsza

Nie wiemy nic o typie zwracanym w funkcji policz_odleglosc (najwyraźniej nie przekopiowałeś całości), jeżeli nie jest to reprezentacją liczby zmiennoprzecinkowej (np. float, double) to automatycznie reszta po przecinku będzie ucinana... Być może to było przyczyną błędu u Ciebie.

Załóżmy jednak, że zwracamy typ double - może się okazać, że wynik będzie wyświetlany w notacji wykładniczej np. 4.23099e+008 dla relatywnie dużych liczb, co nie będzie zgodnie z Twoimi oczekiwaniami, stąd zastosujmy formatowanie fixed, umożliwi nam to wyświetlanie cyfr w tradycyjnej formie. Piszesz, że chciałbyś otrzymać liczbę do dwóch cyfr po przecinku, więc również sformatujmy wyświetlanie, tym razem poprzez setprecision(2). Pamiętaj, że skoro manipulujemy strumieniem wyjścia powyższymi komendami to musimy dołączyć nagłówek <iomanip> ; )

Finalnie będzie to coś takiego:

#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;

double policz_odleglosc(double x1, double y1, double x2, double y2) {
    double d, pom1, pom2;
    pom1 = pow((x2 - x1), 2.0); // (x2-x1)^2
    pom2 = pow((y2 - y1), 2.0); // (y2-y1)^2
    d = sqrt(pom1 + pom2); // calosc
    return d;
}

int main() {
    double x1, y1, x2, y2;
    cout << "Podaj punkt x1 oraz y1: ";
    cin >> x1 >> y1;
    cout << "Podaj punkt x2 oraz y2: ";
    cin >> x2 >> y2;
    cout << "Odleglosc miedzy punktami wynosi: " << setprecision(2) << fixed << policz_odleglosc(x1, y1, x2, y2);
    return 0;
}

Tutaj możesz znaleźć więcej informacji na ten temat: Obsługa strumienia cout : )

Podobne pytania

0 głosów
1 odpowiedź 1,079 wizyt
pytanie zadane 15 kwietnia 2017 w JavaScript przez Neespa Początkujący (300 p.)
0 głosów
1 odpowiedź 409 wizyt
0 głosów
3 odpowiedzi 2,881 wizyt
pytanie zadane 6 lipca 2017 w Python przez DODO Bywalec (2,950 p.)

92,567 zapytań

141,420 odpowiedzi

319,616 komentarzy

61,953 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!

...