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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 05.11.2012, 07:25   #1
VaheN
Новичок
Джуниор
 
Регистрация: 05.11.2012
Сообщений: 12
Хорошо Создать программку в делфи: отсортировать слова в предложении по убыванию количества символов в слове

Разработать алгоритм и программу, получающую на вход предложение, слова в котором разделены пробелами.
Необходимо переформатировать порядок слов в предложении по убыванию количества символов в слове.
Например abcd bcf abcde db aaa, должен получить вид abcde abcd aaa bcf db.
Каким способом это можно сделать в делфи?С чего начать.Спасибо

Может кто подскажет видео урок.

Последний раз редактировалось VaheN; 05.11.2012 в 07:34.
VaheN вне форума Ответить с цитированием
Старый 05.11.2012, 08:45   #2
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

циклы и copy pos delete
Кольша вне форума Ответить с цитированием
Старый 05.11.2012, 09:30   #3
VaheN
Новичок
Джуниор
 
Регистрация: 05.11.2012
Сообщений: 12
По умолчанию

А есть у кого готовая такая программа?

Как я понимаю надо на форму добавить кнопку и мемо.Edit.
Вписываем в эдит порядок букв с пробелами.А он нам в мемо выдает по количеству букв.
VaheN вне форума Ответить с цитированием
Старый 05.11.2012, 09:52   #4
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
А есть у кого готовая такая программа?
на форме 2 edit и 1 button
Код:
procedure TForm4.Button1Click(Sender: TObject);
var TS:TstringList;
i,n,j:integer;
Buf:string;
begin
TS:=TStringList.Create;
TS.Delimiter:=' ';
buf:=trim(edit1.Text);
Ts.DelimitedText:=buf;
n:=Ts.Count-1;
for i := 0 to n-1 do
        for j := 0 to n-1 do
            if length(Ts[j]) < length(Ts[j+1])  then begin
                buf := Ts[j];
                Ts[j] := TS[j+1];
                TS[j+1] := buf
            end;
edit2.Text:=Ts.DelimitedText;TS.free;
end;
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"

Последний раз редактировалось Mad_Cat; 05.11.2012 в 11:06.
Mad_Cat вне форума Ответить с цитированием
Старый 05.11.2012, 10:45   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Mad_Cat, Вы, имхо, явно лишние циклы при сортировке крутите..

Может использовать сортировку простыми обменами?
Тогда вполне достаточно так написать:
Код:
for i := 0 to n-1 do
        for j := i+1 to n do
            if length(TS[i]) < length(TS[j])  then 
                     TS.Exchange(i,j);
я обмен строчек сделал встроенными методами TStringList - это намного эффективнее, чем делать обмен через внешнюю переменную.

и зачем очищать переменную Edit2 перед присвоением ей текста? Это абсолютно избыточно.
А где удаление памяти, выделенной под TS (TStringList) ?! Это же прямой путь к утечками памяти в программе!

программа целиком может выглядеть так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  TS:TstringList;
  i,j:integer;
begin
  TS:=TStringList.Create;
  TS.Delimiter:=' ';
  TS.DelimitedText:=trim(edit1.Text);
  for i := 0 to TS.Count-2 do
        for j := i+1 to TS.Count-1 do
            if length(TS[i]) < length(TS[j])  then
              TS.Exchange(i,j);

  edit2.Text := Ts.DelimitedText;;
  FreeAndNil(TS);
end;

Последний раз редактировалось Serge_Bliznykov; 05.11.2012 в 10:59.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 05.11.2012, 11:13   #6
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Serge, все равно, имхо задачку ТС-у не засчитают, так как задачка учебная и скорее всего нужны именно
Цитата:
циклы и copy pos delete
p.s. По поводу ваших замечаний, каюсь, Поторопился чуть(
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 05.11.2012, 11:40   #7
VaheN
Новичок
Джуниор
 
Регистрация: 05.11.2012
Сообщений: 12
По умолчанию

Задача почти правильная.

Только почему он вместо abcde abcd aaa bcf db, ставит abcde abcd bcf aaa db, алфавит не учитывается.
VaheN вне форума Ответить с цитированием
Старый 05.11.2012, 11:55   #8
Mad_Cat
Made In USSR!
Старожил
 
Аватар для Mad_Cat
 
Регистрация: 01.09.2010
Сообщений: 3,657
По умолчанию

Цитата:
Задача почти правильная
Дык сделайте ее Абсолютно Правильной
"...В жизни я встречал друзей и врагов.В жизни много всего перевидал.Солнце тело мое жгло, ветер волосы трепал,но я смысла жизни так и не узнал..."
(c) Юрий Клинских aka "Хой"
Mad_Cat вне форума Ответить с цитированием
Старый 05.11.2012, 12:08   #9
VaheN
Новичок
Джуниор
 
Регистрация: 05.11.2012
Сообщений: 12
По умолчанию

Да если бы я умел=(
VaheN вне форума Ответить с цитированием
Старый 05.11.2012, 12:36   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Да если бы я умел=(
Так учитесь!!!
Всё в ваших руках! я ни одного человека не встречал, на которого программирование снизошло с небес в виде откровения! Всем приходилось учиться, разбираться, изучать чужой код, решать учебные (и не учебные) задачи..

Цитата:
Только почему он вместо abcde abcd aaa bcf db, ставит abcde abcd bcf aaa db, алфавит не учитывается.
а я не увидел, чтобы в условиях задачи прозвучало такое требование...
Ладно, это несложно.
Раз Вас не смущает метод решения задачи,
а это чревато тем, что Вы решение не сможете сдать:
Цитата:
все равно, имхо задачку автору темы не засчитают, так как задачка учебная и скорее всего нужны именно:
"циклы и copy pos delete"
тогда, добавить сортировку по алфавиту можно так.
замените внутри сортировки сравнение (if ..) на такой код:
Код:
....
        for j := i+1 to TS.Count-1 do
            if (length(TS[i]) < length(TS[j])) or
                 ( (length(TS[i])= length(TS[j])) and
                      (TS[i]>TS[j]) )    then
              TS.Exchange(i,j);
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Расположить слова в каждом предложении в порядке невозрастания числа символов в них TLiX Помощь студентам 0 02.04.2012 10:52
отсортировать символы по убыванию частот sacreden Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 5 25.02.2012 15:55
ОТСОРТИРОВАТЬ максимумы по убыванию в матрице,а минимумы по возрастанию YooooO!!! Паскаль, Turbo Pascal, PascalABC.NET 1 22.01.2011 14:21
Отсортировать массив по убыванию в С++ sershok Помощь студентам 5 16.02.2009 00:31