Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
1 / 1 / 0
Регистрация: 15.10.2019
Сообщений: 67

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

15.10.2019, 09:30. Показов 2082. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Составить программу с использованием интерфейсов.
Задание:

Вычислить сторону прямоугольного треугольника, если известны 2 других стороны.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
15.10.2019, 09:30
Ответы с готовыми решениями:

Вычислить высоту треугольника, опущенную на сторону а, по известным значениям длин его сторон a, b, c
Вычислить высоту треугольника, опущенную на сторону а, по известным значениям длин его сторон a, b, c.

Вычислить высоту треугольника, опущенную на сторону а, по известным значениям длин его сторон a, b, c
Вычислить высоту треугольника, опущенную на сторону а, по известным значениям длин его сторон a, b, c.

Вычислить высоту треугольника, опущенную на сторону а, по известным значениям длин его сторон a, b, c
Вычислить высоту треугольника, опущенную на сторону а, по известным значениям длин его сторон a, b, c.

9
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
15.10.2019, 10:24
Лучший ответ Сообщение было отмечено amr-now как решение

Решение

Всё пытаюсь освоить dotnet 3.0 c VS Code.
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
using System;
 
namespace Question2513365
{
    interface ITriangle
    {
        double A { set; get; }
        double B { set; get; }
        double C { set; get; }
    }
    class Triangle : ITriangle
    {
        public Triangle(double a, double b, double c)
        {
            A = a;
            B = b;
            C = c;
        }
 
        public static double SideFromСathets(double a, double b)
        => Math.Sqrt(a * a + b * b);
 
        public static double SideFromСathetAndHypotenuse(double cathet, double hypotenuse)
        => Math.Sqrt(hypotenuse * hypotenuse - cathet * cathet);
 
        public double A { get; set; }
        public double B { get; set; }
        public double C { get; set; }
 
        public override string ToString() => $"A:{A}; B:{B}; C:{C}";
    }
    class Program
    {
        static void Main(string[] args)
        {
            var tr1 = new Triangle(5, 5, Triangle.SideFromСathets(5, 5));
            Console.WriteLine(tr1);
 
            var tr2 = new Triangle(5, Triangle.SideFromСathetAndHypotenuse(5, 7.0710678118654755), 7.0710678118654755);
            Console.WriteLine(tr2);
            Console.ReadKey();
        }
    }
}
Сейчас попытаюсь начать создавать проекты по шаблону проекта. Замучило уже.
1
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
17.10.2019, 16:54
Какой смысл в интерфейсе ITriangle ? Его можно как то по разному реализовать?
0
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
17.10.2019, 17:51
nicolas2008, по-хорошему методы вычисления сторон прямоугольного треугольника
надо бы поместить в интерфейс прямоугольного треугольника, который наследуется от интерфейса треугольника.

Просто не стал заморачиваться.

Отдельно интерфейс равнобедренного треугольника и тому подобное.
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
17.10.2019, 20:13
amr-now, попробую обьяснить почему это плохой подход.
Цитата Сообщение от amr-now Посмотреть сообщение
интерфейса треугольника
Треугольник - это модель данных, а модель данных в принципе не может иметь разных реализаций, поэтому использование интерфейста избыточно и даже вредно.
Как сделать выбор между классом и интерфейсом:
Если компонент имеет тип связи "is a" (является чем то) - то лучше использовать класс.
Если компонент имеет тип связи "has a" (has an ability to do something) (способен что то делать) - то лучше использовать интерфейс.
Если нет ясности - тогда интерфейс и базовый класс имеющий реализацию по умолчанию.

Цитата Сообщение от amr-now Посмотреть сообщение
методы вычисления сторон прямоугольного треугольника
надо бы поместить в интерфейс прямоугольного треугольника, который наследуется от интерфейса треугольника.
Опять же плохой дизайн.
Если модель уже содержит свойства описывающие длины сторон треугольника, то зачем методы рассчитывающие одну из сторон?
Если методы не используют свойства, а принимают параметры, то эти методы не имеют отношения к модели и только нарушают Single responsibility principle смешивая модель и логику независимую от этой модели.
Если прямоугольный треугольник наследуется от обычного, то как определить какая из сторон A,B,C является гипотенузой, а какие - катетами?
Тут более уместно создать два класса Triangle со свойствами A,B,C и RightTriangle со свойствами Leg1, Leg2 (кстати слова cathet в английском нет), Hypotenuse. Опционально - интерфейс ITriangleDescriptor со свойствами A,B,C, если нужно работать с обоими моделями как с обычным треугольником.

Реализация задачи автора:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
public interface IRightTriangleSideCalculator
{
     double CalculateHypotenuse(double leg1, double leg2);
     double CalculateLeg(double hypotenuse, double otherLeg);
}
 
public class RightTriangleSideCalculator: IRightTriangleCalculator 
{
     public double CalculateHypotenuse(double leg1, double leg2)
     {
           return Math.Sqrt(leg1*leg1, leg2*leg2);
     }
 
     public double CalculateLeg(double hypotenuse, double otherLeg) 
     {
           return Math.Sqrt(hypotenuse * hypotenuse - otherLeg* otherLeg);
     }
}
1
60 / 45 / 17
Регистрация: 12.08.2019
Сообщений: 161
18.10.2019, 00:20
Цитата Сообщение от nicolas2008 Посмотреть сообщение
"has a" (has an ability to do something)
както всегда учили, что к примеру в холодильнике лежит сырок, это has a
холодильник has a сырок.
При чем тут an ability to do something ?
Без способности что-то делать разве нет has a ?
можно немного объяснить?
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
18.10.2019, 01:48
Цитата Сообщение от QuestionAnd Посмотреть сообщение
При чем тут an ability to do something ?
Без способности что-то делать разве нет has a ?
можно немного объяснить?
Да, действительно, "has a" в контексте применения интерфейсов наверное не очень корректно. Больше подходит "is able to do something".

Насчет сырка в хородильнике, тут не соглашусь.
Есть такие типы отношений как композиция (has a <-> part of), агрегация (contains <-> contained in), ассоциация (depends on или как то так).
Так вот сырок в холодильнике это пример агрегации. Его можно достать и сьесть или выкинуть в мусорку если он испортился. Сырок это независимый обьект который может существовать без холодильника, так же как и холодильник, который обычно продается без сырка внутри.
А вот если мы выковыряем из холодильника мотор, то это чуть другое. Мотор является частью, и холодильник не сможет без него работать. Т.е. мотор - это часть холодильника, а у холодильника есть мотор, а значит тип отношений - композиция.
1
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
18.10.2019, 01:51
nicolas2008, в данной теме всего лишь очередной пример глупо составленной задачи.
Иногда банан - это всего лишь банан. (С)

По факту здесь две функции. Именно функции. Даже не методы.
0
60 / 45 / 17
Регистрация: 12.08.2019
Сообщений: 161
18.10.2019, 01:52
ну агрегацию тоже выдают за has a . тут источники разнятся ..
а сырок достанешь холодный, ассоциируется с холодильником ))

спасибо за объяснение все понятно.
0
1152 / 860 / 263
Регистрация: 30.04.2009
Сообщений: 3,603
18.10.2019, 01:56
Цитата Сообщение от amr-now Посмотреть сообщение
в данной теме всего лишь очередной пример глупо составленной задачи
Согласен, но делать вид что задача не глупая, решая её предложенным глупим способом это тоже глупо.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
18.10.2019, 01:56
Помогаю со студенческими работами здесь

Вычислить длину гипотенузы прямоугольного треугольника по двум его катетам
Написать функцию, вычисляющую длину гипотенузы прямоугольного треугольника по двум его катетам. Продемонстрировать её работу.Спасибо

Нахождение угла прямоугольного треугольника по известным 3 сторонам
помогите написать php код программы для вычисления угла прямоугольного треугольника по известным 3-м сторонам - результат должен быть...

Найти сторону прямоугольного треугольника зная углы
Имеется прямоугольный треугольник Необходимо найти катеты b и а Использую формулу Dim b As Int32 = 71 * Math.Cos(45) ...

Найти периметр прямоугольного треугольника по двум катетам
Добрый день!Воюю с задачками.учебники по алгебре и геометрии рядом..не получается толково перенести все задумки в Сишарп. 7. периметр...

Вычисление площади прямоугольного треугольника по двум катетам
Помогите решить задачи в JavaScript, Составить программу вычисления площади прямоугольного треугольника по двум катетам. В массив A...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru