Вопрос задан 15.02.2021 в 21:19. Предмет Информатика. Спрашивает Левченко Владислав.

Нужно решить на языке С#! Вычислить по схеме Горнера значение многочлена с рациональными

коэффициентами для данного рационального значения переменной. Считать, что числители и знаменатели коэффициентов записаны в файле f; вначале числитель и знаменатель старшего коэффициента и т.д., в последнюю очередь числитель и знаменатель свободного члена. Примечание. Во многих языках программирования (например, в Паскале) компоненты файла могут быть массивами. В этом случае можно предполагать, что числители и знаменатели образуют массивы длины 2.
0 0
Перейти к ответам

Ответы на вопрос

Внимание! Ответы на вопросы дают живые люди. Они могут содержать ошибочную информацию, заблуждения, а также ответы могут быть сгенерированы нейросетями. Будьте внимательны. Если вы уверены, что ответ неверный, нажмите кнопку "Пожаловаться" под ответом.
Отвечает Постоєв Діма.

P.S.:

Я уже потом прочел, что все данные вводятся уже в готовом виде.

Но уравнение я уже разложил.

В stdin.txt идет что-то на подобии:

1*3^6+2*3^5-21*3^4-20*3^3+71*3^2+114*3+45=0

(В проге уже все само раскладывается итд)

+ есть левые ответы (не знаю почему, но все работает корректно. Видимо ложные.)

Либо пиши проверку под это дело, либо уменьшай лимиты.

Если не нравится реализация с парсингом значений из уравнения - переписывай, ибо мне лень)))

(Лучше решения тебе явно никто не предложит)

И да - если коаф. 1, то есть что-то на подобии x^2 - 4 * x + 1 =0 (у x^2 коаф. единица), то его вручную нужно прописывать.

using System;

using System.Collections.Generic;

using System.IO;

using System.Text.RegularExpressions;

namespace Test

{

   class Program

   {

       static void Main(string[] args)

       {

           string equation = get_equation();

           int __LIMIT__ = 1000;//Лимит поиска корней.То-есть программа пытается найти корни от 1000 до -1000

           int highest_exponent;

           try

           {

               highest_exponent = int.Parse(get_higher_exponent(equation));

           }

           catch (Exception ex)

           {

               Console.WriteLine("Badequation.");

               return;

           }

           int[] multipliers = get_multipliers(exponents_remover(equation), highest_exponent);

           List<int> answers = gorner_resolver(multipliers, __LIMIT__);

           int k = 1;

           for (int i = 0; i < answers.Count; ++i)

           {

               Console.WriteLine("{0}:{1}", k, answers[i]);

               k++;

           }

           Console.ReadLine();

       }

       static string get_equation()

       {

           return File.ReadAllText("./stdin.txt").Replace(" ", "");

       }

       static string get_higher_exponent(string equation)

       {

           for (int i = 0; i < equation.Length; ++i)

           {

               if (equation[i] == '^')

               {

                   if (equation[i + 1] == '-' || equation[i + 1] == '+')

                       return equation[i + 1].ToString() + equation[i + 2].ToString();

                   return equation[i + 1].ToString();

               }

           }

           return "Bad";

       }

       static string exponents_remover(string equation)

       {

           string eq_x = equation;

           for (int i = 0; i < eq_x.Length; ++i)

           {

               if (eq_x[i] == '^')

               {

                   if (eq_x[i + 1] == '-' || eq_x[i + 1] == '+')

                       eq_x = eq_x.Remove(i + 1, 2);

                   eq_x = eq_x.Remove(i + 1, 1);

               }

           }

           return eq_x.Substring(0, eq_x.Length - 2);

       }

       static List<int> gorner_resolver(int[] multipliers, int limit)

       {

           int k = 1;

           int[] resolve = new int[multipliers.Length];

           List<int> ans = new List<int>();

           while (k <= limit)

           {

               resolve[0] = multipliers[0];

               int coaf = k;

               if (k > 0)

                   k *= -1;

               else

               {

                   k *= -1;

                   k++;

               }

               for (int i = 1; i < multipliers.Length; ++i)

               {

                   resolve[i] = resolve[i - 1] * coaf + multipliers[i];

               }

               if (resolve[resolve.Length - 1] == 0)

                   ans.Add(coaf);

           }

           return ans;

       }

       static int[] get_multipliers(string equation, int highest_exponent)

       {

           Regex re = new Regex(@"-?[0-9]+\*?");

           MatchCollection matches = re.Matches(equation);

           int[] multipliers = new int[highest_exponent + 1];

           int k = 0;

           foreach (var value in matches)

           {

               multipliers[k] = int.Parse(value.ToString().Replace("*", ""));

               k++;

           }

           return multipliers;

       }

   }

}

0 0
Отвечает нейросеть ChatGpt. Будьте внимательны, ответы нейросети могут содержать ошибочные или выдуманные данные.

Конечно! Вот пример решения задачи на языке C#:

csharp
using System; using System.IO; class Program { static void Main() { // Путь к файлу с коэффициентами string filePath = "coefficients.txt"; // Значение переменной double x = 2.5; // Пример рационального значения переменной // Чтение коэффициентов из файла string[] lines = File.ReadAllLines(filePath); // Проверка, что количество строк в файле достаточно для вычисления многочлена if (lines.Length < 2) { Console.WriteLine("Недостаточно коэффициентов в файле."); return; } // Создание массивов числителей и знаменателей коэффициентов int n = lines.Length; int[] numerators = new int[n]; int[] denominators = new int[n]; // Чтение числителей и знаменателей из файловой записи for (int i = 0; i < n; i++) { string[] parts = lines[i].Split('/'); numerators[i] = int.Parse(parts[0]); denominators[i] = int.Parse(parts[1]); } // Вычисление значения многочлена по схеме Горнера double result = numerators[0] / (double)denominators[0]; for (int i = 1; i < n; i++) { result = result * x + numerators[i] / (double)denominators[i]; } Console.WriteLine("Значение многочлена при x = " + x + ": " + result); } }

В данном примере мы предполагаем, что файл "coefficients.txt" содержит коэффициенты многочлена, записанные в формате "числитель/знаменатель" для каждого коэффициента. Мы читаем содержимое файла, разделяем строки на числитель и знаменатель, и сохраняем их в соответствующие массивы. Затем, используя схему Горнера, мы вычисляем значение многочлена для заданного значения переменной x и выводим результат.

Пожалуйста, убедитесь, что файл "coefficients.txt" существует и содержит правильные данные перед запуском программы. Также учтите, что в этом примере не проводится никаких проверок на нулевые знаменатели или ошибки формата файла, поэтому рекомендуется добавить соответствующую обработку ошибок для реальных сценариев.

0 0

Топ вопросов за вчера в категории Информатика

Последние заданные вопросы в категории Информатика

Задать вопрос