Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Милаше
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 75
#1

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

07.06.2015, 19:00. Просмотров 1098. Ответов 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
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Расстояние между двумя точками через классы (C++):

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

Расстояние между двумя точками - C++
1. Напишите функцию distance, которая вычисляет расстояние между двумя точками (x1, y1) и (x2, y2). Все числа и возвращаемые значения...

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

Вычислить расстояние между двумя точками на плоскости - C++
Вычислить расстояние между двумя точками на плоскости, заданных своими координатами Оригинал: Обчислити відстань між двома точками на...

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

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

20
Новичок
Модератор
1393 / 855 / 201
Регистрация: 17.07.2012
Сообщений: 4,467
Записей в блоге: 1
Завершенные тесты: 3
07.06.2015, 19:02 #2
Цитата Сообщение от Милаше Посмотреть сообщение
void lengh
Функция должна возвращать значение. Замените void на double.
1
Милаше
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 75
07.06.2015, 19:04  [ТС] #3
Заменил. А компилятор всё равно ругается
0
Новичок
Модератор
1393 / 855 / 201
Регистрация: 17.07.2012
Сообщений: 4,467
Записей в блоге: 1
Завершенные тесты: 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
Сообщений: 75
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
Новичок
Модератор
1393 / 855 / 201
Регистрация: 17.07.2012
Сообщений: 4,467
Записей в блоге: 1
Завершенные тесты: 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
Сообщений: 75
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
Новичок
Модератор
1393 / 855 / 201
Регистрация: 17.07.2012
Сообщений: 4,467
Записей в блоге: 1
Завершенные тесты: 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
Сообщений: 75
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
Новичок
Модератор
1393 / 855 / 201
Регистрация: 17.07.2012
Сообщений: 4,467
Записей в блоге: 1
Завершенные тесты: 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
Сообщений: 75
07.06.2015, 19:23  [ТС] #11
А можно ещё такой вопрос
А скажем, если мне понадобится организовать ввод координат с клавиатуры, как и куда нужно будет добавлять код?
0
Новичок
Модератор
1393 / 855 / 201
Регистрация: 17.07.2012
Сообщений: 4,467
Записей в блоге: 1
Завершенные тесты: 3
07.06.2015, 19:24 #12
Милаше, добавить методы void setx, void sety, я бы еще перегрузил оператор >>.
0
Милаше
0 / 0 / 0
Регистрация: 13.04.2012
Сообщений: 75
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
Новичок
Модератор
1393 / 855 / 201
Регистрация: 17.07.2012
Сообщений: 4,467
Записей в блоге: 1
Завершенные тесты: 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
Сообщений: 75
07.06.2015, 20:48  [ТС] #15
А в main-е всё правильно?
А что означает запись x=value, y=value?

Добавлено через 52 минуты
Ура, программа заработала.
Спасибо Вам ещё раз.
Только вот поясните мне, пожалуйста, что в этом кусочке за переменная value?
C++
1
2
void setx(double value)
    { x=value; }
0
07.06.2015, 20:48
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.06.2015, 20:48
Привет! Вот еще темы с ответами:

Найти минимальное расстояние между двумя точками - C++
Даны два массива вещественных чисел, x и y. Их длина одинакова и равна n. Каждый (i-й) элемент массива x содержит абсциссу некоторой точки...

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

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

Функция вычисляющая расстояние между двумя точками - C++
Здравствуйте,помогите пожалуйста! Написать процедуру-функцию,которая вычисляет расстояние между двумя точками x,y ∈ R^3.Точки заданы...


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

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

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