Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 03.05.2008, 15:34   #1
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
Радость Перенести слова из массива в строки

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

Суть:
Есть массив со словами (mas[1]='слово_1', mas[2]='слово_2', ..., mas[n]:='слово_n'. Нужно слова из этого массива перенести в строки определенной длины. Причем, если следующее слово из массива не "влезает" в строку, нужно перенести его в следующую строку и так далее. И в этих строках нужно расставить между словами по возможности одинаковое число пробелов, так чтобы последний символ последнего слова, попадал в "место" последнего символа строки, т.е. если у нас длина строки, например, 40, то 40-ой символ в этой строке должен быть последним символом последнего слова, по сути, нужно "раздвинуть" слова в строке...

Надеюсь, что объяснил понятно... Вопрос в следующем: как наиболее эффективным способом это осуществить?

Последний раз редактировалось Xardas; 03.05.2008 в 16:40.
Xardas вне форума Ответить с цитированием
Старый 03.05.2008, 16:47   #2
alexBlack
Участник клуба
 
Регистрация: 12.10.2007
Сообщений: 1,204
По умолчанию

Общая схема:

Код:
F := 1;                      // последнее использованное слово
L := length(mas[1]);    // Берем первое слово
for i:=1 to N do begin //проходим по массиву 
   if L + length(mas[i])+1 > LMax then begin
                              // Слово не помещается 
     flush(F, i-1);        // Сбрасываем все накопленные слова 
     F := i;                // Следующая строка начинается со слова i
     L := length(mas[i]);
   end else 
     inc(L, length(mas[i])+1)  
   end;
end;
// В конце массива сбрасываем оставшиеся слова 
flush(F, N);

// И отдельная процедура, которая будет помещать слова в строку
// добавляя между ними пробелы
procedure flush(N1, N2)
begin
    // Здесь формируем строку из слов N1-N2 массива
end;
alexBlack вне форума Ответить с цитированием
Старый 04.05.2008, 12:34   #3
Xardas
Сисадмин
Форумчанин
 
Аватар для Xardas
 
Регистрация: 28.12.2007
Сообщений: 320
По умолчанию

alexBlack, огромнейшее Вам спасибо!!! Все на самом деле действительно оказалось просто .
Xardas вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перенести в новую книгу отмеченые строки Rom1k06 Microsoft Office Excel 11 31.07.2008 12:22
переписать из массива в линейный двунаправленный список чётные элементы массива Black_Ak24 Помощь студентам 12 08.01.2008 00:44