Код на C++ выводит не верный результат

95
17 марта 2022, 23:00

Вот код:

#include <iostream>
#include <cmath>
using namespace std;
class Point{
protected:
 int x, y;
 friend void distance(Point &, Point &, Point &);
public:
 Point(){
  x=0;
  y=0;
 }
 Point(int x, int y){
  this->x=x;
  this->y=y;
 }
};

void distance(Point &p1, Point &p2, Point &p3){
 float fp, sp, tp;
 fp=sqrt(pow((p2.x-p1.x),2)+pow((p2.y-p1.y),2));
 sp=sqrt(pow((p3.x-p2.x),2)+pow((p3.y-p2.y),2));
 tp=sqrt(pow((p1.x-p3.x),2)+pow((p1.y-p3.y),2));
 cout<<"Первая точка:"<<fp<<endl;
 cout<<"Первая точка:"<<sp<<endl;
 cout<<"Первая точка:"<<tp<<endl;
}
void area(float fp, float sp, float tp){
    float p, res;
    p=(fp+sp+tp)/2;
    res=sqrt(p*(p-fp)*(p-sp)*(p-tp));
}
int main() {
 setlocale(LC_ALL, "ru");
 int x1, y1, x2, y2, x3, y3;
 float fp, sp, tp, res;
 cout << "***********************************" << endl;
 cout << "Введите координаты первой точки(X): ";
 cin >> x1;
 cout << "\n";
 cout << "Введите координаты первой точки(Y): ";
 cin >> y1;
 cout << "\n";
 cout << "Введите координаты второй точки(X): ";
 cin >> x2;
 cout << "\n";
 cout << "Введите координаты второй точки(Y): ";
 cin >> y2;
 cout << "\n";
 cout << "Введите координаты третьей точки(X): ";
 cin >> x3;
 cout << "\n";
 cout << "Введите координаты третьей точки(Y): ";
 cin >> y3;
 cout << "\n";
 Point firstpoint(x1, y1);
 Point secondpoint(x2, y2);
 Point thirdpoint(x3, y3);
 distance(firstpoint, secondpoint, thirdpoint);
 area(fp, sp, tp);
 cout<<"Площа трикутника:"<<res<<endl;

 system("pause");
 return 0;
}
Answer 1

А у вас результата просто нет. Вот тут

void area(float fp, float sp, float tp){
    float p, res;
    p=(fp+sp+tp)/2;
    res=sqrt(p*(p-fp)*(p-sp)*(p-tp));
}

вы считаете, считаете, присваиваете результат локальной переменной res и выходите из функции. res просто выброшена.

А тут

cout<<"Площа трикутника:"<<res<<endl;

выводите значение совсем другой res, объявленной тут

float fp, sp, tp, res;

и даже не инициализированной (о чем должен предупредить компилятор), т.е. содержащей какой-то мусор...

Примерно та же ерунда и с distance...

Как исправить ситуацию - сами разберетесь или нет?

Update

Посмотрите, что исправлено и как, обязательно разберитесь во всех изменениях!

#include <iostream>
#include <cmath>
using namespace std;
class Point{
protected:
    int x, y;
    friend double distance(Point, Point);
public:
    Point(int x = 0, int y= 0):x(x),y(y){}
};
double distance(Point p1, Point p2)
{
    return sqrt((p2.x-p1.x)*(p2.x-p1.x)+(p2.y-p1.y)*(p2.y-p1.y));
}
double area(double fp, double sp, double tp)
{
    double p = (fp+sp+tp)/2.0;
    return sqrt(p*(p-fp)*(p-sp)*(p-tp));
}
int main() {
    setlocale(LC_ALL, "ru");
    int x1, y1, x2, y2, x3, y3;
    cout << "***********************************" << endl;
    cout << "Введите координаты первой точки(X): ";
    cin >> x1;
    cout << "\n";
    cout << "Введите координаты первой точки(Y): ";
    cin >> y1;
    cout << "\n";
    cout << "Введите координаты второй точки(X): ";
    cin >> x2;
    cout << "\n";
    cout << "Введите координаты второй точки(Y): ";
    cin >> y2;
    cout << "\n";
    cout << "Введите координаты третьей точки(X): ";
    cin >> x3;
    cout << "\n";
    cout << "Введите координаты третьей точки(Y): ";
    cin >> y3;
    cout << "\n";
    Point firstpoint(x1, y1);
    Point secondpoint(x2, y2);
    Point thirdpoint(x3, y3);
    cout << "Площа трикутника:" <<
        area(distance(firstpoint,secondpoint),
             distance(firstpoint,thirdpoint),
             distance(secondpoint,thirdpoint)) << endl;
}
Answer 2

Код на C++ выводит не верный результат

да разве?

комментарий пока не могу оставить... что бы понять где ошибка, если бы код возможно было бы скомпилировать нужно воспользоваться отладчиком. а если посмотреть на код, то Вы пытаетесь передать в функцию area неинициализированные переменные, а в следующей строке такую же неинициализированную переменную res, поэтому то код и не компилируется... если это "исправить", то тогда и будет выводить неверный результат:

функция area объявленна как void, исходя из того, что она "считает", то она должна вернуть какое-то значение и судя по "коду" это должно быть значение res=sqrt(p*(p-fp)*(p-sp)*(p-tp));, которое вы пытаетесь вывести cout<<"Площа трикутника:"<<res<<endl; а если копнуть ещё глубже, то и в функции distance, значения fp, sp, tp никуда не сохраняются, а это значит, что использовние этих переменных в качестве параметров для функции area не имеет смысла.

READ ALSO
Теорема о пробном частном C++

Теорема о пробном частном C++

Помогите разобраться в теореме Дональда Кнута: теорема о пробном частном

82
Получение COUNT(*) из двух таблиц одним запросом

Получение COUNT(*) из двух таблиц одним запросом

такой вопрос уже есть, но ответа на него нет

95
Как перевести с десятичной системы счисления в римскую?

Как перевести с десятичной системы счисления в римскую?

Подскажите пожалуйста, с чего начать что б перевести с десятичной системы счисления в римскую и обратно?

92