.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;
            }
        }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

6   голосов , оценка 4.167 из 5
Похожие ответы