/CSharpNumeralConverter

NumeralConverter или конвертер систем счисления - это, как, ясно из названия "калькулятор", который позволяет переводить любые числа из любой СС от 2-ной до 36-ной

Primary LanguageC#

CSharp Numeral Converter

CSharp Numeral Converter - это мой дебютный проект на языке C# и платформе .NET (.NET documentation).

Проект безусловно интересный и полезный, именно в качестве первого 1️⃣ т.к. при работе над ним, я получил опыт, практику работы с базовыми и не очень элементами языка программирования C#, например, почти со всеми типами данных, преобразованием типов, массивами, строками, методами, циклами, условными операторами(неожиданно н 😂🤣) и т.д.

Было несколько любопытных моментов:

  • Как разделить введённую строку на дробную и целую части:

    string[] parts = number.Split('.', ',');
    
    wholePart = Convert.ToString(parts[0]);
    fractionalPart = Convert.ToString(parts[1]);
  • Как работать с буквами систем счисления при переводе в 10-ую СС

    int item = (int)num[i];
    
    if (item >= 97 & item <= 122)          // работа с таблицей ascii; решает проблему если ввели маленькую букву
    {
        item -= 32;
    }
    
    int itemNum;
    itemNum = item - 48;
    
    if (itemNum >= 10)                     // перевод цифры в букву
        itemNum -= 7;
    }

    Например символ 'A' после явного преобразования int item = (int)num[i]; в тип int будет равняться 65 по таблице ascii

    • Вычитаем из данного числа 48

    • Если число меньше 10, значит от строки мы "откусили" цифру,

    • Если число больше 10, значит это буква и следует вычесть ещё -7, чтобы получить альтернативный код этой буквы в 10-ой системе счисления.

      В данном случае 65 - 48 = 17, значит это буква, следовательно 17 - 7 = 10

  • Как работать с буквами систем счисления при переводе из 10-ой СС в другую

    item = Convert.ToString((char)(numItem + 55));
    • Основан на том же принципе работы с таблицой ascii, что и в примере выше 👆
  • Перевод дробной части числа в 10-ую СС

    DecNumber += Convert.ToDouble(arr[i]) * Math.Pow(BaseNumber, n * (-1));     
    • n*(-1) добавлен для создания отрицательной степени, этого требует алгоритм создания дробной части числа
  • Удаление 0 из строки-результата перевода дробной части числа

    char[] MyChar = { '0' };                   
    string newP2 = p2.TrimStart(MyChar);
    • Массив MyChar содержит в себе символы, которые метод TrimStart принимает и удаляет из начала строки

Для реализации данных моментов пришлось обращаться к документации Microsoft (ссылки на документацию: documentation1, documentation2), к форумам 👨‍💻, к листку бумаги 📄, ручке ✏, кружке с чаем ☕ и думалке 🧠.

Теория. Что нужно знать для понимания

Также данный проект интересен с точки зрения “теоретической, научной” информатики т.к. связан с системами счисления (СС).

Для понимания необходимо:

Св-ва проекта:

  • Время выполнения (чистое время): 11 часов

  • Сложность: easy по задумке и на первый взгляд, но мне хочется дать medium (проект оказалься мудрённее, чем я думал именно со стороны реализации на C#)

  • Моя оценка по 5-ти бальной шкале: ⭐⭐⭐⭐⭐

Особенности, моменты, на которые хотелось бы обратить внимание:

  • Все возможные СС 2-36. Ограничения связаны с всего лишь 10-ю цифрами и английским алфавитом в 26 символов, он просто закончился 😁

  • Реализован перевод дробных чисел

  • Проверки на корректность пользовательского ввода оснований систем счисления

P.S.

  • Проект будет развиваться не бесконечно, но до определённого момента, а именно, приложения под android.
  • Если я смог помочь кому-то этим проектом я рад 😉 т.к. сам помню искал алгоритмы, не находил... эх...

Спасибо за внимание!