![]() |
Модераторы: Poseidon |
![]() ![]() ![]() |
|
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 9 Всего: 149 |
Значится так:
Предпосылки такие:
Метод упорядочивания текста: [*]Расставление доп. пробелов между словами Алгоритм: 1) Находим первое слово, которое не помещается в строку. Для этого нам нужно знать ширину каждой буквы и минимальную ширину пробела. Складываем последовательно ширину всех букв, включая пробелы и проверяем вышли ли мы за пределы строки. 2) Слово на котором вышли отбрасываем и вычисляем длину всех букв в неоткинутых словах (пробелы не считаются). 3) Вычисляем разность между длинной строки и числом из п. 2. 4) Определяем сколько пробелов нужно для выравнивания текста. 5) Вычисляем сколько пробелов будет между конкретными словами (распределяем так, чтобы всем было поровну +-1 пробел) 5) Выводим строку с количеством пробелов вычисленном в пред. пункте. P.S. Если не разберетесь --- спрашивайте. Я сделаю это не раньше понедельника (работы очень много). Максимум на C# |
|||
|
||||
anad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 30.3.2006 Репутация: нет Всего: нет |
Да, ну и задачка...
|
|||
|
||||
anad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 30.3.2006 Репутация: нет Всего: нет |
Буду ждать.
|
|||
|
||||
Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 32 Всего: 61 |
anad,
Надо хотеть что-либо сделать и приложить хоть какие-то усилия. Вот я за 10 минут упростил свой вариант, который привел во втором посте этой темы
-------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
anad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 30.3.2006 Репутация: нет Всего: нет |
Я знаю, что здесь работают умные люди, спасибо!
Эта программа выравнивает текст по правому краю? А можно пояснения на русском языке? А указатели не надо использовать? |
|||
|
||||
Kuvaldis |
|
||||||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 32 Всего: 61 |
anad,
Нужно запустить и убедиться.. (выравнивает)
Строка - это уже указатель. ТУт в одном месте используется динамическая память.
ИМХО, в данной программе комменты и на английском очень информативны (лень мне переписывать). Суммируя вышесказанное, хочу сказать: сначала посмотри, что тебе предложили. И попытайся разобраться. И задавай вопросы по существу. Приятней общаться с человеком (даже если это и девушка), которого интересует не только результат. ![]() -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
||||||
|
|||||||
anad |
|
||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 30.3.2006 Репутация: нет Всего: нет |
Что означает?
Эти строки не понятны:
Что такое i и j и почему равны нулю в 84 строке. И еще не понятна строка 140. |
||||||
|
|||||||
Kuvaldis |
|
||||||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 32 Всего: 61 |
anad,
Идея алгоритма: 1. Получаем на вход строку 2. Считаем количество слов count в этой строке. 3. считаем количество необходимых пробелов в строке. Оно равно gapkol = максимальная длина строки - длина входной строки - количество проблелов во введенной строке. Данные пробелы нужно равномерно (!) распределить между словами. Если слов К шт., то количество групп пробелов между словами = К - 1. Между словами должно быть по возможности одинаковое кол-во пробелов. Разделим step = gapkol / count; ost = gapkol % count; strep - это количетство пробелов, которое всегда будет записываться. ost - будет меняться, это остаток от деления gapcol на количество слов. Например, у нас 4 слов и 14 пробелов. Тогда step = 14 / 4 = 3 ost = 2 Значит, у нас будет 2 группы пробелов по (2 + 1) = 4 символа, и 2 группы по 3 символа (мы "лишние" проблелы из ost распределяем по одному в каждую группу путем прибавления "хвоста" tail к основному количеству, пока их количество не станет нулем) В алгоритме еще отстлеживаются ситуации, когда количество слов равно 1, т.е. делать ничего не надо (или нужно просто убрать ведущие пробелы).
это динамическое выделение памяти под временную строку. Сначала мы получаем правильную временную строку, а потом уже в конце копируем ее в старую.
i - это указатель на текущий символ во входной строке j - указатель на текущий символ в выходной строке Индексы не совпадают, так как в выходную строку мы после каждого найденного слова дописываем необходимое количество пробелов.
Если текущий символ не является символом-разделителем (по умолчанию пробелы и некоторые другие). -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
||||||
|
|||||||
anad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 30.3.2006 Репутация: нет Всего: нет |
А что такое k, count и почему res=0 изначально?
str[i]=' '; ? n=strlen(str); ? Я так понимаю в задачи две функции? Добавлено @ 13:51 Забыла еще спросить, зачем нужны библиотеки: #include <stdlib.h> и #include <ctype.h> ? |
|||
|
||||
anad |
|
||||||||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 30.3.2006 Репутация: нет Всего: нет |
Не понятна разница между:
и
А это зачем?
и
И последний вопрос, как выводятся числа? |
||||||||
|
|||||||||
anad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 30.3.2006 Репутация: нет Всего: нет |
Может проще как-нибудь можно решить?
|
|||
|
||||
ivashkanet |
|
|||
![]() Кодю потиху ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3684 Регистрация: 23.2.2006 Где: Гомель, Беларусь Репутация: 9 Всего: 149 |
Блин, а сами будем что-нибудь делать?
По полочкам им разложили, код дали. Что еще сделать? Разжевать и в рот положить? Давайте-ка сами подумайте. Никто а вас всю работу делать не будет. А если хотите чтобы сделали, то вам сюда. Это сообщение отредактировал(а) ivashkanet - 1.12.2006, 22:07 |
|||
|
||||
Kuvaldis |
|
|||
![]() механик-вредитель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1189 Регистрация: 16.6.2006 Где: Минск Репутация: 32 Всего: 61 |
anad,
идею проще, чем я тебе описал, не придумать... Если хочешь, можешь сама сделать... ты мне напомнила анекдот Тетя звонит в online поддержку и говорит: -Я устанавливаю Вашу программу с комплекта дискет. Мне поступают сообщения "Вставьте следующую дискету" Я уже 5 с трудом вставила а 6-я не влезает. И что мне прикажете делать? Есть очень хороший способ узнать, зачем нужно то или иное описание - удали строку и посмотри, какие ошибки будут... Зачем нужны те или иные переменные? запусти программу по шагам и посмотри в явном виде, как она работает и куда что пишется.. -------------------- Помни - когда ты спишь, враг не дремлет Спи чаще и дольше, изматывай врага бессоницей |
|||
|
||||
anad |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 62 Регистрация: 30.3.2006 Репутация: нет Всего: нет |
Ок!Спасибо! Намучились наверное со мной.
|
|||
|
||||
Rockie |
|
||||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1143 Регистрация: 23.4.2006 Репутация: 13 Всего: 31 |
В свое время делал но на С++, со string. На красоту в данном случае не претендую, но все равно выложу, раз тему такую подняли. =)
Это сообщение отредактировал(а) Rockie - 2.12.2006, 00:13 -------------------- Чтобы иметь большой гардероб - надо иметь большой гардероб. |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Центр помощи" | |
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Центр помощи | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |