Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 29.12.2014, 18:46   #1
Сержикк
 
Регистрация: 08.06.2014
Сообщений: 6
По умолчанию Сделать вывод в виде схемы Горнера

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PolinomConsole
{
    class Polinom
    {
        private int pow;                                     //степень полинома
        private float[] koef;                                //массив коэфициентов, длина равна степень +1

        //задание полинома 
        public Polinom(int pow, float[] koef)   
        {
            this.pow = pow;
            this.koef = new float[pow + 1];                  //создаем массив коэфициентов
            for (int i=0; i<pow+1; i++)
            {
                if (i < koef.Length)                         //если заданный массив достаточно длинный
                    this.koef[i] = koef[i];
                else
                    this.koef[i] = 0;                        //если в заданном массиве кончились значения
            }  
        }


        //сложение
        public Polinom add(Polinom polinom)
        {
            int newPow = Math.Max(pow, polinom.pow);         //задаем новую степень, равную максимальной
            float[] newKoef = new float[newPow + 1];         //задаем размер массива коэфициентов

            //складываем коэфициенты
            for (int i = 0; i < newPow+1; i++)
            {
                newKoef[i] = 0;                              //новый элемент заполняем нулями

                if (i < polinom.koef.Length)                 //если массив с уменьшаемым достаточной длины, записываем его в новый
                    newKoef[i] += polinom.koef[i];

                if (i < koef.Length)                         //если массив с вычитаемым достаточной длины, вычитаем его из нового массива
                    newKoef[i] += koef[i];
            }

            //возвращаем полином
            return new Polinom(newPow, newKoef);
        }

        //вычитание
        public Polinom sub(Polinom polinom)
        {
            int newPow = Math.Max(pow, polinom.pow);         //задаем новую степень, равную максимальной
            float[] newKoef = new float[newPow + 1];         //задаем размер массива коэфициентов

            //вычитаем коэфициенты
            for (int i = 0; i < newPow+1; i++)
            {
                newKoef[i] = 0;                              //новый элемент заполняем нулями
                                                             //если массив с уменьшаемым достаточной длины, записываем его в новый
                if (i < koef.Length)
                    newKoef[i] += koef[i];
                                                             //если массив с вычитаемым достаточной длины, вычитаем его из нового массива
                if (i < polinom.koef.Length)
                    newKoef[i] -= polinom.koef[i];                
            }
            //возвращаем полином
            return new Polinom(newPow, newKoef);
        }


        //перемножение полиномов
        public Polinom mul(Polinom polinom)
        {
            float[] newKoef = new float[polinom.pow + pow + 1];     //задаем новый массив коэфициентов, по длине равный сумме степеней двух полиномов +1
            for (int k = 0; k < newKoef.Length; k++)                //для каждого элемента нового массива
            {
                //обнуляем
                newKoef[k] = 0;
                                                                    //перебираем массивы коэфициентов полиномов
                for (int i = 0; i < polinom.koef.Length; i++)
                {
                    for (int j = 0; j < koef.Length; j++)
                    {
                                                                    //прибавляем к новому элементу коэфициенты с одинаковой степенью х
                        if (i + j == k)
                        {
                            newKoef[k] += polinom.koef[i] * koef[j];
                        }                        
                    }
                }
            }

            return new Polinom(polinom.pow + pow, newKoef);
        }

        //вычисление
        public float calc(float x)
        {
            //подставляем х
            float sum = 0;
            for (int k = 0; k < koef.Length; k++)
            {
                sum += (float)Math.Pow(x, k) * koef[k];
            }

            return sum;
        }
        
        
        //вывод результата       
        public string print()
        {
            string text = "";

            for (int k = koef.Length - 1; k >= 0; k--)
            {
                text += "x^" + k + "*" + koef[k];
                //если не последний элемент, дописываем знак +
                if (k != 0)
                    text += "+";
            }

            return text;
        }
    }
}
Сержикк вне форума Ответить с цитированием
Старый 29.12.2014, 18:51   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

И? Вопрос-то какой? Для чего вы этот код выложили?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 29.12.2014, 18:55   #3
Сержикк
 
Регистрация: 08.06.2014
Сообщений: 6
По умолчанию

Сделать вывод в виде схемы Горнера

я не представляю как это сделать
Сержикк вне форума Ответить с цитированием
Старый 29.12.2014, 19:05   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

А код тогда причем тут? Что в нем делается?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 29.12.2014, 19:16   #5
Сержикк
 
Регистрация: 08.06.2014
Сообщений: 6
По умолчанию

В нем происходят операции над полиномами.Если вы хотите запустить программу то добавьте в проект
Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace PolinomConsole
{
    class Program
    {
        static void Main(string[] args)
        {
            int n;
            Console.WriteLine("Введите степень первого полинома:");
            n = int.Parse(Console.ReadLine());
            float[] koefs = new float[n + 1];
            for (int i = n; i >= 0; i--)
            {
                Console.WriteLine("Введите коэфициент при x^"+i);
                koefs[i] = float.Parse(Console.ReadLine());
            }

            Polinom p1 = new Polinom(n, koefs);
            Console.WriteLine("Введите степень второго полинома:");
            n = int.Parse(Console.ReadLine());
            koefs = new float[n + 1];
            for (int i = n; i >= 0; i--)
            {
                Console.WriteLine("Введите коэфициент при x^" + i);
                koefs[i] = float.Parse(Console.ReadLine());
            }

            Console.WriteLine("Введите x:");
            float x = float.Parse(Console.ReadLine());

            Polinom p2 = new Polinom(n, koefs);

            Console.WriteLine("Введите знак операции (+; -; *; =;) : ");
            string ex;
            string op = "Go";
            while (op != "exit")
            {
                ex = Console.ReadLine();
                op = ex;
                switch (op)
                {
                    case "+":
                        Console.WriteLine("Сумма:");
                        Console.WriteLine(p1.add(p2).print());
                        break;

                    case "-":
                        Console.WriteLine("Разность:");
                        Console.WriteLine(p1.sub(p2).print());                      
                        break;

                    case "*":
                        Console.WriteLine("Произведение:");
                        Console.WriteLine(p1.mul(p2).print());
                        break;

                    case "=":
                        Console.WriteLine("Вычисление первого полинома:");
                        Console.WriteLine(p1.calc(x));
                        break;

                    default:
                        Console.WriteLine("Введена неверная операция");
                        break;
                }
            }
            Console.ReadKey();
        }
    }
}
Сержикк вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Алгоритм в виде схемы. ИгорьКлаус Помощь студентам 0 23.12.2011 18:38
1.изобразить в виде блок схемы алгоритмы 2. Задайте нормальный алгоритм Маркова, а 3 я сам решу! Bernuar Помощь студентам 0 31.03.2010 15:49
алгоритм схемы горнера на С# Deadrain Помощь студентам 4 28.10.2009 16:44