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

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

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;
}
}
}



Конечно! Вот пример решения задачи на языке C#:
csharpusing 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" существует и содержит правильные данные перед запуском программы. Также учтите, что в этом примере не проводится никаких проверок на нулевые знаменатели или ошибки формата файла, поэтому рекомендуется добавить соответствующую обработку ошибок для реальных сценариев.


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







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili