Модераторы: Poseidon
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [С#] Операции с полиномами, помогите разобраться с готовым кодом 
:(
    Опции темы
Гениальный123Робот
Дата 26.11.2008, 16:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 2.1.2006

Репутация: нет
Всего: нет



В общем программа выполняет действия с полиномами. Мне не совсем понятен каждый шаг. Состоит из Oсновного файла и подключенного к нему math.cs.

Интересуют такие строки, как: 
"itemp = int.Parse(Console.ReadLine());" и в целом пояснения по всей программе, что за что отвечает.

Заранее спасибо!


Основной файл.

Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using math;

namespace polynom
{
    class Program
    {
        static void Main(string[] args)
        {
            while(true)
            {    
                int itemp = 0;

                Console.Write("Введите степень первого полинома(целое): ");
                itemp = int.Parse(Console.ReadLine());
                CPolynom p1 = new CPolynom(itemp);
                for (int i = itemp; i >= 0; i--)
                {
                    Console.Write("Введите коэффициент при степени " + i +"(дробное):" );
                    p1[i] = double.Parse(Console.ReadLine());
                }
                Console.WriteLine(p1.Polynom);

                Console.Write("Введите степень второгового полинома(целое): ");
                itemp = int.Parse(Console.ReadLine());
                CPolynom p2 = new CPolynom(itemp);
                for (int i = itemp; i >= 0; i--)
                {
                    Console.Write("Введите коэффициент при степени " + i +"(дробное):" );
                    p2[i] = double.Parse(Console.ReadLine());
                }
                Console.WriteLine(p2.Polynom);

                CPolynom p3 = new CPolynom(0);
                char ctemp;
                while (true)
                {
                    
                    Console.Write("Выберите операцию ( + - * ): ");
                    ctemp = char.Parse(Console.ReadLine());

                    switch (ctemp)
                    {
                        case '+':
                            p3 = p1 + p2;
                            break;
                        case '-':
                            p3 = p1 - p2;
                            break;
                        case '*':
                            p3 = p1 * p2;
                            break;
                    }
                    if ((ctemp != '+') && (ctemp != '-') && (ctemp != '*'))
                        Console.WriteLine("Неправильная операция");
                    else
                        break;
                }
                Console.WriteLine("Результат операции: " + p3.Polynom);
                double dtemp = 0;
                Console.Write("Введите точку(дробное):");
                dtemp= double.Parse(Console.ReadLine());
                Console.WriteLine("Значение в точке: " + p3.Value(dtemp));
                Console.Write("Выход (y/n)): ");
                ctemp = char.Parse(Console.ReadLine());
                if (ctemp == 'y')
                    break;
            } 
       }
    }
}


А вот файл math.cs, который подключается в Основном файле.

Код

using System;
using System.Collections.Generic;

namespace math
{

    class CPolynom
    {
        //===== поля и свойства ============================+
        private int n;
        private List<double> p = new List<double>();
        public int Deg
        {
            get
            {
                return n;
            }
        }
        public double this[int i]
        {
            get 
            {
                return p[i];
            }
            set 
            {
                p[i] = value;
            }
        }

        public string Polynom
        {
            get
            {
                string result = "";

                if (Deg == 0)
                    return result;

                if (Deg == 1)
                    return result += p[Deg-1] + " = 0";

                result += p[Deg-1] + "*x^" + (Deg-1)+" ";
                for (int i = Deg-1; i > 1; i--)
                {
                    if(p[i-1]!=0)
                        if (p[i - 1] > 0)
                            result += "+ " + p[i-1] + "*x^" + (i-1) + " ";
                        else
                            result += p[i-1] + "*x^" + (i-1) + " ";
                }
                if (p[0] > 0)
                    result += "+ " + p[0] + " = 0";
                else
                    result += p[0] + " = 0";
                return result;
            }
        }
        //===== конструкторы ===============================+
        private CPolynom() {}
        public CPolynom(double[] p)
        {
            n = p.Length;
            for (int i = 0; i < n; i++)
            {
                this.p.Add(p[i]);
            }
        }
        public CPolynom(List<double> p)
        {
            n = p.Count;
            for (int i = 0; i < n + 1; i++)
                this.p[i] = p[i];
        }
        public CPolynom(double[] p, int startIndex, int endIndex)
        {
            n = endIndex - startIndex;
            if (n < 0)
                throw new ArgumentException("start > end");
            for (int i = 0; i < n + 1; i++)
                this.p[i] = p[startIndex + i];
        }
        public CPolynom(CPolynom p)
        {
            n = p.Deg;
            for (int i = 0; i < n; i++)
            {
                this.p.Add(p[i]);
            }
        }
        // creates x^deg
        public CPolynom(int Deg)
        {
            n = Deg+1;
            for(int i=0; i<n; i++)
            {
                p.Add(0);
            }
        }
        //===== методы =====================================+
        public double Value(double x)
        {
            double val = p[0];
            for (int i = 1; i < n; i++)
                val = val + p[i]*System.Math.Pow(x,i);
            return val;
        }
        //===== операторы ==================================+
        public override string ToString()
        {
            string s = "" + p[0];
            for (int i = 1; i < n + 1; i++)
                s += " " + p[i];
            return s;
        }
        // унарный -
        public static CPolynom minus(CPolynom p)
        {
            CPolynom n = new CPolynom(p);
            for (int i = 0; i < p.Deg; i++)
                n[i] = -n[i];
            return n;
        }
        public static CPolynom operator -(CPolynom p)
        {
            return CPolynom.minus(p);
        }
        // бинарный +
        public static CPolynom sum(CPolynom p1, CPolynom p2)
        {
            CPolynom max = Max(p1, p2);
            CPolynom min = Min(p1, p2);
            double[] m = new double[max.Deg];
            for (int i = 0; i < min.Deg; i++)
                m[i] = max[i] + min[i];
            for (int i = min.Deg; i < max.Deg; i++)
                m[i] = max[i];
            int end = max.Deg;
            return new CPolynom(m);
        }
        public static CPolynom operator +(CPolynom p1, CPolynom p2)
        {
            return CPolynom.sum(p1, p2);
        }
        // бинарный -
        public static CPolynom diff(CPolynom p1, CPolynom p2)
        {
            return CPolynom.sum(p1, -p2);
        }
        public static CPolynom operator -(CPolynom p1, CPolynom p2)
        {
            return CPolynom.sum(p1, -p2);
        }
        public static CPolynom mult(CPolynom p1, CPolynom p2)
        {
            double[] m = new double[p1.Deg + p2.Deg -1];
            for (int i = 0; i < p1.Deg; i++)
                for (int j = 0; j < p2.Deg; j++)
                    m[i + j] += p1[i] * p2[j];
            return new CPolynom(m);
        }
        public static CPolynom mult(CPolynom p, double d)
        {
            if (d == 0)
                return new CPolynom(0);
            double[] m = new double[p.Deg];
            for (int i = 0; i < p.Deg; i++)
                m[i] += p[i] * d;
            return new CPolynom(m);
        }
        public static CPolynom operator *(CPolynom p1, CPolynom p2)
        {
            return CPolynom.mult(p1, p2);
        }
        public static CPolynom operator *(CPolynom p, double d)
        {
            return CPolynom.mult(p, d);
        }
        public static CPolynom operator *(double d, CPolynom p)
        {
            return CPolynom.mult(p, d);
        }
        //===== вспомагательные функции ====================+
        private static CPolynom Max(CPolynom p1, CPolynom p2)
        {
            if (p1.Deg > p2.Deg || p1.Deg == p2.Deg)
                return p1;
            else
                return p2;
        }
        private static CPolynom Min(CPolynom p1, CPolynom p2)
        {
            if (p1.Deg > p2.Deg || p1.Deg == p2.Deg)
                return p2;
            else
                return p1;
        }
    }
}

PM MAIL   Вверх
THandle
Дата 26.11.2008, 18:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Хранитель Клуба
Group Icon
Награды: 1



Профиль
Группа: Админ
Сообщений: 3639
Регистрация: 31.7.2007
Где: Moscow, Dubai

Репутация: 30
Всего: 372



Гениальный123Робот

Цитата(Гениальный123Робот @  26.11.2008,  16:54 Найти цитируемый пост)
"itemp = int.Parse(Console.ReadLine());"


Так это ж все в справке есть. К примеру по этому:

Цитата

Converts the string representation of a number to its 32-bit signed integer equivalent. 


В данном случае переводит прочитанную с консоли строку в число.
По остальным подобным вещам тоже все есть в справке. smile

Или интересует конкрутно объяснение всей программы? Что, где и как считает?
PM   Вверх
Гениальный123Робот
Дата 26.11.2008, 18:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 257
Регистрация: 2.1.2006

Репутация: нет
Всего: нет



Цитата(THandle @ 26.11.2008,  18:06)
Или интересует конкрутно объяснение всей программы? Что, где и как считает?

Если Вас не затруднит, то да, поясните =)
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.0691 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.