Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using System.Collections.Generic;
- using System.Text;
- namespace Task_3._1
- {
- class Polynom
- {
- public Dictionary<int, double> degrees; // Тут хранятся пары степень x -> коэффициент при данной степени
- public Polynom() // Конструктор класса, задающий пустой полином
- {
- degrees = new Dictionary<int, double>();
- }
- public Polynom(List<double> listDegrees) /* Конструктор класса, задающий полином,
- коэффициенты которого лежат в листе и соответствуют степеням x начиная с x^0 по порядку
- Кэф x^0, Кэф x^1...
- */
- {
- degrees = new Dictionary<int, double>();
- for(int i = 0; i < listDegrees.Count; i++)
- {
- degrees[i] = listDegrees[i];
- }
- }
- private void Add(int degree, double value) // Прибавление к полиному одночлена x^degree * value
- {
- if (!degrees.ContainsKey(degree)) //Если такой степени не встречалось, говорим, что кэф при ней был равен нулю.
- degrees[degree] = 0;
- degrees[degree] += value; // прибавляем к соответствующему кэфу value
- }
- public void AddPolynom(Polynom polynom) // Прибавление полинома к данному полиному
- {
- foreach(var e in polynom.degrees) // Складываем все степени
- {
- this.Add(e.Key, e.Value);
- }
- }
- public void SubPolynom(Polynom polynom) //Вычитание полинома из данного полинома
- {
- foreach (var e in polynom.degrees) //Вычитаем все степени
- {
- this.Add(e.Key, -e.Value);
- }
- }
- public void Save(string filename) //Сохранение в файл
- {
- var lines = new List<string>(); //Строки, которые мы сохраним в файл
- foreach(var e in degrees)
- {
- lines.Add(String.Format("{0} {1}", e.Key, e.Value)); // каждый одночлен представится в виде строки "{Степень} {Кэф при степени}"
- }
- System.IO.File.WriteAllLines(filename, lines); //Запись в файл этих строк
- }
- public static Polynom Load(string filename) //Загрузка из файла
- {
- var lines = System.IO.File.ReadAllLines(filename); //Считали строки
- Polynom polynom = new Polynom(); //Задали пустой полином
- foreach (var line in lines) //Прибавили к нему каждый из одночленов
- {
- var keyValue = line.Split();
- polynom.Add(int.Parse(keyValue[0]), double.Parse(keyValue[1]));
- }
- return polynom;
- }
- public override string ToString() // переопределили строковое представление, чтобы удобно печатать на консоль
- {
- var Monomials = new List<string>(); //Создали список одночленов
- foreach (var e in degrees)
- {
- Monomials.Add(String.Format("({0})*x^{1}", e.Value, e.Key)); //положили в него строки данного формата для каждого многочлена
- }
- return String.Join(" + ", Monomials); // Записали одночлены через + в одну строку и вернули ее
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- var a = new Polynom(new List<double>() { 1, 2, 3, 2 }); //задали многочлены
- var b = new Polynom(new List<double>() { 1, 1, 0, 1 });
- Console.WriteLine(a); //напечатали на консоль
- Console.WriteLine(b);
- a.AddPolynom(b); //прибавили к a b
- Console.WriteLine(a);
- a.SubPolynom(b); //Вычли из a b
- Console.WriteLine(a);
- a.Save("1.txt"); // Сохранили a
- var c = Polynom.Load("1.txt"); // Загрузили его в c
- Console.WriteLine(c);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement