Объяснить код - C# (191236)

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

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

Пожалуйста, объясните код, а то я ничего не понимаю. Если не трудно, то прям каждую строчку. За раннее благодарю! Могу предоставить только само задание: Описать базовый класс Строка в соответствии с вариантом 3. Описать производный от Строка класс Десятичная_строка. Строки данного класса могут содержать только символы десятичных цифр и символы - и +, задающие знак числа. Символы - или + могут находиться только в первой позиции числа, причем символ + может отсутствовать, в этом случае число считается положительным. Если в составе инициализирующей строки будут встречены любые символы, отличные от допустимых, класс Десятичнаястрока принимает нулевое значение. Содержимое данных строк рассматривается как десятичное число. Для класса определить следующие методы: • конструктор, принимающий в качестве параметра число; • арифметическая разность строк; • проверка на больше (по значению); • проверка на меньше (по значению). А вот сам код:
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace ConsoleApplication1
  6. {
  7. class Строка
  8. {
  9. protected string s;
  10. protected int n;
  11. protected int nb;
  12. public Строка()
  13. {
  14. this.s = "";
  15. this.n = 0;
  16. this.nb = 0;
  17. }
  18. public Строка(string s1)
  19. {
  20. this.s = s1;
  21. this.n = s1.Length;
  22. this.nb = s1.Length;
  23. }
  24. public Строка(char s1)
  25. {
  26. this.s = Convert.ToString(s1);
  27. this.n = 1;
  28. this.nb = 2;
  29. }
  30. public int Длина()
  31. {
  32. return this.n;
  33. }
  34. public int ДлинаБ()
  35. {
  36. return this.n * 2;
  37. }
  38. public void Отчистить()
  39. {
  40. this.s = "";
  41. this.n = 0;
  42. this.nb = 0;
  43. }
  44. }
  45. class ДесятичСтр : Строка
  46. {
  47. public ДесятичСтр(String s1)
  48. {
  49. for (int i = 0; i < s1.Length; ++i)
  50. {
  51. if (((Convert.ToInt32(s1[i]) >= 49) && (Convert.ToInt32(s1[i]) <= 57)) || (Convert.ToInt32(s1[i]) == 45) || (Convert.ToInt32(s1[i]) == 43))
  52. {
  53. this.s = this.s + s1[i];
  54. this.n++;
  55. }
  56. else
  57. {
  58. this.s = "0";
  59. this.n = 1;
  60. break;
  61. }
  62. }
  63. }
  64. public double Значение()
  65. {
  66. double asum = 0;
  67. int z = 0, n_ = 0;
  68. if (this.s[0] == '-') { z = 1; n_ = 1; }
  69. else if (this.s[0] == '+') n_ = 1;
  70. for (int i = n_; i < this.n; ++i)
  71. {
  72. asum = asum + Char.GetNumericValue(s[i]) * (Math.Pow(10, n - i - 1));
  73. }
  74. if (z == 1)
  75. asum = asum * (-1);
  76. return asum;
  77. }
  78. public static void Измзнак(ДесятичСтр a)
  79. {
  80. if (a.Значение() > 0)
  81. {
  82. if (Convert.ToInt32(a.s[0]) == 43)
  83. {
  84. a.s = '-' + a.s.Remove(0, 1);
  85. }
  86. else
  87. {
  88. a.s = '-' + a.s;
  89. }
  90. }
  91. else
  92. {
  93. a.s = '+' + a.s.Remove(0, 1);
  94. }
  95. }
  96. public void Присвоить(ДесятичСтр s1)
  97. {
  98. this.s = s1.s;
  99. this.n = s1.s.Length;
  100. }
  101. public static ДесятичСтр operator -(ДесятичСтр s1, ДесятичСтр s2)
  102. {
  103. return new ДесятичСтр(Convert.ToString(s1.Значение() - s2.Значение()));
  104. }
  105. public static bool operator ==(ДесятичСтр a, ДесятичСтр b)
  106. {
  107. return a.Значение() == b.Значение();
  108. }
  109. public static bool operator !=(ДесятичСтр a, ДесятичСтр b)
  110. {
  111. return !(a.Значение() == b.Значение());
  112. }
  113. public override bool Equals(object obj)
  114. {
  115. if (obj == null || GetType() != obj.GetType()) return false;
  116. ДесятичСтр temp = (ДесятичСтр)obj;
  117. return this.s == temp.s;
  118. }
  119. public override int GetHashCode()
  120. {
  121. return s.GetHashCode();
  122. }
  123. public static bool operator >(ДесятичСтр s1, ДесятичСтр s2)
  124. {
  125. if (s1.Значение() > s2.Значение())
  126. return true;
  127. else
  128. return false;
  129. }
  130. public static bool operator <(ДесятичСтр s1, ДесятичСтр s2)
  131. {
  132. if (s1.Значение() < s2.Значение())
  133. return true;
  134. else
  135. return false;
  136. }
  137. public string Содержимое
  138. {
  139. get
  140. {
  141. return this.s;
  142. }
  143. }
  144. }
  145. class Program
  146. {
  147. static void Main(string[] args)
  148. {
  149. Console.Write("Введите 3 строки:");
  150. string w = Console.ReadLine();
  151. string w1 = Console.ReadLine();
  152. string w2 = Console.ReadLine();
  153. ДесятичСтр s = new ДесятичСтр(w);
  154. ДесятичСтр s1 = new ДесятичСтр(w1);
  155. ДесятичСтр s2 = new ДесятичСтр(w2);
  156. ДесятичСтр s3 = new ДесятичСтр("s");
  157. Console.WriteLine(s.Значение());
  158. Console.WriteLine(s2.Значение());
  159. Console.WriteLine(s1.Значение());
  160. Console.WriteLine(s3.Значение());
  161. if (s1 == s) Console.WriteLine("{0}={1}", s1.Значение(), s.Значение());
  162. else Console.WriteLine("{0}!={1}", s1.Значение(), s.Значение());
  163. if (s1 > s) Console.WriteLine("{0} > {1}", s1.Значение(), s.Значение());
  164. else Console.WriteLine("{0} > {1}", s.Значение(), s1.Значение());
  165. ДесятичСтр.Измзнак(s);
  166. Console.WriteLine(s.Содержимое);
  167. s.Присвоить(s2);
  168. Console.WriteLine(s.Содержимое);
  169. Console.WriteLine("{0} - ({1}) = {2}", s.Значение(), s1.Значение(), (s - s1).Значение());
  170. Console.ReadLine();
  171. }
  172. }
  173. }

Решение задачи: «Объяснить код»

textual
Листинг программы
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5.  
  6. namespace ConsoleApplication1
  7. {
  8. class Строка
  9. {
  10. //==============объявление полей класа ====================
  11. protected string s;..
  12. protected int n;
  13. protected int nb;
  14. //==================================
  15.  
  16. public Строка()// rКонструктор по умолчанию
  17. {
  18. this.s = "";  // инициализация полей класса
  19. this.n = 0;
  20. this.nb = 0;
  21. }
  22. public Строка(string s1) //параметризированый конструктор(с параметром строкового типа)
  23. {
  24. this.s = s1;               //инициализация строкового поля класса передаваемой строкой
  25. this.n = s1.Length;    //инициализация переменных длиной передаваемой строки
  26. this.nb = s1.Length;
  27. }
  28. public Строка(char s1)   //параметризированый конструктор(с параметром символьного типа)
  29. {
  30. this.s = Convert.ToString(s1);  // преобразование символьной переменной в строкою
  31. this.n = 1;
  32. this.nb = 2;
  33. }
  34. public int Длина()      //геттер(возвращает значение свойства класса) Длины
  35. {
  36. return this.n;
  37. }
  38. public int ДлинаБ()  //геттер длиныБ
  39. {
  40. return this.n * 2;
  41. }
  42. public void Отчистить()  //метод очищения полей класса
  43. {
  44. this.s = "";
  45. this.n = 0;
  46. this.nb = 0;
  47. }
  48. }
  49.  
  50.  
  51. class ДесятичСтр : Строка
  52. {
  53. public ДесятичСтр(String s1)//параметризированый конструктор (принимающий строку)
  54. {
  55. //================вот эта интересная конструкция фильтрует символы строки оставляя только числа от 1 до 9 и -,+ но конструкция странная после первого несовпадения строка равна "0" =============================================
  56. for (int i = 0; i < s1.Length; ++i)//цикл
  57. {
  58. if (((Convert.ToInt32(s1[i]) >= 49) && (Convert.ToInt32(s1[i]) <= 57)) || (Convert.ToInt32(s1[i]) == 45) || (Convert.ToInt32(s1[i]) == 43))
  59. {
  60. this.s = this.s + s1[i];
  61. this.n++;
  62. }
  63. else
  64. {
  65. this.s = "0";
  66. this.n = 1;
  67. break;
  68. }
  69. //=============================================================
  70. }
  71. }
  72. public double Значение()//эту эресь я не понял)
  73. {
  74. double asum = 0;
  75. int z = 0, n_ = 0;
  76. if (this.s[0] == '-') { z = 1; n_ = 1; }
  77. else if (this.s[0] == '+') n_ = 1;
  78. for (int i = n_; i < this.n; ++i)
  79. {
  80. asum = asum + Char.GetNumericValue(s[i]) * (Math.Pow(10, n - i - 1));
  81. }
  82. if (z == 1)
  83. asum = asum * (-1);
  84. return asum;
  85. }
  86. public static void Измзнак(ДесятичСтр a)//меняет первый знак в строке если он - или+
  87. {
  88. if (a.Значение() > 0)
  89. {
  90. if (Convert.ToInt32(a.s[0]) == 43)
  91. {
  92. a.s = '-' + a.s.Remove(0, 1);
  93. }
  94. else
  95. {
  96. a.s = '-' + a.s;
  97. }
  98. }
  99. else
  100. {
  101. a.s = '+' + a.s.Remove(0, 1);
  102. }
  103. }
  104. public void Присвоить(ДесятичСтр s1)//присваивает значение полей класса полями другого такогоже
  105. {
  106. this.s = s1.s;
  107. this.n = s1.s.Length;
  108. }
  109.  
  110. public static ДесятичСтр operator -(ДесятичСтр s1, ДесятичСтр s2) // перегрузка оператора "-"  для двух объектов класа
  111. {
  112. return new ДесятичСтр(Convert.ToString(s1.Значение() - s2.Значение()));
  113. }
  114.  
  115. public static bool operator ==(ДесятичСтр a, ДесятичСтр b) // перегрузка оператора "=="  для двух объектов класа
  116. {
  117. return a.Значение() == b.Значение();
  118. }
  119.  
  120. public static bool operator !=(ДесятичСтр a, ДесятичСтр b)// перегрузка оператора "1!="  для двух объектов класа
  121. {
  122. return !(a.Значение() == b.Значение());
  123. }
  124. public override bool Equals(object obj)//Перегрузка метода Equals
  125. {
  126. if (obj == null || GetType() != obj.GetType()) return false;
  127. ДесятичСтр temp = (ДесятичСтр)obj;
  128. return this.s == temp.s;
  129. }
  130. public override int GetHashCode() //перегрузка метода GetHashCode()
  131. {
  132. return s.GetHashCode();
  133. }
  134.  
  135. public static bool operator >(ДесятичСтр s1, ДесятичСтр s2) //перегрузка оператор >
  136. {
  137. if (s1.Значение() > s2.Значение())
  138. return true;
  139. else
  140. return false;
  141. }
  142. public static bool operator <(ДесятичСтр s1, ДесятичСтр s2) //перегрузка оператор <
  143. {
  144. if (s1.Значение() < s2.Значение())
  145. return true;
  146. else
  147. return false;
  148. }
  149. public string Содержимое // геттер для получения строки
  150. {
  151. get
  152. {
  153. return this.s;
  154. }
  155. }
  156.  
  157. }
  158. class Program // сама програма
  159. {
  160. static void Main(string[] args)
  161. {
  162. //==============ввод трех строк=======
  163. Console.Write("Введите 3 строки:");
  164. string w = Console.ReadLine();
  165. string w1 = Console.ReadLine();
  166. string w2 = Console.ReadLine();
  167. //=====================
  168.  
  169. //==============создание 4-х екземпляров класса десятичной строки=======
  170. ДесятичСтр s = new ДесятичСтр(w);
  171. ДесятичСтр s1 = new ДесятичСтр(w1);
  172. ДесятичСтр s2 = new ДесятичСтр(w2);
  173. ДесятичСтр s3 = new ДесятичСтр("s");
  174. //=============================
  175. //==============вывод значений 4-х обьектов=======
  176. Console.WriteLine(s.Значение());
  177. Console.WriteLine(s2.Значение());
  178. Console.WriteLine(s1.Значение());
  179. Console.WriteLine(s3.Значение());
  180. //========================================
  181. //==============ввод тут проверка на равенство неравенство s1 и s , и на больше меньше s1 и s с выводом результата=======
  182. if (s1 == s) Console.WriteLine("{0}={1}", s1.Значение(), s.Значение());
  183. else Console.WriteLine("{0}!={1}", s1.Значение(), s.Значение());
  184. if (s1 > s) Console.WriteLine("{0} > {1}", s1.Значение(), s.Значение());
  185. else Console.WriteLine("{0} > {1}", s.Значение(), s1.Значение());
  186.  
  187. //изменение знака s
  188. ДесятичСтр.Измзнак(s);
  189. Console.WriteLine(s.Содержимое); // вывод s строки
  190. s.Присвоить(s2); // присвоение s содержимой строки s2
  191. Console.WriteLine(s.Содержимое);  // вывод s строки
  192. Console.WriteLine("{0} - ({1}) = {2}", s.Значение(), s1.Значение(), (s - s1).Значение()); // вычитание значений s и s1
  193. Console.ReadLine();
  194. }
  195. }
  196. }

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


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

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

15   голосов , оценка 3.467 из 5

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

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

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