Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/6: Рейтинг темы: голосов - 6, средняя оценка - 4.50
1 / 1 / 1
Регистрация: 10.02.2013
Сообщений: 21
.NET 4.x

Функция Pow, нужно применять в зависимости от входных данных

04.03.2013, 22:40. Показов 1188. Ответов 4
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня такой класс:

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
using System;
 
namespace SharpConsoleApplication4
{
    class MathParser
    {
        public string Expression { get; private set; }
        
        public MathParser(string expression)
        {
            this.Expression = expression;
        }
        
        private string GetFunctionName()
        {
            string functionName = this.Expression.Replace(" ", "");
            functionName = this.Expression.Substring(0, Expression.IndexOf('('));
 
            return functionName;
        }
 
        public string GetArgument()
        {
            string argument = this.Expression.Replace(" ", "");
            int startindex = Expression.IndexOf("(");
            int length = Expression.IndexOf(")") - startindex;
 
            argument = this.Expression.Substring(startindex + 1, length - 1);
               
            return argument;
        }
 
        public double Result()
        {
            string function = GetFunctionName();
            string strArg = GetArgument();
 
            double arg = double.Parse(strArg);
 
            switch (function.ToLower())
            {
                case "sqr":
                    return arg * arg;
                case "sqrt":
                    return Math.Sqrt(arg);
                case "abs":
                    return Math.Abs(arg);
                case "exp":
                    return Math.Exp(arg);
                default:
                    return 0;
            }
        
       }
       
    }
}
и такая программа:

using System;

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
namespace SharpConsoleApplication4
{
    class Program
    {
        static void Main(string[] args)
        {
            string expression = Console.ReadLine();
            MathParser mp = new MathParser(expression);
            Console.WriteLine(mp.Result());
            
        }
    } 
}
Работает так: если вводим, к примеру Sqr(3), выводится 9,, если Sqrt(16), то 4, и так все функции перечисленные в Switch.
Нужно изменить функцию public string GetArgument() так, чтобы при написании Pow(5, 2) например, программа вывела 25,, или же написать другую функцию, которая бы вызывалась только тогда, когда в скобках два аргумента,, что подскажете? я начинающая)
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
04.03.2013, 22:40
Ответы с готовыми решениями:

Постройте функцию сложности процедуры в зависимости от параметра V, характеризующего сложность входных данных
Помогите, пожалуйста! У меня получилась кое-какая функция, но сомневаюсь очень сильно в ёё правильности. Постройте функцию сложности...

Нужно чтобы функция в зависимости от условий возвращала string или double
Привет, как можно реализовать? Нужно чтобы функция в зависимости от условий возвращала string или double

Вариант запуска приложения в зависимости от входных параметров
Всем привет! Помогите пожалуйста решить такую проблему... Пишу проигрыватель. Задача стоит в следующем, если пользователь выбирает...

4
 Аватар для AlexAsche
78 / 78 / 15
Регистрация: 27.01.2013
Сообщений: 323
05.03.2013, 00:26
Например так:

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
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplicationParser
{
    class MathParser
    {
        public string Expression { get; private set; }
 
        public MathParser(string expression)
        {
            this.Expression = expression;
        }
 
        private string GetFunctionName()
        {
            string functionName = this.Expression.Replace(" ", "");
            functionName = this.Expression.Substring(0, Expression.IndexOf('('));
 
            return functionName;
        }
 
        public double[] GetArgument()
        {
            //string[] arguments = this.Expression.Replace(" ", "");
            int startindex = Expression.IndexOf("(");
            int length = Expression.IndexOf(")") - startindex;
 
            string[] arguments = this.Expression.Substring(startindex + 1, length - 1).Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries);
 
            //Linq
            return arguments.Select(x => double.Parse(x)).ToArray<double>();
        }
 
        public double Result()
        {
            string function = GetFunctionName();
            //string[] strArg = GetArgument();
 
            double[] arg = GetArgument();
 
            switch (function.ToLower())
            {
                case "sqr":
                    return arg[0] * arg[0];
                case "sqrt":
                    return Math.Sqrt(arg[0]);
                case "abs":
                    return Math.Abs(arg[0]);
                case "exp":
                    return Math.Exp(arg[0]);
                case "pow":             
                    return arg.Length == 1 ? Math.Pow(arg[0], 2) : Math.Pow(arg[0], arg[1]);
                default:
                    return 0;
            }
 
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
             string expression = Console.ReadLine();
             MathParser mp = new MathParser(expression);
             Console.WriteLine(mp.Result());
             Console.ReadLine();
        }
    }
}
1
1 / 1 / 1
Регистрация: 10.02.2013
Сообщений: 21
05.03.2013, 00:58  [ТС]
оооггрооомное спасибо^____^

Добавлено через 19 минут
Цитата Сообщение от AlexAsche Посмотреть сообщение

C#
1
2
           
            return arguments.Select(x => double.Parse(x)).ToArray<double>();
об'ясните, пожалуйста, эту строку,, что делает функция Select и ТоАrray<double>?
я прочитала их в справочнике, но на программе непонятно как-то)
0
 Аватар для AlexAsche
78 / 78 / 15
Регистрация: 27.01.2013
Сообщений: 323
05.03.2013, 10:14
Select применяет указанный делегат к каждому элементу массива. Делегат представлен в виде лямбда-функции x=>double.Parse(x), что означает преобразование элемента к типу double. Т.к результатом Select служит IEnumerable<> то он был преобразован к double[] функцией ToArray.

Добавлено через 13 минут
Вся строка в итоге просто преобразует string[] в double[].
0
1 / 1 / 1
Регистрация: 10.02.2013
Сообщений: 21
22.04.2013, 23:09  [ТС]
а нельзя без делегатов?
сейчас мне нужно писать ту же программу с Reflections,,
в смысле вызвать функции Math.***() с помощью invoke, подскажете?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.04.2013, 23:09
Помогаю со студенческими работами здесь

Вывод новостей из инфоблока в зависимости от входных параметров
Есть компонент news.list, он подключен так: &lt;div&gt;&lt;?$APPLICATION-&gt;IncludeComponent(&quot;bitrix:news.list&quot;, &quot;.default&quot;, array( ...

Формирвоать имя файла в зависимости от входных параметров
Такой вот глупенький вопрос. Нужно формировать имя выходного файла в зависимости от передаваемых аргументов командной строки. Например,...

Функция pow()
Здравствуйте!Хотелось спросить у опытных программистов - скажите пожалуйста, как функция pow() считает число в степень?Она же не в лоб, как...

Функция pow
#include &lt;iostream&gt; #include &lt;cmath&gt; using namespace::std; double pow(double x, double y) { cin &gt;&gt; x &gt;&gt; y; if...

Что за функция bsxfun и как её применять
Объясните пожалуйста что за функция bsxfun, в чем её смысл и как её применять?


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: при выборе сотрудника (справочник Сотрудники) в ТЧ документа. . .
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru