Делала лабораторные работы по программированию и наткнулась на эту задачу. Вроде не трудная, но не получается накодить никак. И так и сяк пробовала. В интернете решения нет ( Помогите, если не затруднит.
В текст, содержащий меньше 50 символов, равномерно вставить пробелы между словами, чтобы его длина составляла ровно 50 символов.
Другие языки программирования и технологии
Пожалуйста, помогите с задачкой на Delphi
Совсем равномерно не получится, ибо слов может быть шесть, а вставить нужно будет 7 пробелов.
Т. е. получается, что 2 пробела должны быть сдвоенными, а 3 одинарными.
Алгоритм очень прост:
— посчитать количество разрывов в строке и удалить их, сохранив позиции начала слова в массив (пусть их количество разрывов CountBreacs )
— получить общее количество добавляемых пробелов CountSpace = CountChars – LengthString (длина строки уже без пробелов)
— теперь начиная с последней позиции в массиве будем добавлять пробелы в количестве
InsertSpace = Trunc(CountSpace div CountBreak) — целое от деления оставшихся разрывов на номер разрыва
с каждым разом уменьшая CountSpace = CountSpace – InsertSpace
и (конечно же) CountBreak = CountBreak – 1
К примеру:
~~~~~~~~~~~~~~~~~
Дана фраза: "Эта_задача_решаема". Добавить пробелов до длины строки в 21 символ.
Удаляем пробелы и запоминаем позиции: "Этазадачарешаема" (4,10)
Длина полученной строки 16. Т. е. нужно добавить 21–16=5 пробелов.
Добавляем в позицию 10 два пробела ( 5 div 2 = 2 ): "Этазадача__решаема"
Остаётся 5–2=3 — добавляем в поз. 4 три пробела ( 3 div 1 = 3 ): "Эта___задача__решаема"
Готово!
(использовал „_“, вместо пробелов для наглядности)
Т. е. получается, что 2 пробела должны быть сдвоенными, а 3 одинарными.
Алгоритм очень прост:
— посчитать количество разрывов в строке и удалить их, сохранив позиции начала слова в массив (пусть их количество разрывов CountBreacs )
— получить общее количество добавляемых пробелов CountSpace = CountChars – LengthString (длина строки уже без пробелов)
— теперь начиная с последней позиции в массиве будем добавлять пробелы в количестве
InsertSpace = Trunc(CountSpace div CountBreak) — целое от деления оставшихся разрывов на номер разрыва
с каждым разом уменьшая CountSpace = CountSpace – InsertSpace
и (конечно же) CountBreak = CountBreak – 1
К примеру:
~~~~~~~~~~~~~~~~~
Дана фраза: "Эта_задача_решаема". Добавить пробелов до длины строки в 21 символ.
Удаляем пробелы и запоминаем позиции: "Этазадачарешаема" (4,10)
Длина полученной строки 16. Т. е. нужно добавить 21–16=5 пробелов.
Добавляем в позицию 10 два пробела ( 5 div 2 = 2 ): "Этазадача__решаема"
Остаётся 5–2=3 — добавляем в поз. 4 три пробела ( 3 div 1 = 3 ): "Эта___задача__решаема"
Готово!
(использовал „_“, вместо пробелов для наглядности)
В цикле прогоняй строку, если найдешь пробел - добавляешь и дальше до конца строки. каждый раз проверяй весь текст на длину. И так делай пока весь текст не станет 50 символов.
Похожие вопросы
- Пожалуйста, помогите решить задачку по информатике...
- Помогите решить задачки в turbo delphi
- Паскаль! Помогите пожалуйста разобраться в задачке.
- Помогите сделать проект по Delphi ПОЖАЛУЙСТА...
- Помогите с кодом в Delphi, пожалуйста!
- Задачка на Delphi, рекурсия...
- Помогите составить задачу в Delphi
- Помогите решить задачку простенькую.
- программисты помогите срочно задача на Delphi
- помогите составить калькулятор на Delphi ?