М
Молодежь
К
Компьютеры-и-электроника
Д
Дом-и-сад
С
Стиль-и-уход-за-собой
П
Праздники-и-традиции
Т
Транспорт
П
Путешествия
С
Семейная-жизнь
Ф
Философия-и-религия
Б
Без категории
М
Мир-работы
Х
Хобби-и-рукоделие
И
Искусство-и-развлечения
В
Взаимоотношения
З
Здоровье
К
Кулинария-и-гостеприимство
Ф
Финансы-и-бизнес
П
Питомцы-и-животные
О
Образование
О
Образование-и-коммуникации
18minina
18minina
30.05.2022 18:54 •  Информатика

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

👇
Ответ:
SuperLeonellus123
SuperLeonellus123
30.05.2022

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;

       }

   }

}

4,8(55 оценок)
Открыть все ответы
Ответ:
evagir
evagir
30.05.2022
Program one;var a,b,c,d,e,g:integer;beginwriteln('Введите цену помидор за один килограмм (в рублях)');readln(a);writeln('Введите вес помидор');readln(b);writeln('Стоимость покупки: ',a*b,' руб');writeln('Введите цену огурцов за один килограмм (в рублях)');readln(c);writeln('Введите вес огурцов');readln(d);writeln('Стоимость покупки: ',c*d,' руб');writeln('Введите цену яблок за один килограмм (в рублях)');readln(e);writeln('Введите вес яблок');readln(g);writeln('Стоимость покупки: ',e*g,' руб');end.
4,4(44 оценок)
Ответ:
Danuaple
Danuaple
30.05.2022
function ReadInteger(prompt: string): integer;
        Выводит приглашение к вводу и возвращает значение типа integer, введенное с клавиатуры

function ArrRandom(n: integer := 10; a: integer := 0; b: integer := 100): array of integer;
        Возвращает массив размера n, заполненный случайными целыми значениями

function Println(delim: string := ' '): sequence of T;
      Выводит последовательность на экран, используя delim в качестве разделителя, и переходит на новую строку.

procedure Assert(cond: boolean; sourceFile: string := ''; line: integer := 0);
        Выводит в специальном окне стек вызовов подпрограмм если условие не выполняется
4,7(96 оценок)
Это интересно:
Новые ответы от MOGZ: Информатика
logo
Вход Регистрация
Что ты хочешь узнать?
Спроси Mozg
Открыть лучший ответ