Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.02.2012, 21:32   #1
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
Вопрос C# исправление ошибки. Описать класс, реализующий шестнадцатеричный счетчик

Добрый вечер. Помогите пожалуйста исправить ошибки.

Задание: Описать класс, реализующий шестнадцатеричный счетчик, который может увеличивать или уменьшать свое значение на единицу в заданном диапазоне. Предусмотреть инициализацию счетчика значениями по умолчанию и произвольными значениями. Счетчик имеет два метода: увеличения и уменьшения, — и свойство, позволяющее получить его текущее состояние. При выходе за границы диапазона выбрасываются исключения.
Написать программу, демонстрирующую все разработанные элементы класса.

Как я понял ошибка в следующем:
Само число в счетчике должно храниться в 16-тиричном формате.(как это изменить)
Еще не знаю как реализовать При выходе за границы диапазона выбрасываются исключения.
Ну если по ходу дела найдутся еще ошибки какие нибудь, то просьба сообщить.

Код:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    // Класс дестиричный  счетчик
    class Счетчик
    {
        int ТекущееСостояние;
        int ВерхняяГраница;
        int НижняяГраница;
        public string КодОшибки;
                // Конструктор
        // 1-й -по умолчанию
        public Счетчик()
        {
            this.ТекущееСостояние = 0;
            this.НижняяГраница = 0;
            this.ВерхняяГраница = 15;
        }
        // 2-й - С 3 параметрами
        public Счетчик(int x, int MinValue, int MaxValue)
        {
            // Проверка границ
            int T = Math.Min(MinValue, MaxValue);
            if (T != MinValue)
            {
                MaxValue = MinValue;
                MinValue = T;
            }
            // Проверка х (попадание в диапазон)
            if (ТекущееСостояние < MinValue || ТекущееСостояние > MaxValue)
            {
                this.ТекущееСостояние = MinValue;
            }
            else
            {
                this.ТекущееСостояние = x;
            }
            this.НижняяГраница = MinValue;
            this.ВерхняяГраница = MaxValue;
        }
        // Свойство, возвращающее текущее состояние счетчика
        public int Состояние
        {
            get
            {
                return this.ТекущееСостояние;
            }
        }
        // инкримент счетчика
        public void Увеличить()
        {
            this.ТекущееСостояние++;
            // проверка выхода за границу диапозона
            if (this.ТекущееСостояние > this.ВерхняяГраница)
            {
                this.ТекущееСостояние = this.ВерхняяГраница;
                this.КодОшибки = "Провышено допустимое значение";
            }            
        }
        // Дикримент Счетчика
        public void Уменьшить()
        {
            this.ТекущееСостояние--;
            // Проверка выхода за границу диапазона
            if (this.ТекущееСостояние < this.НижняяГраница)
            {
                this.ТекущееСостояние = this.НижняяГраница;
                this.КодОшибки = "Превышено допустимое значение";
            }
        }
        // Конец описания класса счетчик
        class Program
        {
            static void Main()
            {
            var счетчик = new Счетчик(0,0,15);
 
            for (int i = 0; i < 15; i++)
       {
      счетчик.Увеличить(); 
      Console.WriteLine("0x{0:X}", счетчик.Состояние);
      Console.ReadKey();
       }
    
            }
        }
    }
}
PROkaZZZniK вне форума Ответить с цитированием
Старый 08.02.2012, 21:43   #2
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

оО имена переменных\методов на русском? Не устал раскладку переключать?) Кстати, слова "дестиричный" нет и инкремент\декремент.
Цитата:
Само число в счетчике должно храниться в 16-тиричном формате.(как это изменить)
Видимо он должен быть строкой, а не int.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 08.02.2012, 21:55   #3
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
По умолчанию

Цитата:
Сообщение от Alex11223 Посмотреть сообщение
Не устал раскладку переключать?)
Нет спасибо))) не устал, раньше писал на англ., но узнал что можно и на русском обозначать(как смешно это не казалось), эта 1 прога с русскими названиями, а переделывать уже не хочется. Так не могли бы Вы мне рассказать(подсказать) что не так с моим кодом)?
PROkaZZZniK вне форума Ответить с цитированием
Старый 09.02.2012, 14:22   #4
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
По умолчанию

Ну так поможете исправить ошибки?
PROkaZZZniK вне форума Ответить с цитированием
Старый 09.02.2012, 15:10   #5
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Цитата:
Сообщение от PROkaZZZniK Посмотреть сообщение
Само число в счетчике должно храниться в 16-тиричном формате.(как это изменить)
по заданию не сказано

С исключенеим и подсвеченно ошибкой. Программа банальщина полная. Усложнится если тока преподователь скажет что необходима будет реализовывать конвертацию int в строчку с числом 16 ричным не используя string.Format
Код:
 // Класс дестиричный  счетчик
    class Счетчик
    {
        int ТекущееСостояние;
        int ВерхняяГраница;
        int НижняяГраница;
        public string КодОшибки;
        // Конструктор
        // 1-й -по умолчанию
        public Счетчик()
        {
            this.ТекущееСостояние = 0;
            this.НижняяГраница = 0;
            this.ВерхняяГраница = 15;
        }
        // 2-й - С 3 параметрами
        public Счетчик(int x, int MinValue, int MaxValue)
        {
            // Проверка границ
            int T = Math.Min(MinValue, MaxValue);
            if (T != MinValue)
            {
                MaxValue = MinValue;
                MinValue = T;
            }
            // Проверка х (попадание в диапазон)
            if (x < MinValue || x > MaxValue)
            {
                this.ТекущееСостояние = MinValue;
            }
            else
            {
                this.ТекущееСостояние = x;
            }
            this.НижняяГраница = MinValue;
            this.ВерхняяГраница = MaxValue;
        }
        // Свойство, возвращающее текущее состояние счетчика
        public int Состояние
        {
            get
            {
                return this.ТекущееСостояние;
            }
        }
        // инкримент счетчика
        public void Увеличить()
        {
            this.ТекущееСостояние++;
            // проверка выхода за границу диапозона
            if (this.ТекущееСостояние > this.ВерхняяГраница)
            {
                this.ТекущееСостояние = this.ВерхняяГраница;
                throw new Exception("Провышено допустимое значение");
            }
        }
        // Дикримент Счетчика
        public void Уменьшить()
        {
            this.ТекущееСостояние--;
            // Проверка выхода за границу диапазона
            if (this.ТекущееСостояние < this.НижняяГраница)
            {
                this.ТекущееСостояние = this.НижняяГраница;
                throw new Exception("Превышено допустимое значение");
            }
        }
        // Конец описания класса счетчик
        class Program
        {
            static void Main()
            {
                var счетчик = new Счетчик(5, 1, 10);

                for (int i = 0; i < 10; i++)
                {
                    try
                    {
                        счетчик.Увеличить();
                        Console.WriteLine("0x{0:X}", счетчик.Состояние);
                    }
                    catch (Exception e)
                    { 
                        Console.WriteLine(string.Format("Exception: {0}", e.Message));
                        break;
                    }
                    
                }
                Console.ReadKey();
            }
        }
    }

Последний раз редактировалось Guy; 09.02.2012 в 15:12.
Guy вне форума Ответить с цитированием
Старый 09.02.2012, 15:23   #6
PROkaZZZniK
Форумчанин
 
Регистрация: 21.10.2011
Сообщений: 121
По умолчанию

Цитата:
Сообщение от Guy Посмотреть сообщение
по заданию не сказано
В задании не упомянуто, но все же было сказано что нужно мне сделать так, а не так как я до этого.
Спасибо за помощь.
PROkaZZZniK вне форума Ответить с цитированием
Старый 09.02.2012, 15:25   #7
rUs_LAN
Форумчанин
 
Регистрация: 15.11.2008
Сообщений: 577
По умолчанию

Код:
using System;

namespace Praktika
{


    class Entry
    {
        public static void Main()
        {
            Console.WriteLine("Input data:\t");
            int data;
            try
            {
                data = int.Parse(Console.ReadLine());
                if (data < 0) throw new Exception();
            }
            catch (Exception)
            {
                Console.WriteLine("Помилка");
            }
            Console.ReadKey();
        }
    }
}
пример работы с исключениями

Код:
using System;

namespace Praktika
{


    class Entry
    {
        public static void Main()
        {
            uint intA = 12;
            UInt16 hexA = Convert.ToUInt16(intA.ToString(), 10);
            Console.WriteLine("{0:X}", hexA);

            uint HexA = 12;
            UInt16 DecA = Convert.ToUInt16(HexA.ToString(), 16);
            Console.WriteLine("{0:G}", DecA);
            Console.ReadKey();
        }
    }
}
пример перевода чисел в 16 систему

Последний раз редактировалось rUs_LAN; 09.02.2012 в 15:28.
rUs_LAN вне форума Ответить с цитированием
Старый 09.02.2012, 16:29   #8
Guy
Форумчанин
 
Регистрация: 15.12.2010
Сообщений: 398
По умолчанию

Держи, накалякал функцию, в неё свой счетчик передашь int-вый и получишь строчку в 16 ричном формате

Код:
public string DecToHex(int num)
            {
                string result = string.Empty;
                int[] divs = new int[20];
                int i = 0, j = 0;
                while (num > 0)
                {
                    divs[i] = num % 16;
                    num = num / 16;
                    i++;
                    j++;
                }

                for (i = j - 1; i >= 0; i--)
                {
                    if (divs[i] > 9)
                    {
                        result = string.Format("{0}{1}", result, (char)((divs[i]-10)+'A'));
                    }
                    else
                    {
                        result = string.Format("{0}{1}", result, divs[i].ToString());
                    }
                }
                return result;
            }
Guy вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Десятичный счетчик, исправление ошибок PROkaZZZniK Помощь студентам 1 05.02.2012 15:33
Разработайте класс, реализующий линейный двусвязный список Аким Ба Паскаль, Turbo Pascal, PascalABC.NET 11 24.08.2011 23:08
Описать класс-родитель и класс-потомок. Delphi 7 Andrew_M Помощь студентам 0 15.01.2011 14:42
Исправление ошибки Adriana Microsoft Office Access 1 17.10.2010 19:45
Исправление ошибки bee_uk Общие вопросы C/C++ 1 02.06.2009 13:43