.NET 4.x Организовал стек, разбив код на классы - C#

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

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

Необходимо разбить на классы и в них организовать свой стек... то есть в основном коде программы сделать лишь обращения к ним. Очень нужна помощь, спасибо.
using System;
using System.Collections.Generic;
 
namespace Mat
{
    class Hill
    {
        private string name;
        public  int height;
 
        public Hill(string name,int height)
        {
            this.name = name;
            this.height = height;
        }
 
        public override string ToString()
        {
            return name + " " + height+ " метров";
        }
    }
    class Program
    {
        static void Main()
        {
            Stack<Hill>hills=new Stack<Hill>();
 
            hills.Push(new Hill("Гора 1 ",1000));
            hills.Push(new Hill("Гора 2 ",2000));
 
            double s = 0;
            foreach (var a in hills)
            {
                s += a.height;
                Console.WriteLine(a);
            }
           
            Console.WriteLine(s/hills.Count);
        }
    }
}

Решение задачи: «.NET 4.x Организовал стек, разбив код на классы»

textual
Листинг программы
using System;
using System.Collections;
using System.Collections.Generic;
 
namespace ConsoleApplication16
{
    class QStack<T>:IEnumerator<T>,IEnumerable<T>,ICollection<T>
    {
        private T[] _arr;
        private int  _tail;
        private int _foreachCounter;
        /// <summary>
        /// Stack class
        /// </summary>
        /// <param name="count">capacity</param>
        public QStack(int count)
        {
            _arr=new T[count];
            _tail = -1;
            _foreachCounter = -1;
        }
        public QStack() : this(0) { }
 
        public QStack(ICollection collection):this(0)
        {
            foreach (T a in collection)
            {
                Push(a);
            }
        }
        public T Peek()
        {
            if(Count==0)
            throw new Exception("Stack is empty");
            return _arr[_tail];
        }
 
        public void Add(T item)
        {
           Push(item);
        }
 
        public void Clear()
        {
            _arr=new T[0];
            Count = 0;
            _tail = -1;
            _foreachCounter = -1;
        }
 
        public bool Contains(T item)
        {
            bool res = false;
            for (int i = 0; i <=_tail; i++)
            {
                if (_arr[i].Equals(item))
                {
                    res = true;
                    break;
                }
            }
            return res;
        }
 
        public void CopyTo( T[] array, int arrayIndex)
        {
            for (int i = arrayIndex,j=0; i < Count; i++,j++)
            {
                array[j] = _arr[i];
            }
        }
 
        public bool Remove(T item)
        {
            if (!Contains(item))
                return false;
            T[]tmp=new T[Count];
            Array.Copy(_arr,tmp,Count);
 
            List<T>lst=new List<T>(tmp);
            lst.Remove(item);
            tmp = lst.ToArray();
            Array.Resize(ref tmp,_arr.Length);
            _arr = tmp;
            Count--;
            _tail--;
            return true;
        }
 
        public int Count { get; private set; }
 
        public bool IsReadOnly
        {
            get { return false; }
        }
 
        public void Push(T item)
        {
            if (_tail+1 < _arr.Length)
            {
                Count++;
                _tail++;
                _arr[_tail] = item;
                
            }
            else
            {
                Array.Resize(ref _arr, _arr.Length*2+10);
                Count++;
                _tail++;
                _arr[_tail] = item;
            }
        }
 
        public void Push(params T[] elements)
        {
            foreach (var a in elements)
            {
                Push(a);
            }
        }
        public T Pop()
        {
            if(Count==0)
                throw new Exception("Stack is empty!");
         
            T item = _arr[_tail];
            _tail--;
            Count--;
            return item;
        }
 
 
        public void Dispose()
        {
            _foreachCounter = -1;
        }
 
        public bool MoveNext()
        {
            _foreachCounter++;
            return _foreachCounter < Count;
        }
 
        public void Reset()
        {
            throw new NotImplementedException();
        }
 
        public T Current
        {
            get { return _arr[_foreachCounter]; }
        }
 
        object IEnumerator.Current
        {
            get { return Current; }
        }
 
        public IEnumerator<T> GetEnumerator()
        {
            return this;
        }
 
        IEnumerator IEnumerable.GetEnumerator()
        {
            return GetEnumerator();
        }
    }
    class Hill
    {
        private string name;
        public int height;
 
        public Hill(string name, int height)
        {
            this.name = name;
            this.height = height;
        }
 
        public override string ToString()
        {
            return name + " " + height + " метров";
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
 
            QStack<Hill> hills = new QStack<Hill>();
 
            hills.Push(new Hill("Гора 1 ", 1000));
            hills.Push(new Hill("Гора 2 ", 2000));
 
            double s = 0;
            foreach (var a in hills)
            {
                s += a.height;
                Console.WriteLine(a);
            }
 
            Console.WriteLine(s / hills.Count);
            Console.ReadKey(true);
        }
    }
}

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


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

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

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