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

Дано сложное арифметическое выражение вида:

29.03.2020, 13:13. Показов 2519. Ответов 18
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Решить через С# и составить блок-схема соответствующей программы.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.03.2020, 13:13
Ответы с готовыми решениями:

Дано S-выражение, представляющее дерево вида «(РебенокЛевый Родитель РебенокПравый)»
Консольное приложение, язык Лисп (компилятор CLisp) Составить программу, считывающую из файла "input.txt" три строки текста, в...

. Дана строка, изображающая арифметическое выражение вида «<цифра>±<цифра>±…±<цифра>», где на месте знака операции «±» н
Дана строка, изображающая арифметическое выражение вида «&lt;цифра&gt;±&lt;цифра&gt;±…±&lt;цифра&gt;», где на месте знака операции «±» находится...

Cтрока: Вывести значение арифметическое выражение вида «<цифра>±<цифра>±…±<цифра>»...
Дана строка, изображающая арифметическое выражение вида «&lt;цифра&gt;±&lt;цифра&gt;±…±&lt;цифра&gt;», где на месте знака операции «±» находится...

18
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
29.03.2020, 16:13
Интересно, вроде бы элементарная задача в одну строку кода, но почему-то при нахождении корня 7-й степени из -16,922539 выдает NaN, хотя калькулятор такое же выражение считает нормально?
1
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
29.03.2020, 16:37
Цитата Сообщение от chumich Посмотреть сообщение
выдает NaN
не знаю как считает ваш калькулятор, но мой при https://www.cyberforum.ru/cgi-bin/latex.cgi?\sqrt{-4} также выдает ошибку. Квадратный корень из отрицательно числа всегда выдает NaN
C#
1
2
Console.WriteLine(Math.Sqrt(-16.922539));
Console.WriteLine(Math.Pow(-16.922539, 1.0 / 2));
Может неверно посчитано выражение ?
1
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
29.03.2020, 17:31
Enifan, у него корень 7 (нечетной) степени
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
29.03.2020, 18:00
Просто интересно стало: смогу в одну строку кода написать выражение без ошибок или нет Написал:
C#
1
2
3
4
5
Console.Write(26.0 / Math.Pow(
((34.06 - 33.81) * 4 / (6.84 / Math.Pow(28.57 - 25.15, 1 / 5.0))) -
Math.Sqrt((3 + 4.2 / 0.1) / ((1 / 0.3 - 2.7) / 4.12)), 1 / 7.0 ) +
(2 / 3.0) / (4 / 21.0) + (1 + Math.Pow(5, 1 / 3.0)) / 3.5);
Console.Read();
Думал ошибся, разбил на кусочки:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
double a1 = (34.06 - 33.81) * 4;
Console.WriteLine(a1);
double a2 = 6.84 / Math.Pow(28.57 - 25.15, 1 / 5.0);
Console.WriteLine(a2);
double a3 = 3 + 4.2 / 0.1;
Console.WriteLine(a3);
double a4 = (1 / 0.3 - 2.7) / 4.12;
Console.WriteLine(a4);
double a5 = a1 / a2;
Console.WriteLine(a5);
double a6 = Math.Sqrt(a3 / a4);
Console.WriteLine(a6);
double a7 = Math.Pow(a5 - a6, 1 / 7.0);
Console.WriteLine(a7);
double a8 = 26 / a7;
Console.WriteLine(a8);
double a9 = (2 / 3.0) / (4 / 21.0);
Console.WriteLine(a9);
double a10 = (1 + Math.Pow(5, 1 / 3.0)) / 3.5;
Console.WriteLine(a10);
double a11 = a8 + a9 + a10;
Console.WriteLine(a11);
Console.Read();
И нашел, что а7 выдает NaN...

Добавлено через 17 минут
Попробовал элементарный корень третьей степени из -1 извлечь, тоже нанкает. Что за косяк? Может у меня библиотека какая-нибудь не подключена?
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
29.03.2020, 18:06
Цитата Сообщение от Diamante Посмотреть сообщение
у него корень 7 (нечетной) степени
у него число отрицательно, а степень значения не имеет
C#
1
2
Console.WriteLine(Math.Pow(27, 1.0 / 3));
Console.WriteLine(Math.Pow(-27, 1.0 / 3));
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
29.03.2020, 18:12
Enifan, хм, никогда не сталкивался в шарпе, но чисто арифметически ответ существует
значит надо прикрутить что-то вроде этого
C#
1
static double Root(double number, double factor) => Math.Sign(number) * Math.Pow(Math.Abs(number), factor);
C#
1
Console.WriteLine(Root(-27, 1.0 / 3)); //-3
1
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
29.03.2020, 18:13
Цитата Сообщение от chumich Посмотреть сообщение
double a4 = (1 / 0.3 - 2.7) / 4.12;
может сперва надо a3 / a4 а потом уже делить на 4.12 ?
Как то странно знак деления стоит. фиг поймешь что на что делить
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
29.03.2020, 18:19
Цитата Сообщение от Diamante Посмотреть сообщение
прикрутить что-то вроде этого
Да, типа этого я и сделал. В данном частном случае:
C#
1
2
double a7 = (-1) * Math.Pow(Math.Abs(a5 - a6), 1 / 7.0);
Console.WriteLine(a7);
Просто принципиально было интересно: где косяк. Получается - не у меня , а у C#?
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
29.03.2020, 18:28
Цитата Сообщение от Diamante Посмотреть сообщение
значит надо прикрутить что-то вроде этого
чисто теоретически данный метод очень даже хорош. Но что будет если я извлеку квадратный корень из -4. Я получу -2. А теперь вопрос: какое число мне надо возвести в степень 2, чтобы я получил ответ -4 ?
Немного нагуглил, и попалась мне такая вещь Мнимое число. Я не особо силен в высшей математике, но думаю ответ где то там (там даже пример есть когда 6 превращается в -6). Но C# насколько мне известно строго типизирован, и скорее всего без "костылей" не получится обойти это
0
3566 / 2507 / 1174
Регистрация: 14.08.2016
Сообщений: 8,219
29.03.2020, 18:36
Enifan, ну так я и написал "что-то типа", не заморачивался проверками, так сказать задал направление
0
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
29.03.2020, 19:00
Как не используй знак деления, результат всегда отрицательный...
C#
1
2
3
4
5
6
7
8
9
10
11
12
        double a1 = 1; // (34.06 - 33.81) * 4
        double a2 = 6.84;
        double a3 = 1.27880763703092; // Math.Pow(28.57 - 25.15, 1.0 / 5);
        double a4 = 45; // 3 + 4.2 / 0.1;
        double a5 = 0.633333333333333; // 1 / 0.3 - 2.7;
        double a6 = 4.12;
 
        double left = a1 / a2 / a3; // где ставить скобки ? // 0.11 или 0.18
        double right = Math.Sqrt(a4 / a5 / a6); // где ставить скобки ? // 4.16 или 17.32
 
        double total = Math.Pow(left - right, 1.0 / 7);
        Console.WriteLine(total);
0
0 / 0 / 0
Регистрация: 29.03.2020
Сообщений: 8
29.03.2020, 19:12  [ТС]
Из всего прочитанного так и не могу понять как выполнить данную программу через Visual Studio,в ответе должно получиться -13.08286.
Простите,за мою тупость,просто для меня это сложно и ничего не понятно.
0
96 / 55 / 23
Регистрация: 01.05.2017
Сообщений: 78
29.03.2020, 19:26
chumich, Enifan, Diamante,
Цитата Сообщение от Diamante Посмотреть сообщение
Enifan, хм, никогда не сталкивался в шарпе, но чисто арифметически ответ существует
Это же не извлечение корня 7 степени, а возведение в степень 1/7. Рекомендую к просмотру видео Про степень с действительным показателем | В интернете опять кто-то неправ #005 | Борис Трушин |

Думаю, что отделить знак, возвести в 1/7, вернуть знак - правильный способ получить желаемое.
1
 Аватар для Enifan
1849 / 1191 / 501
Регистрация: 14.10.2018
Сообщений: 3,211
29.03.2020, 20:01
Цитата Сообщение от ZoAs Посмотреть сообщение
Это же не извлечение корня 7 степени, а возведение в степень 1/7
это одно и тоже, к тому же как по вашему расшифровывается запись
C#
1
Math.Pow(number, 1.0 / 7);
0
96 / 55 / 23
Регистрация: 01.05.2017
Сообщений: 78
30.03.2020, 04:34
Enifan, видео не посмотрели, видимо.
В школе, когда вводят понятие дробно-рациональной степени, делают оговорку, что это справедливо для неотрицательных оснований. В таком случае у дробных степеней сохраняются свойства, которыми мы уже умеем пользоваться в случаях с целыми степенями. (Если основание отрицательное - свойства не выполняются).
Затем вводят степени с действительным показателем. Основание опять же неотрицательное. Вводят на основе пределов. По сути: нарисуем график показательной функции (a > 0) для рациональных x, и для иррациональных дополним график так, чтобы получившаяся функция была непрерывной. Так вот функция Math.Pow() работает по такому принципу.
Замечание: по поводу a=0 делаются дополнительные оговорки в определениях, так что лучше вообще говорить о положительных основаниях.

Изучается это в начале 10 класса. Я один учебник скачал, пару скриншотов приложил к посту. Сам не так давно открыл для себя этот нюанс. Хотел оправдаться тем, что в школе пропустил данную тему (помню как пришел, понял что свойства справедливы, задания выполняются легко), но на теме с графиком показательной функции я всё же был.

Как всегда можно заглянуть в документацию, в разделе "комментарии" описаны специфические случаи. Я не сразу нашел наш, он в 6 примере.
Миниатюры
Дано сложное арифметическое выражение вида:   Дано сложное арифметическое выражение вида:  
0
 Аватар для chumich
2081 / 1239 / 464
Регистрация: 20.12.2014
Сообщений: 3,234
30.03.2020, 08:08
Лучший ответ Сообщение было отмечено AnnaMelok как решение

Решение

AnnaMelok, можете так:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
double a1 = (34.06 - 33.81) * 4;
double a2 = 6.84 / Math.Pow(28.57 - 25.15, 1 / 5.0);
double a3 = 3 + 4.2 / 0.1;
double a4 = (1 / 0.3 - 2.7) / 4.12;
double a5 = a1 / a2;
double a6 = Math.Sqrt(a3 / a4);
double a7 = (-1) * Math.Pow(Math.Abs(a5 - a6), 1 / 7.0);
double a8 = 26 / a7;
double a9 = (2 / 3.0) / (4 / 21.0);
double a10 = (1 + Math.Pow(5, 1 / 3.0)) / 3.5;
double a11 = a8 + a9 + a10;
Console.WriteLine(a11);
Console.Read();
или так:
C#
1
2
3
4
5
Console.Write(26.0 / ((-1) * Math.Pow(Math.Abs(
((34.06 - 33.81) * 4 / (6.84 / Math.Pow(28.57 - 25.15, 1 / 5.0))) -
Math.Sqrt((3 + 4.2 / 0.1) / ((1 / 0.3 - 2.7) / 4.12))), 1 / 7.0)) +
(2 / 3.0) / (4 / 21.0) + (1 + Math.Pow(5, 1 / 3.0)) / 3.5);
Console.Read();
0
 Аватар для diadiavova
7260 / 2607 / 745
Регистрация: 11.04.2015
Сообщений: 4,152
Записей в блоге: 43
30.03.2020, 18:29
Цитата Сообщение от ZoAs Посмотреть сообщение
Это же не извлечение корня 7 степени, а возведение в степень 1/7
Видосик безусловно интересный, но в данном случае дело не в этом. Здесь возведение в степень 1/7 даст тот же результат, что и извлечение корня, просто сделать это с помощью Math.Pow не получится в силу того, что данный метод под такие задачи не заточен и здесь все дело в типах данных. Просто данный метод находит те степени, которые существуют в области действительных чисел, а отрицательное число в действительной степени - число комплексное. Это довольно просто можно увидеть, если попробовать представить степень произвольного числа в форме степени числа е.
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}^{t} = {e}^{t\ln a}
Если a - отрицательное число, то мы знаем, что в области действительных чисел оно не имеет логарифма. Но если вспомнить одно из следствий формулы Эйлера
https://www.cyberforum.ru/cgi-bin/latex.cgi?{e}^{i\pi} = -1
То вполне понятно, что
https://www.cyberforum.ru/cgi-bin/latex.cgi?\ln (-1) = i\pi
Или в более общей форме
https://www.cyberforum.ru/cgi-bin/latex.cgi?Ln (-1) = i\pi (2n-1), где n - целое число.
Ну и соответственно логарифм отрицательного числа мы можем записать как
https://www.cyberforum.ru/cgi-bin/latex.cgi?Ln a = \ln |a| + i\pi (2n - 1)
Ну и, возвращаясь к записи степени мы получим
https://www.cyberforum.ru/cgi-bin/latex.cgi?{a}^{t} = {e}^{t\ln |a|}{e}^{it\pi (2n - 1)}
Выполнив в этой формуле пару замен переменных мы придем к каноническому виду записи комплексного числа в показательной форме.
https://www.cyberforum.ru/cgi-bin/latex.cgi?r{e}^{ix}
Для того, чтобы понять, почему корни нечетных степеней дают вполне себе действительные числа нужно просто вспомнить о том, что действительное число может рассматриваться как частный случай числа комплексного, то есть это такое комплексное число, у которого мнимая часть равна нулю. И здесь интересно рассмотреть, в каких случаях мнимая часть обращается в нуль.
Модуль числа, будучи действительной степенью числа e к такому эффекту привести не может, стало быть рассматривать надо выражение
https://www.cyberforum.ru/cgi-bin/latex.cgi?{e}^{it\pi (2n - 1)}
Если мы с помощью формулы Эйлера переведем данное число в тригонометрическую форму, то станет понятно, что обнулиться мнимая часть может только в том случае, если обнулится выражение https://www.cyberforum.ru/cgi-bin/latex.cgi?\sin (t\pi (2n - 1)). А синус у нас равен нулю в случае, если аргумент кратен Пи. То есть мы имеем следующее равенство
https://www.cyberforum.ru/cgi-bin/latex.cgi?t\pi (2n - 1) = m\pi
Из этого равенства следует, что
https://www.cyberforum.ru/cgi-bin/latex.cgi?t = \frac{m}{2n - 1}
Иными словами в тех случаях, когда степень имеет отрицательное основание, а показатель представим в виде обыкновенной дроби с целым числителем и нечетным знаменателем, такая степень равна комплексному числу и которого мнимая часть равна нулю.
0
0 / 0 / 0
Регистрация: 29.03.2020
Сообщений: 8
31.03.2020, 01:23  [ТС]
Спасибо большое!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
31.03.2020, 01:23
Помогаю со студенческими работами здесь

Сложное выражение
С помощью Turbo Pascal, найти S=( выражение на картинке) с точностью \alpha = 0.1

Сложное выражение
Нужжно вывести выражение (A+B)/(A-B) в Label1 При вводе данной строчке выдает ошибку Label1.Caption:=FloatToStr...

Сложное выражение
помогите , пожалуйста :)

сложное выражение
совсем не могу понять как делать Вложение удалено.

Дано арифметическое выражение, все числа которого записаны в шестнадцатеричной системе счисления: Посчитайте сумму цифр числа-результата
Помогите пожалуйста сделать. 1. Дано арифметическое выражение, все числа которого записаны в шестнадцатеричной системе счисления: ...


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

Или воспользуйтесь поиском по форуму:
19
Ответ Создать тему
Новые блоги и статьи
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
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
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru