.NET 2.x Написать функцию генерирования случайного вектора - C#
Формулировка задачи:
1)Написать функцию генерирования случайного вектора 1х5 при равномерном распределении в диапазоне целых [0,255].
2)Cпроектировать базовый класс , предусмотреть не менее 2х полей и 1 виртуального метода . Наследовать дочерние классы , добавить не менее 2 новых полей и перегрузить базовый метод.
Заранее спасибо.
Решение задачи: «.NET 2.x Написать функцию генерирования случайного вектора»
textual
Листинг программы
public class RVector : ICloneable { private int ndim; private double[] vector; public RVector(int ndim) { this.ndim = ndim; this.vector = new double[ndim]; for (int i = 0; i < ndim; i++) { vector[i] = 0.0; } } public RVector(double[] vector) { this.ndim = vector.Length; this.vector = vector; } public double this[int i] { get { if (i < 0 || i > ndim) { throw new Exception("Requested vector index is out of range!"); } return vector[i]; } set { vector[i] = value; } } public int GetVectorSize { get { return ndim; } } public RVector Clone() { RVector v = new RVector(vector); v.vector = (double[])vector.Clone(); return v; } object ICloneable.Clone() { return Clone(); } public RVector SwapVectorEntries(int m, int n) { double temp = vector[m]; vector[m] = vector[n]; vector[n] = temp; return new RVector(vector); } public override string ToString() { string str = "("; for (int i = 0; i < ndim - 1; i++) { str += vector[i].ToString() + ", "; } str += vector[ndim - 1].ToString() + ")"; return str; } public override bool Equals(object obj) { return (obj is RVector) && this.Equals((RVector)obj); } public bool Equals(RVector v) { return vector == v.vector; } public override int GetHashCode() { return vector.GetHashCode(); } public static bool operator ==(RVector v1, RVector v2) { return v1.Equals(v2); } public static bool operator !=(RVector v1, RVector v2) { return !v1.Equals(v2); } public static RVector operator +(RVector v) { return v; } public static RVector operator +(RVector v1, RVector v2) { RVector result = new RVector(v1.ndim); for (int i = 0; i < v1.ndim; i++) { result[i] = v1[i] + v2[i]; } return result; } public static RVector operator -(RVector v) { double[] result = new double[v.ndim]; for (int i = 0; i < v.ndim; i++) { result[i] = -v[i]; } return new RVector(result); } public static RVector operator -(RVector v1, RVector v2) { RVector result = new RVector(v1.ndim); for (int i = 0; i < v1.ndim; i++) { result[i] = v1[i] - v2[i]; } return result; } public static RVector operator *(RVector v, double d) { RVector result = new RVector(v.ndim); for (int i = 0; i < v.ndim; i++) { result[i] = v[i] * d; } return result; } public static RVector operator *(double d, RVector v) { RVector result = new RVector(v.ndim); for (int i = 0; i < v.ndim; i++) { result[i] = d * v[i]; } return result; } public static RVector operator /(RVector v, double d) { RVector result = new RVector(v.ndim); for (int i = 0; i < v.ndim; i++) { result[i] = v[i] / d; } return result; } public static RVector operator /(double d, RVector v) { RVector result = new RVector(v.ndim); for (int i = 0; i < v.ndim; i++) { result[i] = v[i] / d; } return result; } public static double DotProduct(RVector v1, RVector v2) { double result = 0.0; for (int i = 0; i < v1.ndim; i++) { result += v1[i] * v2[i]; } return result; } public double GetNorm() { double result = 0.0; for (int i = 0; i < ndim; i++) { result += vector[i] * vector[i]; } return Math.Sqrt(result); } public double GetNormSquare() { double result = 0.0; for (int i = 0; i < ndim; i++) { result += vector[i] * vector[i]; } return result; } public void Normalize() { double norm = GetNorm(); if (norm == 0) { throw new Exception("Tried to normalize a vector with norm of zero!"); } for (int i = 0; i < ndim; i++) { vector[i] /= norm; } } public RVector GetUnitVector() { RVector result = new RVector(vector); result.Normalize(); return result; } public static RVector CrossProduct(RVector v1, RVector v2) { if (v1.ndim != 3) { throw new Exception("Vector v1 must be 3 dimensional!"); } if (v2.ndim != 3) { throw new Exception("Vector v2 must be 3 dimensional!"); } RVector result = new RVector(3); result[0] = v1[1] * v2[2] - v1[2] * v2[1]; result[1] = v1[2] * v2[0] - v1[0] * v2[2]; result[2] = v1[0] * v2[1] - v1[1] * v2[0]; return result; } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д