Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
Милаше
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 76
#1

Расстояние между двумя точками через классы

07.06.2015, 19:00. Просмотров 1293. Ответов 20
Метки нет (Все метки)

Здравствуйте.
Требуется написать программу, которая вычисляет расстояние между двумя введёнными точками на плоскости, используя классы.
Вот то, что я попробовал написать:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
#include <iostream>
#include <math.h>
 
using namespace std;
 
class Point
{
 
 
    double x, y;
    int getx()
    { return x; }
    int gety()
    { return y; }
    Point(int first, int second)
    {
    x=first;
    y=second;
    }
    void lengh (int x1, int y1, int x2, int y2)
    {return sqrt ((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));}
}
    int main()
{
    Point one (3,7);
    Point two (5,1);
    cout<<Point.lengh(one.getx(), one.gety(), two.getx(), two.gety());
}
Но этот код не работает.
Подскажите, пожалуйста, где и в чём ошибки, и по возможности, как их исправить.

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2015, 19:00
Ответы с готовыми решениями:

Расстояние между двумя множествами точек - это расстояние между наиболее близко расположенными точками этих
1. Расстояние между двумя множествами точек - это расстояние между наиболее...

Расстояние между двумя точками
Найти расстояние между двумя точками (x1, y1) и (x2, y2) Формат входных...

Расстояние между двумя точками
1. Напишите функцию distance, которая вычисляет расстояние между двумя точками...

Вычислить расстояние между двумя точками на плоскости
1. Известны координаты на плоскости двух точек. Составить программу вычисления...

Вычислить расстояние между двумя точками с координатами х1, у1 и х2, у2.
Напишите программу пожалуйста)) Спасибо заранее

20
Новичок
Модератор
1488 / 955 / 459
Регистрация: 17.07.2012
Сообщений: 4,902
Завершенные тесты: 3
07.06.2015, 19:02 #2
Цитата Сообщение от Милаше Посмотреть сообщение
void lengh
Функция должна возвращать значение. Замените void на double.
1
Милаше
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 76
07.06.2015, 19:04  [ТС] #3
Заменил. А компилятор всё равно ругается
0
Новичок
Модератор
1488 / 955 / 459
Регистрация: 17.07.2012
Сообщений: 4,902
Завершенные тесты: 3
07.06.2015, 19:05 #4
Милаше, на какую строку?И что пишет?

Добавлено через 31 секунду
Цитата Сообщение от Милаше Посмотреть сообщение
int getx()
Цитата Сообщение от Милаше Посмотреть сообщение
int gety()
Здесь тоже double должно быть.

Добавлено через 19 секунд
Цитата Сообщение от Милаше Посмотреть сообщение
int first, int second
И здесь.
1
Милаше
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 76
07.06.2015, 19:06  [ТС] #5
||=== Build: Debug in kr15 (compiler: GNU GCC Compiler) ===|
kr15\main.cpp|22|error: expected ';' after class definition|
kr15\main.cpp||In function 'int main()':|
kr15\main.cpp|15|error: 'Point::Point(int, int)' is private|
kr15\main.cpp|25|error: within this context|
kr15\main.cpp|15|error: 'Point::Point(int, int)' is private|
kr15\main.cpp|26|error: within this context|
kr15\main.cpp|27|error: expected primary-expression before '.' token|
kr15\main.cpp|11|error: 'int Point::getx()' is private|
kr15\main.cpp|27|error: within this context|
kr15\main.cpp|13|error: 'int Point::gety()' is private|
kr15\main.cpp|27|error: within this context|
kr15\main.cpp|11|error: 'int Point::getx()' is private|
kr15\main.cpp|27|error: within this context|
kr15\main.cpp|13|error: 'int Point::gety()' is private|
kr15\main.cpp|27|error: within this context|
||=== Build failed: 14 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
0
Новичок
Модератор
1488 / 955 / 459
Регистрация: 17.07.2012
Сообщений: 4,902
Завершенные тесты: 3
07.06.2015, 19:09 #6
Цитата Сообщение от Милаше Посмотреть сообщение
void lengh (int x1, int y1, int x2, int y2)
Какой смысл вообще делать такую функцию? Либо сделать вне класса double length(Point a,Point b) либо внутри класса но length(Point b). И плюс
Цитата Сообщение от Милаше Посмотреть сообщение
double x, y;
int getx()
{ return x; }
int gety()
{ return y; }
Point(int first, int second)
{
x=first;
y=second;
}
void lengh (int x1, int y1, int x2, int y2)
{return sqrt ((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));}
У вас это все в секции private ибо если не указывать то по умолчанию private, а конструктор и другие функции должны быть в public.
0
Милаше
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 76
07.06.2015, 19:11  [ТС] #7
Вот что получилось:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#include <iostream>
#include <math.h>
 
using namespace std;
 
class Point
{
public:
 
    double x, y;
    double getx()
    { return x; }
    double gety()
    { return y; }
    Point(int first, int second)
    {
    x=first;
    y=second;
    }
}
    int main()
{
    Point one (3,7);
    Point two (5,1);
    cout<<Point.lengh(one.getx(), one.gety(), two.getx(), two.gety());
}
 
double lengh (int x1, int y1, int x2, int y2)
    {return sqrt ((x2-x1)*(x2-x1) + (y2-y1)*(y2-y1));}
Добавлено через 31 секунду
И вот какие ошибки остались:
||=== Build: Debug in kr15 (compiler: GNU GCC Compiler) ===|
kr15\main.cpp|20|error: expected ';' after class definition|
kr15\main.cpp||In function 'int main()':|
kr15\main.cpp|25|error: expected primary-expression before '.' token|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|
0
Новичок
Модератор
1488 / 955 / 459
Регистрация: 17.07.2012
Сообщений: 4,902
Завершенные тесты: 3
07.06.2015, 19:16 #8
Цитата Сообщение от Милаше Посмотреть сообщение
double lengh (int x1, int y1, int x2, int y2)
Ну где логика?Если есть класс Точка, то зачем делать такую функцию? И опять int вместо double...

Добавлено через 29 секунд
Вот так это выглядит более-менее по-людски,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
#include <iostream>
#include <math.h>
 
using namespace std;
 
class Point
{
    double x,y;//Так как секция не указана то это private 
public:
    double getx()
    { return x; }
    double gety()
    { return y; }
    Point(double first,double second)
    {
        x=first;
        y=second;
    }
    friend double length(Point a,Point b);//Это дружественная функция, это значит что она имеет доступ к private полям
};
 
double length (Point a,Point b)
{
    return sqrt ((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
}
 
int main()
{
    Point one (3,7);
    Point two (5,1);
    cout<<length(one,two)<<endl;
}
1
Милаше
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 76
07.06.2015, 19:19  [ТС] #9
А поясните, пожалуйста, подобную запись?
C++
1
((a.x-b.x)*(a.x-b.x)+(a.y-b.y)*(a.y-b.y));
Добавлено через 44 секунды
Ой, а мне по заданию нельзя использовать друзей класса...
0
Новичок
Модератор
1488 / 955 / 459
Регистрация: 17.07.2012
Сообщений: 4,902
Завершенные тесты: 3
07.06.2015, 19:21 #10
Цитата Сообщение от Милаше Посмотреть сообщение
Ой, а мне по заданию нельзя использовать друзей класса...
Можно переделать...

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <math.h>
 
using namespace std;
 
class Point
{
    double x,y;
public:
    double getx()
    { return x; }
    double gety()
    { return y; }
    Point(double first,double second)
    {
        x=first;
        y=second;
    }
    double length(Point b)
    {
        return sqrt ((x-b.x)*(x-b.x)+(y-b.y)*(y-b.y));
    }
};
 
int main()
{
    Point one (3,7);
    Point two (5,1);
    cout<<one.length(two)<<endl;
}
1
Милаше
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 76
07.06.2015, 19:23  [ТС] #11
А можно ещё такой вопрос
А скажем, если мне понадобится организовать ввод координат с клавиатуры, как и куда нужно будет добавлять код?
0
Новичок
Модератор
1488 / 955 / 459
Регистрация: 17.07.2012
Сообщений: 4,902
Завершенные тесты: 3
07.06.2015, 19:24 #12
Милаше, добавить методы void setx, void sety, я бы еще перегрузил оператор >>.
0
Милаше
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 76
07.06.2015, 19:39  [ТС] #13
Спасибо. Сейчас попробую
Если что-то не получится, то выложу результаты своих изысканий

Добавлено через 10 минут
Вот что получилось:
Но там выдаются ошибки в 34, 36, 38, 40 строчках
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <math.h>
 
using namespace std;
 
class Point
{
    double x,y;
 
public:
    void setx(int st);
    void setx1(int st1);
    void sety(int sk);
    void sety1(int sk1);
    double getx()
    { return x; }
    double gety()
    { return y; }
    Point(double first,double second)
    {
        x=first;
        y=second;
    }
    double length(Point b)
    {
        return sqrt ((x-b.x)*(x-b.x)+(y-b.y)*(y-b.y));
    }
};
 
int main()
{
    int st, st1, sk, sk1;
    cin>>st;
    Point.setx(st);
    cin>>st1;
    Point.setx1(st1);
    cin>>sk;
    Point.sety(sk);
    cin>>sk1;
    Point.sety1(sk1);
    Point one (st,sk);
    Point two (st1,sk1);
    cout<<one.length(two)<<endl;
}
0
Новичок
Модератор
1488 / 955 / 459
Регистрация: 17.07.2012
Сообщений: 4,902
Завершенные тесты: 3
07.06.2015, 19:54 #14
Лучший ответ Сообщение было отмечено Милаше как решение

Решение

Цитата Сообщение от Милаше Посмотреть сообщение
void setx(int st);
void setx1(int st1);
void sety(int sk);
void sety1(int sk1);
Что это такое?!Мне проще самому написать...

Добавлено через 1 минуту
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#include <iostream>
#include <math.h>
 
using namespace std;
 
class Point
{
    double x,y;
public:
    double getx()
    { return x; }
    double gety()
    { return y; }
    void setx(double value)
    { x=value; }
    void sety(double value)
    { y=value; }
    Point(double first,double second)
    {
        x=first;
        y=second;
    }
    double length(Point b)
    {
        return sqrt ((x-b.x)*(x-b.x)+(y-b.y)*(y-b.y));
    }
};
1
Милаше
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 76
07.06.2015, 20:48  [ТС] #15
А в main-е всё правильно?
А что означает запись x=value, y=value?

Добавлено через 52 минуты
Ура, программа заработала.
Спасибо Вам ещё раз.
Только вот поясните мне, пожалуйста, что в этом кусочке за переменная value?
C++
1
2
void setx(double value)
    { x=value; }
0
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
07.06.2015, 20:51 #16
Цитата Сообщение от Милаше Посмотреть сообщение
что в этом кусочке за переменная value?
Это название аргумента функции.
0
Милаше
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 76
07.06.2015, 20:51  [ТС] #17
Получается, что во второй функции он просто перегружается?
0
Tulosba
:)
Эксперт С++
4747 / 3241 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
07.06.2015, 21:09 #18
Цитата Сообщение от Милаше Посмотреть сообщение
Получается, что во второй функции он просто перегружается?
Имена формальных параметром в разных функциях могут быть одинаковыми (или разными), это для компилятора ничего не значит:
C++
1
2
void f( int value ) { /* делаем что-то c value*/ }
void g( int value ) { /* делаем что-то другое с value */ }
В указанных примерах выше никакой связи м/у value из f() и из g() нет.
Это всего лишь название переданного в функцию параметра. Т.е. по этому имени он доступен внутри функции.
Снаружи это могут быть совершенно разные объекты. Например при вызове:
C++
1
2
3
4
int x = 42;
int y = 100500;
f(x); // вызываем f() передав в качестве value значение x
g(y); // вызываем g() передав в качестве value значение y
1
Милаше
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 76
07.06.2015, 21:37  [ТС] #19
Ааа, спасибо.
А можно Вас попросить на пальцах объяснить, что делает этот фрагмент программы?
C++
1
2
3
4
5
Point(double first, double second)
    {
        x=first;
        y=second;
    }
0
Новичок
Модератор
1488 / 955 / 459
Регистрация: 17.07.2012
Сообщений: 4,902
Завершенные тесты: 3
07.06.2015, 22:20 #20
Милаше, вы хоть какую-то книжку читали? Это конструктор класса, который принимает 2 аргумента. Это значит, что мы можем писать типа
C++
1
Point a(5,6)//Т.е сразу задали координаты точки
1
07.06.2015, 22:20
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2015, 22:20

Определите расстояние между двумя введенными точками
Есть задание: &quot;Опишите переменную структуру для моделирования, предложенного...

Вычислить расстояние между двумя точками на плоскости
Вычислить расстояние между двумя точками на плоскости, заданных своими...

Найти расстояние между двумя точками на плоскости
Даны четыре действительных числа: x1, y1, x2, y2. Напишите функцию distance(x1,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru