В общем программа выполняет действия с полиномами. Мне не совсем понятен каждый шаг. Состоит из 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; } } }
|
|