Вот код:
#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;
}
А у вас результата просто нет. Вот тут
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;
}
Код на C++ выводит не верный результат
да разве?
комментарий пока не могу оставить...
что бы понять где ошибка, если бы код возможно было бы скомпилировать нужно воспользоваться отладчиком.
а если посмотреть на код, то Вы пытаетесь передать в функцию area
неинициализированные переменные, а в следующей строке такую же неинициализированную переменную res
, поэтому то код и не компилируется...
если это "исправить", то тогда и будет выводить неверный результат:
функция area
объявленна как void, исходя из того, что она "считает", то она должна вернуть какое-то значение и судя по "коду" это должно быть значение res=sqrt(p*(p-fp)*(p-sp)*(p-tp));
, которое вы пытаетесь вывести cout<<"Площа трикутника:"<<res<<endl;
а если копнуть ещё глубже, то и в функции distance
, значения fp, sp, tp
никуда не сохраняются, а это значит, что использовние этих переменных в качестве параметров для функции area
не имеет смысла.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Помогите разобраться в теореме Дональда Кнута: теорема о пробном частном
есть таблица игнорируемые
Подскажите пожалуйста, с чего начать что б перевести с десятичной системы счисления в римскую и обратно?