Объяснить код - C# (191236)
Формулировка задачи:
Пожалуйста, объясните код, а то я ничего не понимаю. Если не трудно, то прям каждую строчку. За раннее благодарю!
Могу предоставить только само задание:
Описать базовый класс Строка в соответствии с вариантом 3.
Описать производный от Строка класс Десятичная_строка.
Строки данного класса могут содержать только символы десятичных цифр и символы
- и +, задающие знак числа. Символы - или + могут находиться только
в первой позиции числа, причем символ + может отсутствовать, в этом случае
число считается положительным. Если в составе инициализирующей строки будут
встречены любые символы, отличные от допустимых, класс Десятичнаястрока
принимает нулевое значение. Содержимое данных строк рассматривается как
десятичное число.
Для класса определить следующие методы:
• конструктор, принимающий в качестве параметра число;
• арифметическая разность строк;
• проверка на больше (по значению);
• проверка на меньше (по значению).
А вот сам код:
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace ConsoleApplication1
- {
- class Строка
- {
- protected string s;
- protected int n;
- protected int nb;
- public Строка()
- {
- this.s = "";
- this.n = 0;
- this.nb = 0;
- }
- public Строка(string s1)
- {
- this.s = s1;
- this.n = s1.Length;
- this.nb = s1.Length;
- }
- public Строка(char s1)
- {
- this.s = Convert.ToString(s1);
- this.n = 1;
- this.nb = 2;
- }
- public int Длина()
- {
- return this.n;
- }
- public int ДлинаБ()
- {
- return this.n * 2;
- }
- public void Отчистить()
- {
- this.s = "";
- this.n = 0;
- this.nb = 0;
- }
- }
- class ДесятичСтр : Строка
- {
- public ДесятичСтр(String s1)
- {
- for (int i = 0; i < s1.Length; ++i)
- {
- if (((Convert.ToInt32(s1[i]) >= 49) && (Convert.ToInt32(s1[i]) <= 57)) || (Convert.ToInt32(s1[i]) == 45) || (Convert.ToInt32(s1[i]) == 43))
- {
- this.s = this.s + s1[i];
- this.n++;
- }
- else
- {
- this.s = "0";
- this.n = 1;
- break;
- }
- }
- }
- public double Значение()
- {
- double asum = 0;
- int z = 0, n_ = 0;
- if (this.s[0] == '-') { z = 1; n_ = 1; }
- else if (this.s[0] == '+') n_ = 1;
- for (int i = n_; i < this.n; ++i)
- {
- asum = asum + Char.GetNumericValue(s[i]) * (Math.Pow(10, n - i - 1));
- }
- if (z == 1)
- asum = asum * (-1);
- return asum;
- }
- public static void Измзнак(ДесятичСтр a)
- {
- if (a.Значение() > 0)
- {
- if (Convert.ToInt32(a.s[0]) == 43)
- {
- a.s = '-' + a.s.Remove(0, 1);
- }
- else
- {
- a.s = '-' + a.s;
- }
- }
- else
- {
- a.s = '+' + a.s.Remove(0, 1);
- }
- }
- public void Присвоить(ДесятичСтр s1)
- {
- this.s = s1.s;
- this.n = s1.s.Length;
- }
- public static ДесятичСтр operator -(ДесятичСтр s1, ДесятичСтр s2)
- {
- return new ДесятичСтр(Convert.ToString(s1.Значение() - s2.Значение()));
- }
- public static bool operator ==(ДесятичСтр a, ДесятичСтр b)
- {
- return a.Значение() == b.Значение();
- }
- public static bool operator !=(ДесятичСтр a, ДесятичСтр b)
- {
- return !(a.Значение() == b.Значение());
- }
- public override bool Equals(object obj)
- {
- if (obj == null || GetType() != obj.GetType()) return false;
- ДесятичСтр temp = (ДесятичСтр)obj;
- return this.s == temp.s;
- }
- public override int GetHashCode()
- {
- return s.GetHashCode();
- }
- public static bool operator >(ДесятичСтр s1, ДесятичСтр s2)
- {
- if (s1.Значение() > s2.Значение())
- return true;
- else
- return false;
- }
- public static bool operator <(ДесятичСтр s1, ДесятичСтр s2)
- {
- if (s1.Значение() < s2.Значение())
- return true;
- else
- return false;
- }
- public string Содержимое
- {
- get
- {
- return this.s;
- }
- }
- }
- class Program
- {
- static void Main(string[] args)
- {
- Console.Write("Введите 3 строки:");
- string w = Console.ReadLine();
- string w1 = Console.ReadLine();
- string w2 = Console.ReadLine();
- ДесятичСтр s = new ДесятичСтр(w);
- ДесятичСтр s1 = new ДесятичСтр(w1);
- ДесятичСтр s2 = new ДесятичСтр(w2);
- ДесятичСтр s3 = new ДесятичСтр("s");
- Console.WriteLine(s.Значение());
- Console.WriteLine(s2.Значение());
- Console.WriteLine(s1.Значение());
- Console.WriteLine(s3.Значение());
- if (s1 == s) Console.WriteLine("{0}={1}", s1.Значение(), s.Значение());
- else Console.WriteLine("{0}!={1}", s1.Значение(), s.Значение());
- if (s1 > s) Console.WriteLine("{0} > {1}", s1.Значение(), s.Значение());
- else Console.WriteLine("{0} > {1}", s.Значение(), s1.Значение());
- ДесятичСтр.Измзнак(s);
- Console.WriteLine(s.Содержимое);
- s.Присвоить(s2);
- Console.WriteLine(s.Содержимое);
- Console.WriteLine("{0} - ({1}) = {2}", s.Значение(), s1.Значение(), (s - s1).Значение());
- Console.ReadLine();
- }
- }
- }
Решение задачи: «Объяснить код»
textual
Листинг программы
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- namespace ConsoleApplication1
- {
- class Строка
- {
- //==============объявление полей класа ====================
- protected string s;..
- protected int n;
- protected int nb;
- //==================================
- public Строка()// rКонструктор по умолчанию
- {
- this.s = ""; // инициализация полей класса
- this.n = 0;
- this.nb = 0;
- }
- public Строка(string s1) //параметризированый конструктор(с параметром строкового типа)
- {
- this.s = s1; //инициализация строкового поля класса передаваемой строкой
- this.n = s1.Length; //инициализация переменных длиной передаваемой строки
- this.nb = s1.Length;
- }
- public Строка(char s1) //параметризированый конструктор(с параметром символьного типа)
- {
- this.s = Convert.ToString(s1); // преобразование символьной переменной в строкою
- this.n = 1;
- this.nb = 2;
- }
- public int Длина() //геттер(возвращает значение свойства класса) Длины
- {
- return this.n;
- }
- public int ДлинаБ() //геттер длиныБ
- {
- return this.n * 2;
- }
- public void Отчистить() //метод очищения полей класса
- {
- this.s = "";
- this.n = 0;
- this.nb = 0;
- }
- }
- class ДесятичСтр : Строка
- {
- public ДесятичСтр(String s1)//параметризированый конструктор (принимающий строку)
- {
- //================вот эта интересная конструкция фильтрует символы строки оставляя только числа от 1 до 9 и -,+ но конструкция странная после первого несовпадения строка равна "0" =============================================
- for (int i = 0; i < s1.Length; ++i)//цикл
- {
- if (((Convert.ToInt32(s1[i]) >= 49) && (Convert.ToInt32(s1[i]) <= 57)) || (Convert.ToInt32(s1[i]) == 45) || (Convert.ToInt32(s1[i]) == 43))
- {
- this.s = this.s + s1[i];
- this.n++;
- }
- else
- {
- this.s = "0";
- this.n = 1;
- break;
- }
- //=============================================================
- }
- }
- public double Значение()//эту эресь я не понял)
- {
- double asum = 0;
- int z = 0, n_ = 0;
- if (this.s[0] == '-') { z = 1; n_ = 1; }
- else if (this.s[0] == '+') n_ = 1;
- for (int i = n_; i < this.n; ++i)
- {
- asum = asum + Char.GetNumericValue(s[i]) * (Math.Pow(10, n - i - 1));
- }
- if (z == 1)
- asum = asum * (-1);
- return asum;
- }
- public static void Измзнак(ДесятичСтр a)//меняет первый знак в строке если он - или+
- {
- if (a.Значение() > 0)
- {
- if (Convert.ToInt32(a.s[0]) == 43)
- {
- a.s = '-' + a.s.Remove(0, 1);
- }
- else
- {
- a.s = '-' + a.s;
- }
- }
- else
- {
- a.s = '+' + a.s.Remove(0, 1);
- }
- }
- public void Присвоить(ДесятичСтр s1)//присваивает значение полей класса полями другого такогоже
- {
- this.s = s1.s;
- this.n = s1.s.Length;
- }
- public static ДесятичСтр operator -(ДесятичСтр s1, ДесятичСтр s2) // перегрузка оператора "-" для двух объектов класа
- {
- return new ДесятичСтр(Convert.ToString(s1.Значение() - s2.Значение()));
- }
- public static bool operator ==(ДесятичСтр a, ДесятичСтр b) // перегрузка оператора "==" для двух объектов класа
- {
- return a.Значение() == b.Значение();
- }
- public static bool operator !=(ДесятичСтр a, ДесятичСтр b)// перегрузка оператора "1!=" для двух объектов класа
- {
- return !(a.Значение() == b.Значение());
- }
- public override bool Equals(object obj)//Перегрузка метода Equals
- {
- if (obj == null || GetType() != obj.GetType()) return false;
- ДесятичСтр temp = (ДесятичСтр)obj;
- return this.s == temp.s;
- }
- public override int GetHashCode() //перегрузка метода GetHashCode()
- {
- return s.GetHashCode();
- }
- public static bool operator >(ДесятичСтр s1, ДесятичСтр s2) //перегрузка оператор >
- {
- if (s1.Значение() > s2.Значение())
- return true;
- else
- return false;
- }
- public static bool operator <(ДесятичСтр s1, ДесятичСтр s2) //перегрузка оператор <
- {
- if (s1.Значение() < s2.Значение())
- return true;
- else
- return false;
- }
- public string Содержимое // геттер для получения строки
- {
- get
- {
- return this.s;
- }
- }
- }
- class Program // сама програма
- {
- static void Main(string[] args)
- {
- //==============ввод трех строк=======
- Console.Write("Введите 3 строки:");
- string w = Console.ReadLine();
- string w1 = Console.ReadLine();
- string w2 = Console.ReadLine();
- //=====================
- //==============создание 4-х екземпляров класса десятичной строки=======
- ДесятичСтр s = new ДесятичСтр(w);
- ДесятичСтр s1 = new ДесятичСтр(w1);
- ДесятичСтр s2 = new ДесятичСтр(w2);
- ДесятичСтр s3 = new ДесятичСтр("s");
- //=============================
- //==============вывод значений 4-х обьектов=======
- Console.WriteLine(s.Значение());
- Console.WriteLine(s2.Значение());
- Console.WriteLine(s1.Значение());
- Console.WriteLine(s3.Значение());
- //========================================
- //==============ввод тут проверка на равенство неравенство s1 и s , и на больше меньше s1 и s с выводом результата=======
- if (s1 == s) Console.WriteLine("{0}={1}", s1.Значение(), s.Значение());
- else Console.WriteLine("{0}!={1}", s1.Значение(), s.Значение());
- if (s1 > s) Console.WriteLine("{0} > {1}", s1.Значение(), s.Значение());
- else Console.WriteLine("{0} > {1}", s.Значение(), s1.Значение());
- //изменение знака s
- ДесятичСтр.Измзнак(s);
- Console.WriteLine(s.Содержимое); // вывод s строки
- s.Присвоить(s2); // присвоение s содержимой строки s2
- Console.WriteLine(s.Содержимое); // вывод s строки
- Console.WriteLine("{0} - ({1}) = {2}", s.Значение(), s1.Значение(), (s - s1).Значение()); // вычитание значений s и s1
- Console.ReadLine();
- }
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д