Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

сортировка методом Шелла [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];


Наверх

Титульная страница Поиск, карта сайта Написать письмо