Объяснить код - 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();
}
}
}

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


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

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

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