Pereiti prie turinio

C++ užduotis - klaidos nėra, bet duoda blogą rezultatą


Rekomenduojami pranešimai

Užduotis yra apskaičiuoti, ar koordinačių plokštumoje esantis taškas yra trikampio, kuris yra taip pat plokštumoje, viduryje.

Algortimas gaunasi toks, kad suvedi koordinates, paskaičiuoja tam tikrus plotus, ir jei jie lygus, tuomet taškas yra viduje

 

Problema tokia, kad plotus apskačiuoja teisingai ir be problemų, išvedus į ekraną rodo tokius pat rezultatus (pv. 307,5 ir 307,5), bet kai sukuriu if'ą, kad jei plotai lygus, rašytų, kad viduje, o jei ne, tada ne viduje, neveikia. Visuomet rašo, kad ne viduje

 

Galvoju, gal čia bus kažkur su int ir double prisižaidęs, bet nerišu kur

 

programos kodas:

#include <iostream>
#include <cmath>
#include <iomanip>

using namespace std;

double atstumas (int x1, int y1, int x2, int y2) //atstumas tarp dvieju tasku
{
   double ats;
   ats = sqrt((pow((x2-x1), 2) + pow((y2 - y1), 2)));
   return ats;
}

double plotas (int ax, int ay, int bx, int by, int cx, int cy) //herono formule trikampio plotui
{
   double s, p;
   p = (atstumas(ax, ay, bx, by) + atstumas (ax, ay, cx, cy) + atstumas (bx, by, cx, cy))/2;
   s = sqrt((p*(p-atstumas(ax, ay, bx, by))*(p-atstumas (ax, ay, cx, cy))*(p-atstumas (bx, by, cx, cy))));
   return s;
}

double plotasABCD (int ax, int ay, int bx, int by, int cx, int cy, int xt, int xy) //tasko D triju trikampiu suma
{
   double abd, acd, bdc;
   abd = plotas (ax, ay, bx, by, xt, xy);
   bdc = plotas (bx, by, cx, cy, xt, xy);
   acd = plotas (ax, ay, cx, cy, xt, xy);
   return abd + bdc + acd;
}
int main()
{
   setlocale(LC_ALL, "Lithuanian");
   double ax, ay, bx, by, cx, cy, xt, xy, sabc, stasko;
   cout << "Iveskite A tasko x ir y koordinates:\n";
   cin >> ax >> ay;
   cout << "Iveskite B tasko x ir y koordinates:\n";
   cin >> bx >> by;
   cout << "Iveskite C tasko x ir y koordinates:\n";
   cin >> cx >> cy;
   cout << "Iveskite D tasko x ir y koordinates:\n";
   cin >> xt >> xy;
   sabc = plotas(ax, ay, bx, by, cx, cy);
   stasko = plotasABCD(ax, ay, bx, by, cx, cy, xt, xy);
   cout << sabc << "  " << stasko << endl;  //raso kad plotai vienodi
   if (sabc = stasko)
   {
       cout << "Taskas yra trikampio viduje";
   }
   return 0;
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Pavojinga taip lyginti du slankaus kablelio skaičius. Spėk, ką tolimesnis kodas atspausdina:

if (1.0 == 0.9999999999999999999) {
   cout << "Intel Inside" << endl;
}

 

Teisingas būdas lyginti slankaus kablelio skaičius yra paimti jų skirtumą ir žiūrėti, ar jis mažesnis už tam tikrą tolerancijos ribą:

const int EPS = 0.000001;
if (fabs(sabc - stasko) < EPS) {
   // 'sabc' ir 'stako' lygūs su tikslumu 10^-6 
}

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

×
×
  • Pasirinkite naujai kuriamo turinio tipą...