danielianruz
?>

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

Информатика

Ответы

smalltalkcoffee5

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;

       }

   }

}

megaromeo
Для облегчения выкладок разделим эти 64 множителя на шесть групп по 10 двоек в каждой и одну последнюю группу из четырех двоек. Произведение 10 двоек, как легко убедиться, равно 1024, а четырех двоек— 16. Значит, искомый результат равен 1024 X 1024 X 1024 X 1024 X 1024 X 1024 X 16.Перемножив 1024 X 1024, получим 1 048 576.Теперь остается найти 1048 576X1048 576X1048 576X16, отнять от результата единицу — и нам станет известно искомое число зерен: 18 446 744 073 709 551615. Известно, что кубический метр пшеницы вмещает около 15 миллионов зерен. Значит, награда шахматного изобретателя должна была бы занять объем примерно в 12 000 000 000 000 куб. м. Кстати, это геометрическая прогрессия и ее нужно было кидать в раздел "математика".
Elizavetaborisovna1992
//Сделал Лугачев Кирилл
//Специально для
//Все данные вводятся с клавиатуры
program Sravnenie;
var   
a, b: integer; // Стороны 1-ого прямоугольника 
d, c: integer;// Стороны 2-ого прямоугольника 
S1, S2: integer; // Площадь 
buf: integer;// Если площадь 1-ого будет меньше 2-ого                
                   //поменяем местами,что бы избавиться от минуса 
razn: integer; // Разница 2-ух площадей

begin   
Write('Введите стороны 1-ого прямоугольника: '); 
Readln(a, b);
   
Write('Введите стороны 2-ого прямоугольника: '); 
Readln(d, c);   
S1 := a * b; //Площадь 1-ого 
S2 := d * c; //Площадь 2-ого   
if S1 < S2 then  
begin   
buf := S1;   
S1 := S2;   
S2 := buf; 
end;   
razn := S1 - S2;    
Writeln('Площадь 1-ого больше площади 2-ого в - ',razn, ' раз');  
end.

Ответить на вопрос

Поделитесь своими знаниями, ответьте на вопрос:

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

Популярные вопросы в разделе

hellomaxim
Радецкая264
igor51766771
Alyona
mrvasilev2012
stic1995
maxchuev
Dmitriy793
universal21vek116
tyrenumberone
Rubber-soul
fomindmity1
dima-pashkovec
Сергеевна
santechma