MAm taki problem. Musze napisac program soortujacy 2 sposobami i porownoje ilosci krokow obu posobow. Napisalem program ale niedziala funkcja sortowania przzez scalanie. Jestem slaby w programowaniu, moze ktos pomoze <ort>znaleŹĆ</ort> mi jakies bledy. Ponizej zapodaje caly kod zrodlowy:
ps. pisze w delphi 7
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Buttons, Spin, ComCtrls;
type
TForm1 = class(TForm)
RichEdit1: TRichEdit;
RichEdit2: TRichEdit;
Label1: TLabel;
Label3: TLabel;
SpinEdit1: TSpinEdit;
Label4: TLabel;
bbLosuj: TBitBtn;
bbZakoncz: TBitBtn;
bbSortuj: TBitBtn;
bbWyczysc: TBitBtn;
Label2: TLabel;
Label5: TLabel;
BitBtn1: TBitBtn;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
Label10: TLabel;
Label11: TLabel;
Label12: TLabel;
Label13: TLabel;
bbZapisz: TBitBtn;
SaveDialog1: TSaveDialog;
bbWczytaj: TBitBtn;
OpenDialog1: TOpenDialog;
procedure bbZakonczClick(Sender: TObject);
procedure bbLosujClick(Sender: TObject);
procedure bbWyczyscClick(Sender: TObject);
procedure bbZapiszClick(Sender: TObject);
procedure bbWczytajClick(Sender: TObject);
procedure bbSortujClick(Sender: TObject);
procedure BitBtn1Click(Sender: TObject);
procedure RichEdit2Change(Sender: TObject);
private
procedure fenster_leeren (var n : integer);
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
var
N:INTEGER;
a : array [1..100] of INTEGER;
procedure TForm1.bbZakonczClick(Sender: TObject);
begin
close;
end;
procedure TForm1.bbLosujClick(Sender: TObject);
var
i:INTEGER;
begin
N:=StrToInt(SpinEdit1.text);
Randomize;
FOR i:=1 TO N DO
a[i]:=Random(100);
FOR i:=1 TO N DO
RichEdit1.Lines.Add('a ['+IntToStr(i)+'] = '+ IntToStr(a[i]));
bbLosuj.Enabled:=FALSE;
end;
procedure TForm1.bbWyczyscClick(Sender: TObject);
begin
RichEdit1.Clear;
RichEdit2.Clear;
bbLosuj.Enabled:=TRUE;
end;
procedure TForm1.bbZapiszClick(Sender: TObject);
begin
IF SaveDialog1.Execute THEN RichEdit1.lines.SaveToFile(SaveDialog1.FileName);
end;
procedure TForm1.bbWczytajClick(Sender: TObject);
begin
IF OpenDialog1.Execute THEN RichEdit1.lines.LoadFromFile(OpenDialog1.FileName);
end;
procedure TForm1.bbSortujClick(Sender: TObject);
var
i,j,k : INTEGER;
x : INTEGER;
ipor, iprze : INTEGER;
begin
ipor:=0;
iprze:=0;
for i := 1 to n - 1 do
begin
k := i;
x := A[i];
for j := i + 1 to n do
begin
if A[j] < x then
begin
k := j;
x := A[j];
Inc(iprze);
end;
Inc(ipor);
end;
a[k] := a[i];
a[i] := x;
end;
FOR i:=1 TO N DO
RichEdit2.Lines.Add('a ['+IntToStr(i)+'] = '+ IntToStr(a[i]));
label5.Caption:=IntToStr(ipor);
label12.caption:=IntToStr(iprze);
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
Procedure Scalanie(Var start, stop : Integer);
Var
l, m, r, sr : Integer;
tmp : array [1..100] of INTEGER;
Begin
For l:=start To stop Do tmp[l]:=a[l];
sr:=(start+stop) Div 2;
l:=start;
m:=start;
r:=sr+1;
While (m<=sr) And (r<=stop) Do
Begin
If tmp[m]<tmp[r] Then
Begin
a[l]:=tmp[m];
m:=m+1;
End
Else
Begin
a[l]:=tmp[r];
r:=r+1;
End;
l:=l+1;
End;
If m>sr Then
While r<=stop Do
Begin
a[l]:=tmp[r];
r:=r+1;
l:=l+1;
End
Else
While m<=sr Do
Begin
a[l]:=tmp[m];
m:=m+1;
l:=l+1;
End;
End;
Procedure Sort(Var l, r : Integer);
var
m : integer;
Begin
If (l<r) Then
Begin
m:=(l+r) Div 2;
Sort(l,m);
Sort(m+1,r);
Scalanie(l, m, r);
End;
End;
begin
mischsortiere(1, N);
begin
for mitte:=1 to N do
RichEdit2.Lines.Add(FloatToStr(feld[i]));
end;
end;
end.