![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
сортировка методом Шелла [D7, XP]
Nostalgia © (2010-04-12 14:08:00)Мне нужно с помощью Эдита ввести целочисленный масив, который должен отобразится в мемо1. потом этот масив должен пройти сортировку методом Шелла и отобразится в Мемо2. я новичек и не уверена, что правильно работаю с масивом и считываю его с Эдита как масив, а не как обычный текст. Пожалуйста, исправьте ошибки или укажите на них мне, чтоб я знала, что не так.
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
const
n=7;
type
TForm1 = class(TForm)
Memo1: TMemo;
Memo2: TMemo;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Edit1: TEdit;
procedure Button3Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
type
SEQ=array[1..N] of integer;
procedure Sort;
var
Form1: TForm1;
i:byte;
a:SEQ;
implementation
{$R *.dfm}
procedure TForm1.Button3Click(Sender: TObject);
begin
Form1.Close;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
s:Ansistring;
z:byte;
begin
z:=1;
for i:=1 to n do
s:=s+Edit1.Text[i];
if Edit1.Text[i]=' ' then begin
a[z]:=StrToInt(s);
s:='';
z:=z+1;
end;
Memo1.Lines.Add(Edit1.Text);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
Sort;
for i:=1 to n do
Memo1.Lines.Add(inttostr(a[i]));
end;
procedure Sort( var a:seq);
var
d,i,t:integer;
k:boolean;
begin
d:=N div 2;
begin
k:=true;
while k do
begin
k:=false;
i:=1;
for i:=1 to N-d do
begin
if a[i]>a[i+d] then begin
t:=a[i];
a[i]:=a[i+d];
a[i+d]:=t;
k:=true;
end;
d:=d div 2;
end;
end;
end;
end;
end.
Dennis I. Komarov (2010-04-12 15:48:00) [1]
> Jeer © (12.04.10 15:40) [6]
И оперы, "как надо задавать вопросы" :)
Jeer (2010-04-12 15:40:00) [2]"И все бросились спасать дэвушку, которая даже ничего не пообещала" (С)
12 (2010-04-12 14:51:00) [3]IDs : array of integer;
showmessage('А если ты после последнего числа не поставил зпт и вводишь всякую фигню - это твои проблемы. Поехали, смертнички :)');
sIDs := Edit1.Text;
s:='';
for i := 1 to Length(sIDs) do
begin
if sIDs[i] <> ',' then s := s + sIDs[i]
else begin
SetLength(IDs, length(IDs) + 1);
IDs[length(IDs)-1] := StrToInt(s);
s := '';
end;
end;
Как-то так (2010-04-12 14:41:00) [4]ура, стеки кончились
*С ужасом в голосе* А если не кончились? А если еще одна напасть?
Игорь Шевченко (2010-04-12 14:28:00) [5]ура, стеки кончились
12 (2010-04-12 14:25:00) [6]
> for i:=1 to n do
> s:=s+Edit1.Text[i];
-- цикл закончен, потому ерунда, проще s := Edit1.Text;
if Edit1.Text[i]=' ' then begin -- j уже неопределена, т.к. -- цикл закончен
далее лень смотреть
бардак..
Как-то так (2010-04-12 14:24:00) [7]
z := 1;
s := '';
for i := 1 to Length(Edit1.Text) do
if Edit1.Text[i] = ' ' then
if TryStrToInt(s, a[z]) then
begin
Memo1.Lines.Add('a[' + IntToStr(z) + '] = ' + s);
s := '';
z := z + 1;
end
else
Memo1.Lines.Add('Errorneous integer: ' + s);
else
s := s + Edit1.Text[i];