Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
2 / 2 / 0
Регистрация: 25.06.2014
Сообщений: 51

Переконвертировать цифру в букву

02.09.2015, 12:09. Показов 2717. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте. Есть такой набросок:
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
private string GetXPosition(BasePlayer player)
        {
            int position = (int)((player.transform.position.x + (TerrainMeta.Size.x / 2)) / (TerrainMeta.Size.x / 26)) + 1;
            switch(position)
            {
                case 1: return "A";
                case 2: return "B";
                case 3: return "C";
                case 4: return "D";
                case 5: return "E";
                case 6: return "F";
                case 7: return "G";
                case 8: return "H";
                case 9: return "I";
                case 10: return "J";
                case 11: return "K";
                case 12: return "L";
                case 13: return "M";
                case 14: return "N";
                case 15: return "O";
                case 16: return "P";
                case 17: return "Q";
                case 18: return "R";
                case 19: return "S";
                case 20: return "T";
                case 21: return "U";
                case 22: return "V";
                case 23: return "W";
                case 24: return "X";
                case 25: return "Y";
                case 26: return "Z";
            }
        }
Можно ли этот код как-то упростить? В силу своей безграмотности это первое что пришло в голову.
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
02.09.2015, 12:09
Ответы с готовыми решениями:

Дан символ C, изображающий цифру или букву
Дан символ C, изображающий цифру или букву (латинскую или русскую). Если C изображает цифру, то вывести строку «digit», если латинскую...

Ввести символ - цифру или букву - и выполнить действие
Помогите пожалуйста решить задачу Создайте проект для решения задачи, используя условный оператор. Указание. В работе использовать...

При попытке передать в ReadKey цифру цепляет еще букву D
При попытке передать в ReadKey цифру цепляет еще букву D. Что это может значить? В интернете никакой информации не нашел. Конкретно,...

8
127 / 121 / 68
Регистрация: 27.08.2015
Сообщений: 232
02.09.2015, 12:13
C#
1
2
3
            int position = 2;
            char ch = (char)('A' + position - 1);
            Console.WriteLine(ch);
1
 Аватар для SVA
104 / 89 / 32
Регистрация: 12.07.2011
Сообщений: 623
02.09.2015, 12:21
Не знаю может и есть способы легче но ваш код можно уменьшить очень сильно



C#
1
2
3
4
5
  private int digit_char(char str)
        {
            string alffovit = "ABCDIF...";
            return alffovit.IndexOf(str)+1;
        }
Добавлено через 1 минуту
Блин не правильно понял по букве вам нужно цифру получить... а я сделал по цифре букву.
1
2 / 2 / 0
Регистрация: 25.06.2014
Сообщений: 51
02.09.2015, 12:23  [ТС]
Спасибо что помогли, просто я в c# новичок. Сделал так:
C#
1
2
3
4
5
private string GetXPosition(BasePlayer player)
        {
            int position = (int)((player.transform.position.x + (TerrainMeta.Size.x / 2)) / (TerrainMeta.Size.x / 26));
            return ((char)('A' + position)).ToString();
        }
И ещё можете помочь дабы не создавать новую тему:

Можно как-то упростить этот код:
C#
1
2
3
4
5
6
7
8
9
10
11
12
private string GetRotation(BasePlayer player)
        {
            double lookRotation = player.eyes.rotation.eulerAngles.y;
            if(lookRotation > 337.5 || lookRotation < 22.5) return "⇑";
            else if(lookRotation > 22.5 && lookRotation < 67.5) return "⇗";
            else if(lookRotation > 67.5 && lookRotation < 112.5) return "⇒";
            else if(lookRotation > 112.5 && lookRotation < 157.5) return "⇘";
            else if(lookRotation > 157.5 && lookRotation < 202.5) return "⇓";
            else if(lookRotation > 202.5 && lookRotation < 247.5) return "⇙";
            else if(lookRotation > 247.5 && lookRotation < 292.5) return "⇐";
            else if(lookRotation > 292.5 && lookRotation < 337.5) return "⇖";
        }
0
127 / 121 / 68
Регистрация: 27.08.2015
Сообщений: 232
02.09.2015, 12:49
Первое замечание: у вас где-то условия должны входить с границей - что будет если lookRotation будет, например, 337.5? Не под один if оно не подойдёт:
C#
1
2
3
4
5
6
7
8
9
10
11
            lookRotation = 337.5;
            if (lookRotation > 337.5 || lookRotation < 22.5) return "⇑";
            else if (lookRotation > 22.5 && lookRotation < 67.5) return "в‡—";
            else if (lookRotation > 67.5 && lookRotation < 112.5) return "в‡’";
            else if (lookRotation > 112.5 && lookRotation < 157.5) return "в‡˜";
            else if (lookRotation > 157.5 && lookRotation < 202.5) return "⇓";
            else if (lookRotation > 202.5 && lookRotation < 247.5) return "⇙";
            else if (lookRotation > 247.5 && lookRotation < 292.5) return "в‡ђ";
            else if (lookRotation > 292.5 && lookRotation < 337.5) return "в‡–";
 
            return "Invalid value"; // Попадём сюда
Дальше проще:
C#
1
2
3
4
5
6
            if (lookRotation >= 337.5 || lookRotation <= 22.5) return "⇑";
 
            // уже больше 22.5 (из верхнего условия), lookRotation > 22.5 проверять не надо.
            else if (lookRotation < 67.5) return "в‡—";
 
            // и т.д
1
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
02.09.2015, 12:55
Использовал эти функции для преобразования, когда прогу заставлял с Excel работать.
На всякий случай:

C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
            private string GetExcelColumnName(int number)
           {
            int dividend = number;
            string columnName = String.Empty;
            int modulo;
 
            while (dividend > 0)
            {
                modulo = (dividend - 1) % 26;
                columnName = Convert.ToChar(65 + modulo).ToString() + columnName;
                dividend = (int)((dividend - modulo) / 26);
            }
 
            return columnName;
            }
 
            private int GetExcelColumnNumber(string name)
            {
            int number = 0;
            int pow = 1;
            for (int i = name.Length - 1; i >= 0; i--)
            {
                number += (name[i] - 'A' + 1) * pow;
                pow *= 26;
            }
 
            return number;
            }
1
2 / 2 / 0
Регистрация: 25.06.2014
Сообщений: 51
02.09.2015, 13:31  [ТС]
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
private string GetRotation(BasePlayer player)
        {
            double lookRotation = player.eyes.rotation.eulerAngles.y;
            if(lookRotation >= 337.5 || lookRotation <= 22.5) return "⇑";
            else if(lookRotation < 67.5) return "⇗";
            else if(lookRotation < 112.5) return "⇒";
            else if(lookRotation < 157.5) return "⇘";
            else if(lookRotation < 202.5) return "⇓";
            else if(lookRotation < 247.5) return "⇙";
            else if(lookRotation < 292.5) return "⇐";
            else if(lookRotation < 337.5) return "⇖";
            return "⇎";
        }
А ещё проще?
0
127 / 121 / 68
Регистрация: 27.08.2015
Сообщений: 232
02.09.2015, 14:25
Сильно проще вряд ли получится. Это double, а не int, для которого можно было бы придумать switch или хэш-таблицу. Возможно, код можно сделать нагляднее, заметив, что каждая следующая граница идёт через 45.0.
C#
1
2
3
4
5
6
7
8
9
10
11
12
            int group = (int)((lookRotation - 22.5) / 45);
            switch (group)
            {
                case 0: return "в‡—";
                case 1: return "в‡’";
                case 2: return "в‡&#152;";
                case 3: return "⇓";
                case 4: return "⇙";
                case 5: return "в‡ђ";
                case 6: return "в‡–";
                default: return "⇑"; // всё остальное, бывший самый верхний if
            }
Оговорюсь - не факт, что он будет выполняться быстрее вашего варианта из-за наличия операции
C#
1
(int)((lookRotation - 22.5) / 45);
(вычисление + приведение типа).
1
 Аватар для SVA
104 / 89 / 32
Регистрация: 12.07.2011
Сообщений: 623
02.09.2015, 14:46
Хотел короче еще сделать, не получилось
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
02.09.2015, 14:46
Помогаю со студенческими работами здесь

Написать программу, которая считывает с клавиатуры предложение, заменяет цифру «0» на букву «О»
Написать программу, которая считывает с клавиатуры предложение, заменяет цифру «0» на букву «О».Буду очень благодарен P

Перевести цифру в букву
Есть цифра 5 её нужно перевести в заглавную букву английского алфавита помогите пожалуйста не могу сообразит Добавлено через 35...

Как разделить цифру и букву
Такой вопрос, нужно ввести число в консоль, приписав рядом единицу измерения . А потом сохранить это число в вектор чисел. Объясню на...

Как перевести букву, цифру в юникод?
Как перевести букву,цифру в юникод?

Kаждую малую латинскую букву заменить на цифру
Помогите пожалуйста, никак не получается 1. Дан текст . Kожну малую латинскую букву заменить на цифру 1 .


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это дополнительная запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru