Sortowanie babelkowe działa i nie

0

Witam.
Mam taki problem, mam napisać program który będzie sortował babelkowo, problem w tym, że program ten napisałem i normalnie mi działał, ale prof. chciał żeby ten program był z użyciem function. Próbowałem rzeźbić ale kiepsko mi to idzie. Poniżej kod programu. I niby coś tam działa ale nie sortuje mi liczb, tylko jakieś głupoty wyświetla. Plis o pomoc

unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  z: Array[1..100] of double;
  n:Integer;
  i: integer;

implementation

{$R *.dfm}
function sortb(var A: array of double): double;
var
t: Boolean;
i: integer;
c: double;
begin

 repeat
 t:=true; i:=n;
  repeat
  i:=i-1;
   if z[i+1]< z[i] then
    begin           //zamniana elementów jeżeli większy poprzedza mniejszy
    c:=z[i];
    z[i]:=z[i+1];
    z[i+1]:=c;
    t:=false;
    end;
  until i=1;
 until t=true;

 for i:=1 to n do


end;
procedure TForm1.Button1Click(Sender: TObject);
var
s: integer;
begin
n:=StrToInt(Edit1.text);ilosc liczb do posortowania z edit1                             liczba elementów do sorotwania
Button1.Enabled:=true;             //wlaczenie przycisku sortuj
randomize;                         //mieszanie liczb
for s:=1 to n do
 begin
 z[s]:=Random(200);                  //zakres nieposorotwanych od 0 do 200
 StringGrid1.Cells[0,s]:=floatToStr(z[s]); //dodawanie elentów do listy nieposortowane

 end;
StringGrid1.Cells[1,i]:=FloatToStr(z[i]);
end;

end. 

Ten kod poniżej mi działa, no ale niestety bez funkcji, a nie moge niestety nic mądrego wymyśleć z funkcją.
Porszę o pomoc.

unit SortB;

interface

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

type
  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    StringGrid1: TStringGrid;
    Edit1: TEdit;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  z: Array[1..100] of double;
  n:Integer;

implementation

{$R *.DFM}

procedure TForm1.Button2Click(Sender: TObject);
var a:Integer;
begin
n:=StrToInt(Edit1.text);ilosc liczb do posortowania z edit1                             liczba elementów do sorotwania
Button1.Enabled:=true;             //wlaczenie przycisku sortuj
randomize;                         //mieszanie liczb
for a:=1 to n do
 begin
 z[a]:=Random(200);                  //zakres nieposorotwanych od 0 do 200
 StringGrid1.Cells[0,a]:=floatToStr(z[a]); //dodawanie elentów do listy nieposortowane
 end;

 end;
procedure TForm1.Button1Click(Sender: TObject);

var
t: Boolean;
i: integer;
c: double;
begin

 repeat
 t:=true; i:=n;
  repeat
  i:=i-1;
   if z[i+1]< z[i] then
    begin           //zamniana elementów jeżeli większy poprzedza mniejszy
    c:=z[i];
    z[i]:=z[i+1];
    z[i+1]:=c;
    t:=false;
    end;
  until i=1;
 until t=true;

 for i:=1 to n do

  StringGrid1.Cells[1,i]:=FloatToStr(z[i]);
end;

end. 

// ja pier... jak ty żeś ten kod poformatował... jak ma zadziałać code>/code>kodkod code>/code>??? - Ł

0

Kod niesformatowany i niewstawiony w odpowiednie znaczniki,
także patrzeć się na to za bardzo nie chcę. Jednak nie wiem, z
czym konkretnie masz problem. Zastosuj działający kod tak by
działal w funkcji czy osobnej procedurze i tyle, coż doradzić ;/
A jeżeli chcesz gotowca, to jest od tego dział Offtopic - Praca.

0

Kurcze jestem poczatkujacy nie za bardzo wiem jak sie tu formatuje tekst. Wiec przepraszam.
A jezeli chodzi o gotowca, to nie chce, chciałbym z kims podyskutowac madrzejszym ode mnie, bo ogolnie ciemny jestem.

No i wlasnie mam problem z zastosowlaniem tego kodu dzialajacego w funkcji albo osobnej procedurze, poniewaz nie wiem jak to sie robi. A bardzo bym sie chcial dowiedziec :) jakby sie udalo to krok po kroku i co skad sie bierze i dlaczego, jezeli moglbym prosic :)

0

Kod w Delphi czy Pascalu powinno się wstawiać pomiędz znacznikiami
delphi (w ostrych nawiasach). Natomiast co do formatowania, jeśli nie
umiesz robić tego samodzielnie to skorzystaj z gotowego programu na
http://www.mediafire.com/?jzoitj5zjyc który nieco poprawiłem mając
jego kod źródlowy. Co do informacji o procedurach i funkcjach - to są
one opisane na: Procedury i funkcje
wystarczy, że przekażesz do procedury tę tablicę jako parametr, a ona
ma dokonać sortowania. Od biedy można użyć tutaj funkcji, ale takowa
wymagała by zadeklarowania własnego typu, łatwiej będzie procedurą.

0

OK, rzuciłem okiem i wyszło mi, co następuje.

Jeśli jako parametr metody przekazujesz tablicę, na której mają się odbyć operacje inne niż sam odczyt, to nie możesz robić tego tak, bo nawet jeśli napiszesz VAR, to on potraktuje to nie tak, jak myslisz ;>

Musisz stworzyć sobie nowy typ, np:

type
  TTab = array of double; //tablica dynamiczna
  //lub TTAB = array[0..100] of double jakok tablicę statyczną

I potem posługujesz się tym typem. I zmienną tego typu przekazujesz do parametru przez var.

1 użytkowników online, w tym zalogowanych: 0, gości: 1