Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.92/25: Рейтинг темы: голосов - 25, средняя оценка - 4.92
0 / 0 / 0
Регистрация: 20.06.2017
Сообщений: 14

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

21.12.2017, 19:49. Показов 5290. Ответов 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
14303 / 9388 / 1354
Регистрация: 21.01.2016
Сообщений: 35,398
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
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru