Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
8bpp
0 / 0 / 3
Регистрация: 25.04.2013
Сообщений: 13
#1

Класс Triangle - C++

01.06.2013, 22:03. Просмотров 1088. Ответов 1
Метки нет (Все метки)

Помогите подправить код.
Вот задание: создать класс Triangle для представления треугольника. Поля данных должны включать углы и стороны. Требуется реализовать операции: получения и изменения полей данных, вычисления площади, а также определения вида треугольника (равносторонний, равнобедренный или прямоугольный)
Вот собственно код:
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
// triangle.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include <iostream>
#include "conio.h"
 
 
public: 
    class Triangle {
public:
    float a,b,c; // углы
public:
    float ab,bc,ca; // стороны
public:
    int setABC(float A, float B, float C) {
a = A;
b = B;
c = C;
}
public:
    int setCorners(float A, float B, float C) {
a = A;
b = B;
c = C;
}
public:
    int setSides(float AB, float BC, float CA) {
ab = AB;
bc = BC;
ca = CA;
}
public:
    float[] getCorners() {
float [] corners = new float[3];
corners[0] = a;
corners[1] = b;
corners[2] = c;
return corners;
}
public:
    float[] getSides() {
float [] sides = new float[3];
sides[0] = ab;
sides[1] = bc;
sides[2] = ca;
return sides;
}
public:
    float square() {
float s = (1./2.)*ab*bc*sin(b);
return s;
}
public:
    int String type() {
if (ab == bc && bc == ca) {
return "равносторонний";
}
if (ab == bc && bc != ca) {
return "равнобедренный";
}
if (a == 90 || b == 90 || c == 90) {
return "прямоугольный";
}
return "неизвестный";
}
 
}
Ошибки:
Кликните здесь для просмотра всего текста
1>------ Построение начато: проект: triangle, Конфигурация: Debug Win32 ------
1>Компиляция...
1>triangle.cpp
1>d:\projects_c++\triangle\triangle\triangle.cpp(9) : error C2059: синтаксическая ошибка: public
1>d:\projects_c++\triangle\triangle\triangle.cpp(34) : error C3409: пустой блок атрибута не допускается
1>d:\projects_c++\triangle\triangle\triangle.cpp(34) : error C2061: синтаксическая ошибка: идентификатор "getCorners"
1>d:\projects_c++\triangle\triangle\triangle.cpp(34) : error C2334: непредвиденные лексемы перед '{'; пропуск вероятного тела функции
1>d:\projects_c++\triangle\triangle\triangle.cpp(42) : error C3409: пустой блок атрибута не допускается
1>d:\projects_c++\triangle\triangle\triangle.cpp(42) : error C2061: синтаксическая ошибка: идентификатор "getSides"
1>d:\projects_c++\triangle\triangle\triangle.cpp(42) : error C2334: непредвиденные лексемы перед '{'; пропуск вероятного тела функции
1>d:\projects_c++\triangle\triangle\triangle.cpp(55) : error C2146: синтаксическая ошибка: отсутствие ";" перед идентификатором "type"
1>d:\projects_c++\triangle\triangle\triangle.cpp(55) : error C4430: отсутствует спецификатор типа - предполагается int. Примечание. C++ не поддерживает int по умолчанию
1>d:\projects_c++\triangle\triangle\triangle.cpp(66) : warning C4183: type: отсутствие возвращаемого типа; предполагается функция-член, возвращающая 'int'
1>d:\projects_c++\triangle\triangle\triangle.cpp(69) : fatal error C1004: непредвиденное обнаружение конца файла
1>Журнал построения был сохранен в "file://d:\projects_c++\triangle\triangle\Debug\BuildLog.htm"
1>triangle - ошибок 10, предупреждений 1
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ==========
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.06.2013, 22:03
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Класс Triangle (C++):

Реализовать класс Triangle (задание 25), опираясь на класс Angle из задания 26 для представления углов
Реализовать класс Triangle (задание 25), опираясь на класс Angle из задания 26...

Класс Triangle
Помогите пожалуйста реализовать перегрузку операции ++ и -- которая...

Класс Triangle
#include &lt;iostream&gt; #include &lt;math.h&gt; using namespace std; class...

Класс Triangle
Помогите с заданием очень прошу! Не могу разобраться. Много ошибок помогите....

Класс Triangle ошибка
Помогите пожалуйста исправить ошибку #include &lt;iostream&gt; #include &lt;cmath&gt; ...

Класс Triangle ошибка
Помогите исправить ошибку класса: #include &quot;stdafx.h&quot; #include &lt;iostream&gt;...

1
Гром
211 / 130 / 28
Регистрация: 20.03.2009
Сообщений: 1,108
Записей в блоге: 16
Завершенные тесты: 1
02.06.2013, 06:23 #2
Вы неверно используете public. Должно быть что-то вроде
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
class Triangle
 {
 public:
 Triangle(double AB, double BC, double CA);
 void setSides(double AB, double BC, double CA);
 double* getCorners() const;
 double* getSides() const;
 double square() const;
 std::string type() const;
 private:
 double ab, bc, ca;
 double a, b, c;
 }
Вместо setABC я добавил конструктор. Также выкинул функцию setCorners, т.к. по трем сторонам можно однозначно вычислить три угла, а по трем углам невозможно вычислить стороны. Кроме того, к функциям, которые не изменяют внутреннее состояние экземпляра класса, крайне желательно применять квалификатор const (но можете на это пока не обращать внимания).

По поводу ваших ошибок - ключевое слово public используется только внутри определения класса (либо для указания, какие функции и данные будут доступны извне класса, либо при наследовании от другого класса, но про это тоже можете пока не думать). Ставить его перед классом - ошибка, и перед каждой функцией - совершенно излишне, хотя и не вызовет ошибок. В объявлении функции type вы указали лишний int, когда надо было указать только тип строки в качестве типа возвращаемого значения. И по логике программы - при проверке на равнобедренность вы не рассматриваете случай, когда ca равна одной из других сторон; а для проверки является ли треугольник прямоугольным лучше проверять, справедлива ли для него теорема Пифагора (т.к. задавать треугольник корректно все-таки сторонами, а не углами, то углы вычисляются исходя из значений сторон, а ввиду неточности работы с float/double вместо 90 может получиться число типа 89,9999999999, и оно не пройдет проверку - хотя и стороны тогда лучше задавать целыми значениями, чтобы вычисления с ними были точными).

И еще рекомендации. Вместо типа float лучше использовать тип double, он считается рекомендуемым практически во всех случаях, когда вам нужно число с плавающей точкой. Переменные-члены класса лучше делать закрытыми (private). Ну и с точки зрения английского языка Corners лучше заменить на Angles.
2
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.06.2013, 06:23
Привет! Вот еще темы с решениями:

Класс треугольников Triangle
Ребят, надеюсь у Вас будет минутка свободного времени для меня. Дело в том, что...

Создать класс triangle
всем доброго времени суток помогите бедному студенту просто физически не...

Создать класс triangle с полями-сторонами
Создать класс triangle с полями-сторонами. Определить методы изменения сторон...

Создать класс triangle с полями-сторонами
Создать класс triangle с полями-сторонами. Определить методы изменения сторон...


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

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

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