![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| ТарасАтавин |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Шрифтом Arial с ведущими нолями в шестнадцатеричном представлении цифрами 0123456789ABCDEF выводятся номера строк, известно, сколько цифр отведено под один номер, надо оценить максимальную ширину номера, чтоб сами строки начинать гарантировано правее. Желательно не перебирать при этом сами номера от нулевого до последнего.
Это сообщение отредактировал(а) ТарасАтавин - 29.8.2013, 07:53 -------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
| Dem_max |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
GetTextExtentPoint32()
-------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
|||
|
||||
| ТарасАтавин |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Читайте:
Это сообщение отредактировал(а) ТарасАтавин - 29.8.2013, 08:54 -------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
| Amp |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 886 Регистрация: 17.2.2009 Репутация: 3 Всего: 17 |
Вариант выкинуть Arial и взять моноширный шрифт не подходит?
|
|||
|
||||
| ТарасАтавин |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Желательно всё таки Arial. Но мне не надо точно. Мне надо близко и с гарантией. То есть разрешается слегка ошибиться в строну увеличения, но не в строну уменьшения. Какая из моих цифр в Arial шире всех?
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
| xvr |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
||||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Переберите цифры от 0 до F для данного шрифта, которая из них окажется самой широкой, из той составьте строку с максимальным количеством цифр в номере, возьмите ширину, немного накиньте "шоб було" и задача будет решена.
Добавлено через 2 минуты и 15 секунд
Опять я не успел! А ведь это один из немногих вопросов, на которые я знал ответ. -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| ТарасАтавин |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
-------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
| Dem_max |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1780 Регистрация: 12.4.2007 Репутация: 4 Всего: 39 |
Ужос Код из 5 строчек превратить в 200 -------------------- Американские программисты долго не могли понять, почему русские при зависании Windоws всё время повторяют "Твой зайка написал" ("Yоur bunnу wrоte") |
||||
|
|||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Йолки! а это что такое? Есть же форматирование чисел для представления в виде текста.
Вот код перебора:
таким образом получаешь число, которые шире остальным в данном контексте устройства (или шрифт смени для CDC или замени функцию GetTextExtent на ту, которая тебе удобней. Дальше уже работаешь с этим числом. И не лень тебе было всё это сверху писать? Ладно, научишься, будешь быстро потом всё делать. Новый язык всегда в принципе со скрипом осваивается Это сообщение отредактировал(а) akizelokro - 29.8.2013, 15:29 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| ТарасАтавин |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Вот как раз спринтф и есть ужас. Даже с учётом заранее вычисленного размера буфера. Кроме того, я избавился от лишних вложенных вызовов. И не полагаюсь на умножение ширины отдельного символа.
Добавлено через 3 минуты и 44 секунды Я вообще люблю "вручную" перебирать массивы от 512-ти элементов, а такой малышь - это у меня впервые. Это сообщение отредактировал(а) ТарасАтавин - 29.8.2013, 16:12 -------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Это понятно, что у всех программистов есть свои привычки. Когда же работаешь в команде или пишешь код, который будет потом сопровождаться годами и сопровождаться, возможно, другими людьми, то начинают играть роли другие сущности. Первая из них это логичность кода. У меня, когда я гляну на этот код, первое что возникнет в мыслях, что там какой-то убойный алгоритм, который ну никак нельзя было упростить. Тут я сам исхожу из тех же простых причин, что применение алгоритма должно быть оправдано исходя из логики программы и зависящей от этого читабельностью. И если я там вижу массив из множества элементов, то думаю, что это так и должно быть (ввиду логического принципа бритвы Оккама). И не предлагал я умножать на ширину. У меня было предложение собрать строку из n символов с максимальной шириной и взять её реальный размер. Возможно, это несколько нерациональней. Не говоря уже о том, что время деньги и ты мог бы потратить время ещё на чо-то рациональней. Это сообщение отредактировал(а) akizelokro - 29.8.2013, 18:34 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| ТарасАтавин |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 370 Регистрация: 26.8.2013 Репутация: нет Всего: нет |
Не другие, а именно эти. Надёжность и безопасность кода не имеет значения, если он будет выброшен к вечеру. И тогда можно юзать спринтфы, сканфы и тому подобный ужас. Если же код должен поддерживаться хотябы неделю, то можно юзать только те функции, которые или сами заботятся о буферах, или спрашивают их размеры в параметрах. Добавлено через 2 минуты и 18 секунд
Это сообщение отредактировал(а) ТарасАтавин - 29.8.2013, 19:16 -------------------- Не так всё плохо, как оно есть на самом деле. |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
Есть и безопасные версии у sprintf, и прочих подобных Сшных функций. Если есть желание, то можно использовать их. Если нет желания использовать их ввиду других причин, то можно искать аналоги (обсуждение темы у Слэтера в "Новые сложные задачи на С++) почти в самом начале книги. Лично же у меня представление о безопасности кода (при переносимости), действительно, несколько своеобразное. В нём я исхожу из законов Мёрфи в не меньшей степени представляя это так, что обязательно найдутся некие программисты, которые при модификации кода сделают в нём ошибки всевозможного характера. И, понимая это, от части окончательных проверок ухожу, потому что некий программист сможет обойти все проверки и превратить работающий код в генерирующий ошибки.
А не знаю. Я увидел большое количество строк, в которых шло обращение ко всем элементам массива, я понял, что это что-то мощное и потрясенный глубиной замысла творца, я поверил ему на "слово", не разбираясь в деталях этого внушительного сооружения -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
| akizelokro |
|
|||
![]() Крокодил ![]() ![]() Профиль Группа: Участник Сообщений: 761 Регистрация: 30.7.2007 Репутация: 1 Всего: 5 |
В той части своей подоплёки, в которой являюсь мистиком, я с глубоким душевным трепетом наблюдаю за воистину мистическим отражением тенденций разнообразия Универсума, как то в плане воплощения бесконечного множества ошибок, реализуемого неким абстрактным программистом в конкретных кусках кода, так и полумистической борьбой с бесконечным множеством ошибок, ведущейся некими конкретными программистами, и подозреваю в этом не только отражения глубинных тенденций Универсума, но и проявление его бесконечной мощности как некоего множества.
Это сообщение отредактировал(а) akizelokro - 30.8.2013, 07:28 -------------------- a = a + b; b = a - b; a = a - b; |
|||
|
||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |