![]() |
1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!
![]() ![]() |
![]() |
kosyak |
![]()
Сообщение
#1
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 100 Пол: Мужской Репутация: ![]() ![]() ![]() |
Доброе время суток!
Есть такая проблема. Существуют некая последовательность строк(номера товара). Номера обычно имеют вид: 100 100а 100б 101 1000 ну и так далее. Т.е. могут быть и числа и буквы. Необходимо сделать чтобы набор вида: [100,100а,100б,101] перевести в строку "100-101". Т.е. указать интервалами. Как это можно сделать. Пока что придумал только следующее: считываем по одному символу из названия товара, затем проверяем цифра ли это. Если цифра то добавляем ее в целую часть числа, если же нет, то добавляем код символа ASCII в дробную часть. Например: 100a - переведется в число 100,102 (вроде код русской "а" - 102). Соответственно если 100аб - то будет 100.102103. Но тогда проблема если большие названия(не хватит цифр после запятой) и как быть если вдруг встретится буква в началае. Есть идеи?? заранее благодарен |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Я бы делал не так... А сразу хранил бы верхнюю и нижнюю границы интервала. Смотри: допустим, твой же интервал: [100, 100а, 100б, 101].
Интервал пустой, берем "100" - начало и конец интервала = "100" Интервал "100" - "100", берем "100а". проверяем, не входит ли число в интервал (больше или равно верхней границе, и меньше или равно нижней) - нет, не входит. Тогда еще две проверки: больше верхней? Тогда верхняя граница интервала меняется. Меньше нижней? Тогда меняется нижняя граница. В нашем случае - "больше верхней", интервал становится "100" - "100а" И так далее. В конце просто запишешь начало/конец интервала в одну строку и поставишь между ними тире... |
kosyak |
![]()
Сообщение
#3
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 100 Пол: Мужской Репутация: ![]() ![]() ![]() |
Так не пойдет. Если будет массив [100, 100а, 100б, 200а, 200б, 200в], то должно получится 2 интервала:
[100-100б], [200а-200в]; Проблема только в представлении строки как числа. Чтобы каким то образом можно было определить подряд ли идут номра или нет. |
volvo |
![]()
Сообщение
#4
|
Гость ![]() |
Цитата то должно получится 2 интервала С чего это? Ты тогда приводи полностью задание, а не то, КАК ТЫ ДУМАЕШЬ, что это задание надо решать... Вот тебе "вопрос на засыпку": [100, 100а, 100б, 200а, 200б, 200в, 101, 101а, 101б] - что должно получиться на выходе? Два интервала, или уже 3? Другими словами, какова "чувствительность" интервала? |
kosyak |
![]()
Сообщение
#5
|
Пионер ![]() ![]() Группа: Пользователи Сообщений: 100 Пол: Мужской Репутация: ![]() ![]() ![]() |
Да задание то в том штобы пользователю удобно было просматривать большие группы товара. чтобы он сразу видел 100-200 а не большой список. Лучше бы чтобы было 2 интервала в твоём примере. Т.е. нету никакого конкретного задания. Просто думаю, как будет удобней пользователю.
Сообщение отредактировано: kosyak - 22.10.2009 18:01 |
andriano |
![]()
Сообщение
#6
|
Гуру ![]() ![]() ![]() ![]() ![]() Группа: Пользователи Сообщений: 1 168 Пол: Мужской Реальное имя: Сергей Андрианов Репутация: ![]() ![]() ![]() |
Тогда тебе надо разделить правило и алгоритм.
Правило говорит, что должно получиться в результате преобразования, а алгоритм - как выполнение этого правила реализовать на практике. Сначала постарайся точно сформулировать правило. |
volvo |
![]()
Сообщение
#7
|
Гость ![]() |
kosyak, в качестве псевдокода возможного решения твоей проблемы (все-таки, раздел - теоретический):
procedure main is |
![]() ![]() |
![]() |
Текстовая версия | 21.07.2025 20:56 |