0 / 0 / 0
Регистрация: 20.06.2017
Сообщений: 14

Разработка класса Triangle

21.12.2017, 19:49. Показов 5320. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Задание 2. Создать класс Triangle, содержащий следующие члены класса:

1. Поля:

· int a, b, c;

2. Конструктор, позволяющий создать экземпляр класса с заданными длинами сторон.

3. Методы, позволяющие:

· вывести длины сторон треугольника на экран;

· рассчитать периметр треугольника;

· рассчитать площадь треугольника.

4. Свойство:

· позволяющее получить-установить длины сторон треугольника (доступное для чтения и записи);

· позволяющее установить, существует ли треугольник с данными длинами сторон (доступное только для чтения).

5. Индексатор, позволяющий по индексу 0 обращаться к полю a, по индексу 1 – к полю b, по индексу 2 – к полю c, при других значениях индекса выдается сообщение об ошибке.

6. Перегрузку:

· операции ++ (--): одновременно увеличивает (уменьшает) значение полей a, b и c на 1;

· констант true и false: обращение к экземпляру класса дает значение true, если треугольник с заданными длинами сторон существует, иначе false;

· операции *: одновременно домножает поля a, b и c на скаляр. Продемонстрировать работу класса.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.12.2017, 19:49
Ответы с готовыми решениями:

Операторы для класса Triangle
В класс Triangle добавить: a. Индексатор, позволяющий по индексу 0 обращаться к полю a, по индексу 1 – к полю b, по индексу 2 – к полю...

Создать класс Triangle, разработав элементы класса
Создать класс Triangle, разработав следующие элементы класса: a. Поля: • double a, b, c; // стороны треугольника ...

Cоздать класс Triangle, разработав заданные элементы класса
Кто может помочь написать по риале не понимаю этого да просто и не учу ибо меня другое интересует а увы это есть в программе обучения....

8
Эксперт .NET
 Аватар для Usaga
14321 / 9411 / 1356
Регистрация: 21.01.2016
Сообщений: 35,474
21.12.2017, 19:59
И дальше что?
0
 Аватар для willow300
152 / 149 / 103
Регистрация: 30.10.2016
Сообщений: 314
21.12.2017, 20:46
Program.cs
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
using System;
 
namespace ClassesAndObjectsTask2
{
    class Program
    {
        static void Main()
        {
            Triangle firstTriangle = new Triangle(7, 3, 6);
            Console.ForegroundColor = ConsoleColor.DarkYellow;
            Console.WriteLine("Параметры треугольника");
            Console.ResetColor();
            Console.WriteLine(firstTriangle);
            Console.WriteLine(firstTriangle.CalcPerimeter());
            Console.WriteLine(firstTriangle.CalcArea());
 
            Console.ForegroundColor = ConsoleColor.DarkYellow;
            Console.WriteLine("\nДемонстрация работы индексатора");
            Console.ResetColor();
            Console.WriteLine(firstTriangle[0]);
            Console.WriteLine(firstTriangle[1]);
            Console.WriteLine(firstTriangle[2]);
            Console.WriteLine(firstTriangle[4]);
 
            Console.ForegroundColor = ConsoleColor.DarkYellow;
            Console.WriteLine("\nДемонстрация перегрузки операций и констант");
            Console.ResetColor();
            Console.WriteLine(firstTriangle++);
            Console.WriteLine(firstTriangle--);
 
            if (firstTriangle)
            {
                Console.ForegroundColor = ConsoleColor.DarkGreen;
                Console.WriteLine("Треугольник с заданными длинами сторон существует");
                Console.ResetColor();
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.DarkRed;
                Console.WriteLine("Треугольник с заданными длинами сторон не существует");
                Console.ResetColor();
            }
 
            Console.WriteLine(firstTriangle * 9);
 
            Console.ReadKey();
        }
    }
}
Triangle.cs
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
using System;
 
namespace ClassesAndObjectsTask2
{
    class Triangle
    {
        // Поля
        int a, b, c;
        int perimeter;
 
        // Конструктор, позволяющий создать экземпляр класса с заданными длинами сторон.
        public Triangle()
        {
            a = 0;
            b = 0;
            c = 0;
        }
 
        public Triangle(int a, int b, int c)
        {
            this.a = a;
            this.b = b;
            this.c = c;
        }
 
        // Метод для вывода длины сторон треугольника на экран
        public override string ToString() => $"Длина сторон треугольника: A = {a} см, B = {b} см и C = {c} см";
 
        // Метод для расчёта периметра треугольника
        public string CalcPerimeter()
        {
            perimeter = a + b + c;
            return $"Периметр треугольника: P = {perimeter} см";
        }
 
        // Метод для расчёта площадь треугольника
        public string CalcArea()
        {
            int semiperimeter = perimeter / 2;
            double area = Math.Sqrt(semiperimeter * (semiperimeter - a) * (semiperimeter - b) * (semiperimeter - c));
            return $"Площадь треугольника S = {area:f2} см";
        }
 
        // Свойство, позволяющее получить-установить длины сторон треугольника (доступное для чтения и записи)
        public int A
        {
            get => a;
            set => a = value;
        }
 
        public int B
        {
            get => b;
            set => b = value;
        }
 
        public int C
        {
            get => c;
            set => c = value;
        }
 
        // Свойство, позволяющее установить, существует ли треугольник с данными длинами сторон (доступное только для чтения)
        public bool IsTriangle
        {
            get
            {
                if (a + b > c && a + c > b && b + c > a)
                {
                    return true;
                }
                return false;
            }
        }
 
        // Индексатор, позволяющий по индексу 0 обращаться к полю a, по индексу 1 – к полю b, по индексу 2 – к полю c, 
        // при других значениях индекса выдается сообщение об ошибке.
        public string this[double i]
        {
            get
            {
                switch (i)
                {
                    case 0:
                        return $"Индекс {i} соответствует стороне A, равной {a} см";
                    case 1:
                        return $"Индекс {i} соответствует стороне B, равной {b} см";
                    case 2:
                        return $"Индекс {i} соответствует стороне C, равной {c} см";
                    default:
                        return $"Индекс {i} является недействительным";
                }
            }
        }
 
        // Перегрузка операции ++: одновременно увеличивает значение полей a, b и c на 1;
        public static Triangle operator ++(Triangle side) => new Triangle(++side.a, ++side.b, ++side.c);
 
        // Перегрузка операции --: одновременно уменьшает значение полей a, b и c на 1;
        public static Triangle operator --(Triangle side) => new Triangle(--side.a, --side.b, --side.c);
 
        // Перегрузка констант true и false
        // обращение к экземпляру класса дает значение true, если треугольник с заданными длинами сторон существует, иначе false;
        public static bool operator true(Triangle side) => side.IsTriangle;
 
        public static bool operator false(Triangle side) => side.IsTriangle;
 
        // Перегрузка операции *: одновременно домножает поля a, b и c на скаляр.
        public static Triangle operator *(Triangle side, int scalar) => new Triangle(side.a *= scalar, side.b *= scalar, side.c *= scalar);
    }
}
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
21.12.2017, 21:01
willow300, наверное стоит подправить методы, тут площадь невозможно вычислить не вызвав заранее расчет периметра
да и возвращать из метода лучше то, что больше подходит по логике, для периметра/площади - число: может мне надо будет использовать этот класс, вычислить и просуммировать площади нескольких треугольников, что я буду со строками делать? парсить?
1
 Аватар для willow300
152 / 149 / 103
Регистрация: 30.10.2016
Сообщений: 314
21.12.2017, 21:32
Diamante, замечания/советы приняты, согласен с Вами, подправлю

Добавлено через 20 минут
Program.cs
Кликните здесь для просмотра всего текста

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
using System;
 
namespace ClassesAndObjectsTask2
{
    class Program
    {
        static void Main()
        {
            Triangle firstTriangle = new Triangle(7, 3, 6);
            Console.ForegroundColor = ConsoleColor.DarkYellow;
            Console.WriteLine("Параметры треугольника");
            Console.ResetColor();
            Console.WriteLine(firstTriangle);
            Console.WriteLine($"Периметр треугольника: P = {firstTriangle.CalcPerimeter()} см");
            Console.WriteLine($"Площадь треугольника S = {firstTriangle.CalcArea():f2} см");
 
            Console.ForegroundColor = ConsoleColor.DarkYellow;
            Console.WriteLine("\nДемонстрация работы индексатора");
            Console.ResetColor();
            Console.WriteLine(firstTriangle[0]);
            Console.WriteLine(firstTriangle[1]);
            Console.WriteLine(firstTriangle[2]);
            Console.WriteLine(firstTriangle[4]);
 
            Console.ForegroundColor = ConsoleColor.DarkYellow;
            Console.WriteLine("\nДемонстрация перегрузки операций и констант");
            Console.ResetColor();
            Console.WriteLine(firstTriangle++);
            Console.WriteLine(firstTriangle--);
 
            if (firstTriangle)
            {
                Console.ForegroundColor = ConsoleColor.DarkGreen;
                Console.WriteLine("Треугольник с заданными длинами сторон существует");
                Console.ResetColor();
            }
            else
            {
                Console.ForegroundColor = ConsoleColor.DarkRed;
                Console.WriteLine("Треугольник с заданными длинами сторон не существует");
                Console.ResetColor();
            }
 
            Console.WriteLine(firstTriangle * 9);
 
            Console.ReadKey();
        }
    }
}


Triangle.cs
Кликните здесь для просмотра всего текста
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
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
using System;
 
namespace ClassesAndObjectsTask2
{
    class Triangle
    {
        // Поля
        int a, b, c;
 
        // Конструктор, позволяющий создать экземпляр класса с заданными длинами сторон.
        public Triangle()
        {
            a = 0;
            b = 0;
            c = 0;
        }
 
        public Triangle(int a, int b, int c)
        {
            this.a = a;
            this.b = b;
            this.c = c;
        }
 
        // Метод для вывода длины сторон треугольника на экран
        public override string ToString() => $"Длина сторон треугольника: A = {a} см, B = {b} см и C = {c} см";
 
        // Метод для расчёта периметра треугольника
        public int CalcPerimeter()
        {
            int perimeter = a + b + c;
            return perimeter;
        }
 
        // Метод для расчёта площадь треугольника
        public double CalcArea()
        {
            int semiperimeter = (a + b + c) / 2;
            double area = Math.Sqrt(semiperimeter * (semiperimeter - a) * (semiperimeter - b) * (semiperimeter - c));
            return area;
        }
 
        // Свойство, позволяющее получить-установить длины сторон треугольника (доступное для чтения и записи)
        public int A { get; set; }
 
        public int B { get; set; }
 
        public int C { get; set; }
 
        // Свойство, позволяющее установить, существует ли треугольник с данными длинами сторон (доступное только для чтения)
        public bool IsTriangle
        {
            get
            {
                if (a + b > c && a + c > b && b + c > a)
                {
                    return true;
                }
                return false;
            }
        }
 
        // Индексатор, позволяющий по индексу 0 обращаться к полю a, по индексу 1 – к полю b, по индексу 2 – к полю c, 
        // при других значениях индекса выдается сообщение об ошибке.
        public string this[double i]
        {
            get
            {
                switch (i)
                {
                    case 0:
                        return $"Индекс {i} соответствует стороне A, равной {a} см";
                    case 1:
                        return $"Индекс {i} соответствует стороне B, равной {b} см";
                    case 2:
                        return $"Индекс {i} соответствует стороне C, равной {c} см";
                    default:
                        return $"Индекс {i} является недействительным";
                }
            }
        }
 
        // Перегрузка операции ++: одновременно увеличивает значение полей a, b и c на 1;
        public static Triangle operator ++(Triangle side) => new Triangle(++side.a, ++side.b, ++side.c);
 
        // Перегрузка операции --: одновременно уменьшает значение полей a, b и c на 1;
        public static Triangle operator --(Triangle side) => new Triangle(--side.a, --side.b, --side.c);
 
        // Перегрузка констант true и false
        // обращение к экземпляру класса дает значение true, если треугольник с заданными длинами сторон существует, иначе false;
        public static bool operator true(Triangle side) => side.IsTriangle;
 
        public static bool operator false(Triangle side) => side.IsTriangle;
 
        // Перегрузка операции *: одновременно домножает поля a, b и c на скаляр.
        public static Triangle operator *(Triangle side, int scalar) => new Triangle(side.a *= scalar, side.b *= scalar, side.c *= scalar);
    }
}
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
21.12.2017, 21:36
willow300, ну почти... есть автосвойства, но работаешь с полямитут уж либо одно либо другое, но лучше свойства, полные, запилить туда проверку на валидность значений(например, на не отрицательность)
0
 Аватар для willow300
152 / 149 / 103
Регистрация: 30.10.2016
Сообщений: 314
21.12.2017, 22:31
Diamante, здесь немного поплыл...
На свойства поставил проверку:
Кликните здесь для просмотра всего текста

Допустим, если число отрицательное, то присваиваем ему ноль.
C#
1
2
3
4
5
6
7
8
9
10
11
        public int A
        {
            get { return a; }
            set
            {
                if (value < 0)
                    a = 0;
                else
                    a = value;
            }
        }


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

Строкой:
C#
1
Triangle firstTriangle = new Triangle(-5, 3, 6);
я передаю значения в конструктор, но как сделать, чтобы значения прошли проверку свойства?
Как начать работать со свойствами, напримере одного метода (нужно заменить (в данном случае), например а на А)?

Спасибо!
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
21.12.2017, 22:33
C#
1
2
3
4
5
6
public Triangle(int a, int b, int c)
        {
            A = a;
            B = b;  //указать СВОЙСТВО(у тебя они с большой буквы), а не поле(которые с маленькой):) автоматом вызовется сеттер
            C = c;
        }
1
 Аватар для willow300
152 / 149 / 103
Регистрация: 30.10.2016
Сообщений: 314
21.12.2017, 22:48
Diamante, спасибо большое!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.12.2017, 22:48
Помогаю со студенческими работами здесь

Определить класс Triangle, разработав следующие элементы класса. Поля: - double a, b, c; - string name; //имя объекта
Определить класс Triangle, разработав следующие элементы класса. Поля: - double a, b, c; - string name; //имя объекта. ...

Индексатор и перегрузка операторов для класса Triangle
на Form/ помогите пожалуйста В класс Triangle добавить: a. Индексатор, позволяющий по индексу 0 обращаться к полю a, по индексу 1 –...

Создать класс Triangle, разработав следующие элементы класса:
с объяснением на форм Создать класс Triangle, разработав следующие элементы класса: a. Поля: • int a, b, c; b. Конструктор,...

Создать класс Triangle, содержащий следующие члены класса
Помогите подправить код..Плиз Задание Создать класс Triangle, содержащий следующие члены класса: 1. Поля: • int a, b, c; ...

Создать класс Triangle, разработав следующие элементы класса
Создать класс Triangle, разработав следующие элементы класса: a. Поля:  int a, b, c; b. Конструктор, позволяющий создать экземпляр...


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

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

Новые блоги и статьи
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: показать затраченные материалы за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В качестве. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
Запрет удаления строк ТЧ документа при определённом условии
Maks 19.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "Аккумуляторы", разработанного в конфигурации КА2. У данного документа есть ТЧ, в которой в зависимости от прав доступа. . .
Модель заражения группы наркоманов
alhaos 17.04.2026
Условия задачи сформулированы тут Суть: - Группа наркоманов из 10 человек. - Только один инфицирован ВИЧ. - Колются одной иглой. - Колются раз в день. - Колются последовательно через. . .
Мысли в слух. Про "навсегда".
kumehtar 16.04.2026
Подумалось тут, что наверное очень глупо использовать во всяких своих установках понятие "навсегда". Это очень сильное понятие, и я только начинаю понимать край его смысла, не смотря на то что давно. . .
My Business CRM
MaGz GoLd 16.04.2026
Всем привет, недавно возникла потребность создать CRM, для личных нужд. Собственно программа предоставляет из себя базу данных клиентов, в которой можно фиксировать звонки, стадии сделки, а также. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru