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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2009, 17:13   #1
Алексей_xXx
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 54
Печаль Помогите пожалуйста связать поле Memo с процедурой сортировки

не знаю как связать поле мемо, в которое ввожу числадля сортироки, с самой процедурой быстрой сортировки. Программа в Делфи пишу, а процедуру быстрой сортировки нашёл в инете, но там написано было что она вроде бля паскаля, вот незнаю так проканает или нет. Подскажите кто знает!


Это начало проги
unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;

type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;

var
FName: string;
Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
if OpenDialog1.Execute then
begin
FName := OpenDialog1.FileName;
Memo1.Lines.LoadFromFile(FName);
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Memo1.Lines.SaveToFile(FName);
end;

end.


ПРОЦЕДУРА СОРТИРОВКИ!

Procedure QuickSort(Left,Right:Integer;var X:myArr ); {Left - левая граница массива}
Var I,J,Y,W,L:Integer; {Right - правая граница массива}
Begin
I:=Left;
J:=Right;
Y:=X[(Left+Right) div 2];
Repeat
While X[I]>Y do Inc(I);
While Y>X[J] do Dec(J);
If I<=J then
begin
W:=X[I];
X[I]:=X[J];
X[J]:=W;
Inc(I);
Dec(J);
end;
Until I>J;
If Left<J then QuickSort(Left,J,X);
If I<Right then QuickSort(I,Right,X);
End;


а вот связать не могу их.......
Алексей_xXx вне форума Ответить с цитированием
Старый 04.05.2009, 17:23   #2
crystalbit
ГОСТ 2.403-75
Пользователь
 
Аватар для crystalbit
 
Регистрация: 04.05.2009
Сообщений: 92
По умолчанию

насколько я понимаю, эта процедура работает с массивом
попробуй процедуре передать Memo1.Lines.Strings
думаю, что еще стоит объявить тип
Код:
type
  MyArr = array of string;
Если вдруг что не сработает - попробуй перегнать строки в массив, думаю, что это не составит труда
и массив передаешь процедурке и получаешь отсортированный, потом снова в строки
мой скромный delphi блог
crystalbit вне форума Ответить с цитированием
Старый 04.05.2009, 18:08   #3
Алексей_xXx
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 54
По умолчанию

[QUOTE=crystalbit;255467]насколько я понимаю, эта процедура работает с массивом
попробуй процедуре передать Memo1.Lines.Strings


а как передать?
Алексей_xXx вне форума Ответить с цитированием
Старый 04.05.2009, 18:24   #4
crystalbit
ГОСТ 2.403-75
Пользователь
 
Аватар для crystalbit
 
Регистрация: 04.05.2009
Сообщений: 92
По умолчанию

переделал процедурку для массива строк, как-то так
Код:
type
  MyArr=array of string;

Procedure QuickSort(Left,Right:Integer;var X:myArr ); {Left - ëåâàÿ ãðàíèöà ìàññèâà}
var
  i,j:integer;
  y,w:string;
Begin
  i:=Left;
  j:=Right;
  y:=x[(Left+Right) div 2];
  Repeat
    While x[i]>y do Inc(I);
    While y>x[J] do Dec(J);
    If I<=J then begin
      w:=x[i];
      x[i]:=x[J];
      x[J]:=w;
      Inc(I);
      Dec(J);
    end;
  Until I>J;
  If Left<J then QuickSort(Left,J,X);
  If I<Right then QuickSort(I,Right,X);
End;

procedure TForm1.Button1Click(Sender: TObject);
var
  f:MyArr;
  i:integer;
begin
  for i:=0 to memo1.Lines.Count-1 do begin
    SetLength(f,i+1);
    f[i]:=memo1.Lines.Strings[i];
  end;
  quicksort(0,Length(f)-1,f);
  memo1.lines.Clear;
  for i:=0 to Length(f)-1 do
    memo1.Lines.Add(f[i]);
end;
но вся соль в том, что сортирует наоборот и с учетом регистра (ascii кода)

п.с. можно и так, если не принципиален метод
Код:
  with TStringList.Create do begin
    Text:=Memo1.Text;
    Sort;
    Memo1.Text:=Text;
    Free;
  end;
мой скромный delphi блог
crystalbit вне форума Ответить с цитированием
Старый 04.05.2009, 18:59   #5
Алексей_xXx
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 54
По умолчанию

А как она запускаеться? Я type прописываю вверху где все другие значения type написаны процедуру перед эндом пишу, а потом создаю поле мемо и кнопку как там написано. Затем на кнопку тыкаю и прописываю саму процедуру. А она ошибки выдает! Скажите что я не правильно делаю пожалуйста!
Алексей_xXx вне форума Ответить с цитированием
Старый 04.05.2009, 18:59   #6
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

вводить в Edit
по Enter переносим в ListBox сортируем Sorted=true Sort
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 04.05.2009, 19:14   #7
crystalbit
ГОСТ 2.403-75
Пользователь
 
Аватар для crystalbit
 
Регистрация: 04.05.2009
Сообщений: 92
По умолчанию

Цитата:
Сообщение от Алексей_xXx Посмотреть сообщение
А как она запускаеться? Я type прописываю вверху где все другие значения type написаны процедуру перед эндом пишу, а потом создаю поле мемо и кнопку как там написано. Затем на кнопку тыкаю и прописываю саму процедуру. А она ошибки выдает! Скажите что я не правильно делаю пожалуйста!
процедуру не в кнопку надо, а в межзвездное простанство, то есть вне процедуры
используй мой второй вариант и не будет проблем
evg_m, к черту ListBox, там тот же TStrings)
мой скромный delphi блог
crystalbit вне форума Ответить с цитированием
Старый 04.05.2009, 20:41   #8
Алексей_xXx
Пользователь
 
Регистрация: 29.04.2009
Сообщений: 54
По умолчанию

Спасибо crystalbit большое сделал как говоришь-заработало!. мне по Quiksort надо, 2ой вариант не катит.
У меня ещё вопросик. Прога сортирует по строкам, а для сортироки цифр которые написаны через пробелы поле Memo не подходит?

Последний раз редактировалось Алексей_xXx; 04.05.2009 в 20:45.
Алексей_xXx вне форума Ответить с цитированием
Старый 04.05.2009, 21:19   #9
crystalbit
ГОСТ 2.403-75
Пользователь
 
Аватар для crystalbit
 
Регистрация: 04.05.2009
Сообщений: 92
По умолчанию

Цитата:
Сообщение от Алексей_xXx Посмотреть сообщение
а для сортироки цифр которые написаны через пробелы поле Memo не подходит?
в массив загонять только)
мой скромный delphi блог
crystalbit вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Вставка в поле MEMO Joe_Tribbiani БД в Delphi 7 20.04.2009 20:02
Помогите пожалуйста в Pascal (Алгоритм сортировки) JayDe Помощь студентам 3 29.01.2009 19:13
Поиск в поле Memo omi БД в Delphi 6 01.03.2007 18:39