.NET 2.x Написать функцию генерирования случайного вектора - C#

Узнай цену своей работы

Формулировка задачи:

1)Написать функцию генерирования случайного вектора 1х5 при равномерном распределении в диапазоне целых [0,255]. 2)Cпроектировать базовый класс , предусмотреть не менее 2х полей и 1 виртуального метода . Наследовать дочерние классы , добавить не менее 2 новых полей и перегрузить базовый метод. Заранее спасибо.

Решение задачи: «.NET 2.x Написать функцию генерирования случайного вектора»

textual
Листинг программы
  1.         public class RVector : ICloneable
  2.         {
  3.             private int ndim;
  4.             private double[] vector;
  5.  
  6.             public RVector(int ndim)
  7.             {
  8.                 this.ndim = ndim;
  9.                 this.vector = new double[ndim];
  10.                 for (int i = 0; i < ndim; i++)
  11.                 {
  12.                     vector[i] = 0.0;
  13.                 }
  14.             }
  15.  
  16.             public RVector(double[] vector)
  17.             {
  18.                 this.ndim = vector.Length;
  19.                 this.vector = vector;
  20.             }
  21.  
  22.             public double this[int i]
  23.             {
  24.                 get
  25.                 {
  26.                     if (i < 0 || i > ndim)
  27.                     {
  28.                         throw new Exception("Requested vector index is out of range!");
  29.                     }
  30.                     return vector[i];
  31.                 }
  32.                 set { vector[i] = value; }
  33.             }
  34.  
  35.             public int GetVectorSize
  36.             {
  37.                 get { return ndim; }
  38.             }
  39.  
  40.             public RVector Clone()
  41.             {
  42.                 RVector v = new RVector(vector);
  43.                 v.vector = (double[])vector.Clone();
  44.                 return v;
  45.             }
  46.  
  47.             object ICloneable.Clone()
  48.             {
  49.                 return Clone();
  50.             }
  51.  
  52.             public RVector SwapVectorEntries(int m, int n)
  53.             {
  54.                 double temp = vector[m];
  55.                 vector[m] = vector[n];
  56.                 vector[n] = temp;
  57.                 return new RVector(vector);
  58.             }
  59.  
  60.             public override string ToString()
  61.             {
  62.                 string str = "(";
  63.                 for (int i = 0; i < ndim - 1; i++)
  64.                 {
  65.                     str += vector[i].ToString() + ", ";
  66.                 }
  67.                 str += vector[ndim - 1].ToString() + ")";
  68.                 return str;
  69.             }
  70.  
  71.             public override bool Equals(object obj)
  72.             {
  73.                 return (obj is RVector) && this.Equals((RVector)obj);
  74.             }
  75.  
  76.             public bool Equals(RVector v)
  77.             {
  78.                 return vector == v.vector;
  79.             }
  80.  
  81.             public override int GetHashCode()
  82.             {
  83.                 return vector.GetHashCode();
  84.             }
  85.  
  86.             public static bool operator ==(RVector v1, RVector v2)
  87.             {
  88.                 return v1.Equals(v2);
  89.             }
  90.  
  91.             public static bool operator !=(RVector v1, RVector v2)
  92.             {
  93.                 return !v1.Equals(v2);
  94.             }
  95.  
  96.             public static RVector operator +(RVector v)
  97.             {
  98.                 return v;
  99.             }
  100.  
  101.             public static RVector operator +(RVector v1, RVector v2)
  102.             {
  103.                 RVector result = new RVector(v1.ndim);
  104.                 for (int i = 0; i < v1.ndim; i++)
  105.                 {
  106.                     result[i] = v1[i] + v2[i];
  107.                 }
  108.                 return result;
  109.             }
  110.  
  111.             public static RVector operator -(RVector v)
  112.             {
  113.                 double[] result = new double[v.ndim];
  114.                 for (int i = 0; i < v.ndim; i++)
  115.                 {
  116.                     result[i] = -v[i];
  117.                 }
  118.                 return new RVector(result);
  119.             }
  120.  
  121.             public static RVector operator -(RVector v1, RVector v2)
  122.             {
  123.                 RVector result = new RVector(v1.ndim);
  124.                 for (int i = 0; i < v1.ndim; i++)
  125.                 {
  126.                     result[i] = v1[i] - v2[i];
  127.                 }
  128.                 return result;
  129.             }
  130.  
  131.             public static RVector operator *(RVector v, double d)
  132.             {
  133.                 RVector result = new RVector(v.ndim);
  134.                 for (int i = 0; i < v.ndim; i++)
  135.                 {
  136.                     result[i] = v[i] * d;
  137.                 }
  138.                 return result;
  139.             }
  140.  
  141.             public static RVector operator *(double d, RVector v)
  142.             {
  143.                 RVector result = new RVector(v.ndim);
  144.                 for (int i = 0; i < v.ndim; i++)
  145.                 {
  146.                     result[i] = d * v[i];
  147.                 }
  148.                 return result;
  149.             }
  150.  
  151.             public static RVector operator /(RVector v, double d)
  152.             {
  153.                 RVector result = new RVector(v.ndim);
  154.                 for (int i = 0; i < v.ndim; i++)
  155.                 {
  156.                     result[i] = v[i] / d;
  157.                 }
  158.                 return result;
  159.             }
  160.  
  161.             public static RVector operator /(double d, RVector v)
  162.             {
  163.                 RVector result = new RVector(v.ndim);
  164.                 for (int i = 0; i < v.ndim; i++)
  165.                 {
  166.                     result[i] = v[i] / d;
  167.                 }
  168.                 return result;
  169.             }
  170.  
  171.             public static double DotProduct(RVector v1, RVector v2)
  172.             {
  173.                 double result = 0.0;
  174.                 for (int i = 0; i < v1.ndim; i++)
  175.                 {
  176.                     result += v1[i] * v2[i];
  177.                 }
  178.                 return result;
  179.             }
  180.  
  181.             public double GetNorm()
  182.             {
  183.                 double result = 0.0;
  184.                 for (int i = 0; i < ndim; i++)
  185.                 {
  186.                     result += vector[i] * vector[i];
  187.                 }
  188.                 return Math.Sqrt(result);
  189.             }
  190.  
  191.             public double GetNormSquare()
  192.             {
  193.                 double result = 0.0;
  194.                 for (int i = 0; i < ndim; i++)
  195.                 {
  196.                     result += vector[i] * vector[i];
  197.                 }
  198.                 return result;
  199.             }
  200.  
  201.             public void Normalize()
  202.             {
  203.                 double norm = GetNorm();
  204.                 if (norm == 0)
  205.                 {
  206.                     throw new Exception("Tried to normalize a vector with norm of zero!");
  207.                 }
  208.                 for (int i = 0; i < ndim; i++)
  209.                 {
  210.                     vector[i] /= norm;
  211.                 }
  212.             }
  213.  
  214.             public RVector GetUnitVector()
  215.             {
  216.                 RVector result = new RVector(vector);
  217.                 result.Normalize();
  218.                 return result;
  219.             }
  220.  
  221.             public static RVector CrossProduct(RVector v1, RVector v2)
  222.             {
  223.                 if (v1.ndim != 3)
  224.                 {
  225.                     throw new Exception("Vector v1 must be 3 dimensional!");
  226.                 }
  227.                 if (v2.ndim != 3)
  228.                 {
  229.                     throw new Exception("Vector v2 must be 3 dimensional!");
  230.                 }
  231.                 RVector result = new RVector(3);
  232.                 result[0] = v1[1] * v2[2] - v1[2] * v2[1];
  233.                 result[1] = v1[2] * v2[0] - v1[0] * v2[2];
  234.                 result[2] = v1[0] * v2[1] - v1[1] * v2[0];
  235.                 return result;
  236.             }
  237.         }

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


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

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

6   голосов , оценка 4.167 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы