Quantcast
Channel: HAKER - Forum Komputerowe
Viewing all articles
Browse latest Browse all 4549

Problem z funkcją sqrt()

$
0
0
Witam,

otóż rozwiązując pewne zadanie, natknąłem się na pewien problem. Wygląda to tak:
Kod:

#include <iostream>
#include <math.h>
using namespace std;
int main()
{
    int n;

    cin >> n;
   
    for (int i=1;i <= n; i++)
    {
        int x1,x2,y1,y2,r1,r2,a=0,b=0;
       
// dla danych wejściowych: 0 3 2 3 2 1

        cin >> x1;
        cin >> y1;
        cin >> r1;
       
        cin >> x2;
        cin >> y2;
        cin >> r2;
       
        if (x1 > x2) a = x1 - x2;
        if (x2 > x1) a = x2 - x1;
        else a = 0;
       
        if (y1 > y2) b = y1 - y2;
        if (y2 > y1) b = y2 - y1;
        else b = 0;
       
        double d = 0.0000000;
        d = sqrt(a*a+b*b);
       
        if (r1+r2 >= d) cout << "TAK" <<endl;
        else cout << "NIE" << endl;
    }
}

Zadaniem tego programu jest mając podane współrzędne, środków dwóch kół i długość ich promieni, określić, czy koła te mają chociaż jeden punkt wspólny. Ja to zrobiłem tak, że na tych dwóch punktach opisałem prostokąt, policzyłem jego boki i chcę teraz wyliczyć długość przekątnej, i tu pojawia się problem, ponieważ program ten, liczy dla np. 10 funkcją sqrt() pierwiastek wielkości 3, a nie 3,16... a to duża różnica. Natomiast co ciekawe pisząc dla sprawdzenia taki kod:

Kod:

#include <iostream>
#include <math.h>
using namespace std;
int main()
{
    int a, b;
    for (;;)
    {
   
    double d=0.0000000000;
   
    cin >> a; // ma wynosic 3
    cin >> b; // ma wynosic 1
   
    d = sqrt(a*a+b*b);
   
    if (3 >= d) cout << "TAK"; // 3 to jest laczna dlugosc promieni obu kół
    else cout << "NIE";
}
}

I tu o dziwo okazuje się, że ta funkcja działa poprawnie. Więc zwracam się z pytaniem na tym forum, co jest nie tak z pierwszym kodem ?

Pozdrawiam,
Ninjago

PS.Jeśli trzeba to mogę podesłać treść tego zadania.

Viewing all articles
Browse latest Browse all 4549