Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
3 / 3 / 2
Регистрация: 05.11.2012
Сообщений: 110
1

Группа методов(функция)

13.03.2013, 16:16. Показов 5733. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Помогите исправить ошибки.
Изначально задача звучит так:
Даны 2 стороны треугольника и угол между ними.

Но во второй функции для периметра я беру C из первой функции.Скорее всего на это компилятор и ругается.
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
using System;
namespace ConsoleApplication4
{
    class Program
    {
        static double c(double a,double b,double g){/*третья сторона*/
            return Math.Sqrt(((a*a+b*b)-(2*(a*b)))*Math.Sqrt(g));
        }
        static double p(double a, double b, double c) {/*периметр*/ return a + b + c; }
        static double s(double a, double b, double g)
        {/*площадь*/
            return (a * b * Math.Sin(g)) / 2;
        }
        static string usl(double a, double b, double c)
        {/*условие прямоугольн треуг.*/
            if ((a * a == b * b + c * c) && (a * b == a * a + c * c) && (c * c == b * b + a * a))
            {
                Console.WriteLine("треугольник равносторонний");
            }
            else
                Console.WriteLine("треугольник не является равносторноним");
            return usl(a,b,c);
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Введите 2 стороны треугольника:");
            double a = Convert.ToDouble(Console.ReadLine()), b = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Введите угол между 1 и 2 стороной:");
            double g = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Третья сторона треугольника = {0:f3}\nP={1:f3}\nS={2:f3}\n{3:f3}", c(a, b, g), p(a, b, c), s(a, b, g), usl(a, b, c));
            Console.ReadKey();
        }
    }
}
Добавлено через 10 минут
Попробывал добавить в саму программу -
C#
1
double c = c(a, b, g);
но все равно ошибки.
Формулы менять не хочется,веть можно решить данную траблу.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.03.2013, 16:16
Ответы с готовыми решениями:

Группа методов(функция)
Помогите избавиться от ошибки. using System; namespace ConsoleApplication4 { class Program...

оператор ! и группа методов
Имеется метод, который в зависимости от условий возвращает или 0 или 1. При запуске в методе...

Группа методов Перекодировка строки
Добрый Вечер всем , Помогите решить проблему .. Есть группа методов ini.getinidata класс...

подскажите какая группа методов и классов отвечает в с# за работу bluetouch
Спасибо!!!

12
Администратор
Эксперт .NET
9610 / 4752 / 761
Регистрация: 17.04.2012
Сообщений: 9,606
Записей в блоге: 14
13.03.2013, 16:20 2
Цитата Сообщение от Cheshire94 Посмотреть сообщение
Скорее всего на это компилятор и ругается
В сообщениях об ошибках компилятор чётко пишет строку и символ места ошибки и её содержание, можно не гадать.
C#
1
2
p(a, b, c);
usl(a, b, c);
Вы используете в качестве аргумента метод, а не его возвращаемое значение, тогда пишите:
C#
1
p(a, b, c(a, b, g));
P.S. Чтобы при отладке кода (отлове ошибок) не было проблем и каши в голове, называйте методы, переменные и т.д. осмысленными именами. Вместо
C#
1
static double p(double a, double b, double c)
я бы написал
C#
1
static double Perimeter(double a, double b, double c)
2
3 / 3 / 2
Регистрация: 05.11.2012
Сообщений: 110
13.03.2013, 16:31  [ТС] 3
Цитата Сообщение от tezaurismosis Посмотреть сообщение
В сообщениях об ошибках компилятор чётко пишет строку и символ места ошибки и её содержание, можно не гадать.
C#
1
2
p(a, b, c);
usl(a, b, c);
Вы используете в качестве аргумента метод, а не его возвращаемое значение, тогда пишите:
C#
1
p(a, b, c(a, b, g));
P.S. Чтобы при отладке кода (отлове ошибок) не было проблем и каши в голове, называйте методы, переменные и т.д. осмысленными именами. Вместо
C#
1
static double p(double a, double b, double c)
я бы написал
C#
1
static double Perimeter(double a, double b, double c)
Спасибо биг,усвоил.
А в static string usl(double a, double b, double c) в чем у меня косяк мб.Софт без остановки проверяет данное условие
0
Администратор
Эксперт .NET
9610 / 4752 / 761
Регистрация: 17.04.2012
Сообщений: 9,606
Записей в блоге: 14
13.03.2013, 16:40 4
Цитата Сообщение от Cheshire94 Посмотреть сообщение
А в static string usl(double a, double b, double c) в чем у меня косяк мб.Софт без остановки проверяет данное условие
Можно сказать и так. Вы запустили бесконечную рекурсию; если хотите проверять условие в будущем, возвращайте bool. И зачем вам такое условие проверки на равносторонность? Достаточно сравнить стороны друг с другом:
C#
1
2
3
4
5
6
7
8
9
10
11
// Используем осмысленные имена. Right Triangle (англ.) - равносторонний треугольник
static bool IsRightTriangle(double a, double b, double c) {
    // Зачем такое сложное условие?
    // (a * a == b * b + c * c) && (a * b == a * a + c * c) && (c * c == b * b + a * a)
    if ((a == b) && (b == c)) {
        Console.WriteLine("треугольник равносторонний");
        return true;
    } else
        Console.WriteLine("треугольник не является равносторноним");
    return false;
}
1
3 / 3 / 2
Регистрация: 05.11.2012
Сообщений: 110
13.03.2013, 16:58  [ТС] 5
Цитата Сообщение от tezaurismosis Посмотреть сообщение
Можно сказать и так. Вы запустили бесконечную рекурсию; если хотите проверять условие в будущем, возвращайте bool. И зачем вам такое условие проверки на равносторонность? Достаточно сравнить стороны друг с другом:
C#
1
2
3
4
5
6
7
8
9
10
11
// Используем осмысленные имена. Right Triangle (англ.) - равносторонний треугольник
static bool IsRightTriangle(double a, double b, double c) {
    // Зачем такое сложное условие?
    // (a * a == b * b + c * c) && (a * b == a * a + c * c) && (c * c == b * b + a * a)
    if ((a == b) && (b == c)) {
        Console.WriteLine("треугольник равносторонний");
        return true;
    } else
        Console.WriteLine("треугольник не является равносторноним");
    return false;
}
Получается вот что:
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
using System;
namespace ConsoleApplication4
{
    class Program
    {
        static double c(double a,double b,double g){/*третья сторона*/
            return Math.Sqrt(((a*a+b*b)-(2*(a*b)))*Math.Sqrt(g));
        }
        static double p(double a, double b, double c) {/*периметр*/ return a + b + c; }
        static double s(double a, double b, double g)
        {/*площадь*/
            return (a * b * Math.Sin(g)) / 2;
        }
        static bool IsRightTriangle(double a, double b, double c)
        {/*проверка равносторонности*/
            if ((a == b) && (b == c))
            {
                Console.WriteLine("треугольник равносторонний");
                return true;
            }
            else
                Console.WriteLine("треугольник не является равносторноним");
            return false;
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Введите 2 стороны треугольника:");
            double a = Convert.ToDouble(Console.ReadLine()), b = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Введите угол между 1 и 2 стороной:");
            double g = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Третья сторона треугольника = {0:f3}\nP={1:f3}\nS={2:f3}\n{3:f3}", c(a, b, g), p(a, b, c(a, b, g)), s(a, b, g), IsRightTriangle(a, b, c(a, b, g)));
            Console.ReadKey();
        }
    }
}
https://www.cyberforum.ru/atta... 1363182998

Вот результат.У меня траблы с одинаковыми значениями.
1) показывает отрицательную площадь.
2) Выводит на экран. false
3) И вроде бы при данных цифрах он должен показать равносторонность?
Миниатюры
Группа методов(функция)  
0
3 / 3 / 2
Регистрация: 05.11.2012
Сообщений: 110
13.03.2013, 17:09  [ТС] 6
С площадью справился.Поменял формулу на формулу Герона.
0
220 / 143 / 35
Регистрация: 25.06.2010
Сообщений: 383
13.03.2013, 17:09 7
Cheshire94, а в методе C разве не должен присутствовать косинус?
0
3 / 3 / 2
Регистрация: 05.11.2012
Сообщений: 110
13.03.2013, 17:11  [ТС] 8
Цитата Сообщение от NiceGuyEddy Посмотреть сообщение
Cheshire94, а в методе C разве не должен присутствовать косинус?
Верно , спасибо.Извлекаю корень зачем-то
0
Администратор
Эксперт .NET
9610 / 4752 / 761
Регистрация: 17.04.2012
Сообщений: 9,606
Записей в блоге: 14
13.03.2013, 17:13 9
C#
1
Math.Sqrt(((a*a+b*b)-(2*(a*b)))*Math.Sqrt(g));
Неверная формула. По теореме косинусов:
C#
1
return Math.Sqrt(a*a + b*b - 2*a*b*Math.Cos(g));
Вижу, опоздал
0
3 / 3 / 2
Регистрация: 05.11.2012
Сообщений: 110
13.03.2013, 17:40  [ТС] 10
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
using System;
namespace ConsoleApplication4
{
    class Program
    {    /*третья сторона*/
        static double c(double a,double b,double g){
            return Math.Sqrt(((a*a+b*b)-(2*(a*b)))*Math.Cos(g));
        } /*периметр*/ 
        static double Perimetr(double a, double b, double c) {
            return a + b + c;
        }/*площадь*/
        static double s(double a, double b, double c,double g)
        {
            return 1 / 2 * (a * b * Math.Sin(g));
        }/*проверка равносторонности*/
        static bool IsRightTriangle(double a, double b, double c)
        {
            if ((a == b) && (b == c))
            {
 
                Console.WriteLine("треугольник равносторонний");
                return true;
            }
            else
                Console.WriteLine("треугольник не является равносторноним");
            return false;
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Введите 2 стороны треугольника:");
            double a = Convert.ToDouble(Console.ReadLine()), b = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Введите угол между 1 и 2 стороной:");
            double g = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Третья сторона треугольника = {0:f3}\nP={1:f2}\nS={2:f3}\n{3:f3}", c(a, b, g), Perimetr(a, b, c(a, b, g)), s(a, b, c(a,b,g),g),IsRightTriangle(a, b, c(a, b, g)));
            Console.ReadKey();
        }
    }
}
Вот итоговый текст программы.Но работает все как-то криво ((
То есть выдает не правильный результат при правильных формулах.(как я думаю) , записаь не верная у меня выходит (
0
Администратор
Эксперт .NET
9610 / 4752 / 761
Регистрация: 17.04.2012
Сообщений: 9,606
Записей в блоге: 14
13.03.2013, 17:54 11
Возможно, это из-за вычисления третьей стороны треугольника. Сравнение двух чисел типа double может выдавать неравенство при равных сравниваемых числах, но вычисленных разными способами.
0
3 / 3 / 2
Регистрация: 05.11.2012
Сообщений: 110
13.03.2013, 19:24  [ТС] 12
Помогите правильно записать условие "прямоугольного треугольника"

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
using System;
namespace ConsoleApplication4
{
    class Program
    {    /*третья сторона*/
        static double c(double a,double b,double g){
            return Math.Sqrt(((a*a+b*b)-(2*(a*b)))*Math.Cos(g));
        } /*периметр*/ 
        static double Perimetr(double a, double b, double c) {
            return a + b + c;
        }/*площадь*/
        static double s(double a, double b, double c,double g)
        {
            return 1 / 2 * (a * b * Math.Sin(g));
        }/*проверка прямоугольного триуг.*/
        static bool IsRightTriangle(double a, double b, double c)
        {
            if ((a = Math.Sqrt(b*b + c*c)) && (b = Math.Sqrt(a*a + c*c)) && (c = Math.Sqrt(b*b + a*a)))
            {
 
                Console.WriteLine("треугольник равносторонний");    
                return true;
            }
            else
                Console.WriteLine("треугольник не является равносторноним");
            return false;
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Введите 2 стороны треугольника:");
            double a = Convert.ToDouble(Console.ReadLine()), b = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Введите угол между 1 и 2 стороной:");
            double g = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Третья сторона треугольника = {0:f3}\nP={1:f2}\nS={2:f3}\n{3:f3}", c(a, b, g), Perimetr(a, b, c(a, b, g)), s(a, b, c(a,b,g),g),IsRightTriangle(a, b, c(a, b, g)));
            Console.ReadKey();
        }
    }   
}
Добавлено через 9 минут
C#
1
2
3
4
5
6
7
8
9
 static string z(double a, double b, double c)
        {
            string o;
            if((a * a == b * b + c * c) && (b * b == a * a + c * c) && (c * c == b * b + a * a))
                o="треугольник прямоугольный";
            else
                o="треугольник не прямоугольный";
            return o;
        }
Все,не нужно.Готово )

Добавлено через 43 минуты
Все же есть одна проблема,которую я никак не могу понять.
Ошибку которую выводить как от неё избавится? HELP
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
using System;
namespace ConsoleApplication4
{
    class Program
    {    /*третья сторона*/
        static double c(double a, double b, double g)
        {
            return Math.Sqrt(((a * a + b * b) - (2 * (a * b))) * Math.Cos(g));
        } /*периметр*/
        static double Perimetr(double a, double b, double c)
        {
            return a + b + c;
        }/*площадь*/
        static double s(double a, double b, double c, double p)
        {
            return Math.Sqrt(p * (p - a) * (p - b) * (p - c));
        }/*проверка прямоугольного триуг.*/
        static string rectangular(double a, double b, double c)
        {
            string rec;
            if ((a * a == b * b + c * c) && (b * b == a * a + c * c) && (c * c == b * b + a * a))
                rec = "треугольник прямоугольный";
            else
                rec = "треугольник не прямоугольный";
            return rec;
        }
        static void Main(string[] args)
        {
            Console.WriteLine("Введите 2 стороны треугольника:");
            double a = Convert.ToDouble(Console.ReadLine()), b = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Введите угол между 1 и 2 стороной:");
            double g = Convert.ToDouble(Console.ReadLine());
            Console.WriteLine("Третья сторона треугольника = {0:f3}\nP={1:f2}\nS={2:f3}\n{3:f3}", c(a, b, g), Perimetr(a, b, c(a, b, g)), s(a, b, c,p), rectangular(a, b, c(a, b, g)));
            Console.ReadKey();
        }
    }
}
0
Администратор
Эксперт .NET
9610 / 4752 / 761
Регистрация: 17.04.2012
Сообщений: 9,606
Записей в блоге: 14
13.03.2013, 20:06 13
Вот вам переделанный код, проверил, отладил. Разбирайтесь
Кликните здесь для просмотра всего текста
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
/// <summary>
/// Вычисляет одну из сторон треугольника по двум известным сторонам и углу между ними.
/// </summary>
static double GetThirdSide(double first, double second, double angle) {
    return Math.Sqrt(first * first + second * second - 2 * first * second * Math.Cos(angle * Math.PI / 180.0));
}
 
/// <summary>
/// Вычисляет периметр треугольника.
/// </summary>
static double GetPerimeter(double a, double b, double c) {
    return a + b + c;
}
 
/// <summary>
/// Вычисляет площадь треугольника.
/// </summary>
static double GetArea(double a, double b, double c) {
    double p = GetPerimeter(a, b, c);
    return Math.Sqrt(p * (p - a) * (p - b) * (p - c));
}
 
/// <summary>
/// Проверяет, является ли треугольник прямоугольным.
/// </summary>
static bool IsRectangular(double a, double b, double c) {
    if ((a * a == b * b + c * c) || (b * b == a * a + c * c) || (c * c == b * b + a * a))
        return true;
    return false;
}
 
static void Main(string[] args) {
    Console.WriteLine("Введите 2 стороны треугольника:");
    double a = Convert.ToDouble(Console.ReadLine()), b = Convert.ToDouble(Console.ReadLine());
    Console.WriteLine("Введите угол между 1 и 2 стороной:");
    double angle = Convert.ToDouble(Console.ReadLine());
    double third = GetThirdSide(a, b, angle);
            
    Console.WriteLine("Третья сторона треугольника = {0:f3}\nP={1:f2}\nS={2:f3}",
        third,
        GetPerimeter(a, b, third),
        GetArea(a, b, third));
    string rec = IsRectangular(a, b, third) ? "Треугольник прямоугольный" : "Треугольник не прямоугольный";
    Console.WriteLine(rec);
}
1
13.03.2013, 20:06
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.03.2013, 20:06
Помогаю со студенческими работами здесь

Ошибка Невозможно присвоить значение, это "группа методов"
Ошибка: Невозможно присвоить &quot;ОбъёмГорючего&quot; значение, поскольку он является &quot;группа методов&quot;. ...

Невозможно применить индексирование через [] к выражению типа "группа методов"
Сам не понял, как решить проблему, в поиске решение не нашёл. Dictionary&lt;string, string&gt; languages...

Не удалось преобразовать из "группа методов" в double
double srz(int n, int m, int mas) { double sum = 0; for (int i =...

Исправить ошибку "Оператор + не может применяться к типам char и "группа методов"
using System; using System.Collections.Generic; using System.Linq; using System.Text; using...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru