Sortowanie przez wstawianie
Błąd pomoc.Aplikacja
Pytam się dlatego że nie wiem jak podlozyc to v zeby program sortowania dzialal dobrze.Próbowałem róznych sposobów ale nie poszlo to zostawiłem tak jak we wzorze.
Nie wypominajcie brak umiejetności i tak dalej bo nic to nie wniesie:P
Dzięki.
Serio myślisz, że wstawienie zdjęcia kodu to dobry pomysł? I co, mamy sobie ten fragment przepisać do IDE, a resztę kodu samodzielnnie uzupełnić? Niby jak mamy Ci pomóc? :|
Paweł Gagatko napisał(a):
Nie wypominajcie brak umiejetności i tak dalej bo nic to nie wniesie:P
Brak umiejętności programowania jest całkowicie normalny u kogoś, kto się dopiero uczy. Natomiast brak logicznego myślenia i zadawanie pytań na temat czegoś, o czym nas informujesz w sposób niewystarczający, już normalny nie jest.
Jeśli chcesz uzyskać pomoc to podaj kod całego programu (wklej go do posta lub dołącz cały projekt w załączniku) — w przeciwnym razie możemy napisać tylko tyle co IDE podpowiada, czyli tyle, że próbujesz liczbę przypisać do wskaźnika, co w Pascalu dozwolone nie jest, ze względu na silne typowanie.
Poza tym struktura tego kodu jest tragiczna — niby dzielisz go na procedury, ale w nich operujesz na zmiennych globalnych, nawet po to by iterować pętlę for
. Do tego w tytule podajesz, że problem dotyczy sortowania przez wstawianie, a w kodzie nie ma żadnego sortowania — jest tylko pobieranie danych z klawiatury i umieszczanie ich w odpowiednich miejscach listy (a to nie ma nic wspólnego z sortowaniem). A jakby tego było mało, robisz to w aplikacji okienkowej, która nie posiada konsoli, z której ReadLn
miałby pobierać dane.
Bajzel jest, tak się nie da programować. Utwórz aplikację konsolową i spróbuj ponownie. :/
Czy ten program powstaje do szkoły lub na studia? Bo mam przeczucie, że tak właśnie jest i ta cholerna patologia edukacyjna znów wychyla łeb z pracowni leśnych dziadków, nie mających bladego pojęcia o współczesnym programowaniu.
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls;
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Label1: TLabel;
Label2: TLabel;
ListBox1: TListBox;
ListBox2: TListBox;
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure ListBox1Click(Sender: TObject);
procedure ListBox2Click(Sender: TObject);
private
var e : integer;
public
end;
var
Form1: TForm1;
implementation
{$R *.lfm}
{ TForm1 }
type
tPLista = ^tLista;
tLista = record
x: integer;
Nastepny: tPLista;
end;
var
Lista: ^tLista;
Wezel_Pierwszy: ^tLista;
WezelNowy: ^tLista;
KoniecWezla: ^tLista;
Poczatek: tLista;
L :tPLista;
e, p :tPLista;
n :integer;
v :integer;
i :integer;
procedure TForm1.ListBox2Click(Sender: TObject);
begin
end;
procedure Sortuj;
begin
new ( L ); // tworzymy pierwszego strażnika
new ( L^.Nastepny ); // tworzymy drugiego strażnika
L^.Nastepny^.Nastepny := nil; // drugi strażnik jest ostatni na liście
L^.Nastepny^.x := MAXINT; // wartość drugiego strażnika
n:=20; // odczytujemy liczbę elementów
for i := 1 to n do
begin
// czytamy element
p := L; // p ustawiamy na pierwszego strażnika
while Lista^.x> p^.Nastepny^.x do // szukamy miejsca wstawienia
p := p^.Nastepny;
new ( e ); // tworzymy nowy element
e^.Nastepny := Lista; // inicjujemy element
e^.Nastepny := p^.Nastepny;
p^.Nastepny := e; // element wstawiamy do listy L
end;
p := L^.Nastepny; // listę przesyłamy na wyjście
while p^.Nastepny <> nil do
begin
write ( p^.x, ' ' );
p := p^.Nastepny;
end;
writeln;
while L <> nil do // usuwamy listę z pamięci
begin
e := L;
L := L^.Nastepny;
dispose ( e );
end;
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
begin
if Lista=nil then begin
new(Wezel_Pierwszy);
new(Lista);
Wezel_Pierwszy:=Lista;
i:=1 ;
randomize;
Lista^.x:=random(1000);
ListBox1.Items.Add(IntToStr(i)+' : '+IntToStr(Lista^.x));
end
else begin
while Lista^.Nastepny <> nil do Lista:=Lista^.Nastepny;
new(WezelNowy);
randomize;
WezelNowy^.x:=random(1000);
i:=i+1;
e:=0;
e:=e+1;
ListBox1.Items.Add(IntToStr(i)+' : '+IntToStr(WezelNowy^.x));
WezelNowy^.Nastepny:=nil;
Lista^.Nastepny:=WezelNowy;
if WezelNowy<>nil then begin
ListBox2.clear;
end;
end;
end;
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
Lista:=Wezel_Pierwszy;
e:=0;
while Lista <> nil do begin
e:=e+1;
ListBox2.Items.Add(IntToStr(e)+' : '+IntToStr(Lista^.x));
Lista:=Lista^.Nastepny;
if e>0 then begin
ListBox1.clear;
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
end;
procedure TForm1.ListBox1Click(Sender: TObject);
begin
end;
end.
Czy dużo mi brakuję żeby sortowało?(nie sortowałem jednokierunkowej wiec nw co moge tu zrobic)
Bardzo dużo — w tym kodzie nie wiadomo co się dzieje, wszystko jest na kupę, w dodatku tak nazwane, że nie wiadomo co jest czym. Wywal ten kod i napisz od nowa, tym razem w formie aplikacji konsolowej — szybciej będzie w ten sposób, niż szukać problemów w istniejącym kodzie.
No i jeszcze taka uwaga. Komentarze nie powinny opisywać tego co robisz. Jest tam zbyt dużo bezużytecznych komentarzy. Kod powinien być pisany w taki sposób, aby nazwy zmiennych, metod i klas mówiły co ten kod robi/ma robić.
Kolejna kwestia to stosowanie polskich nazw zmiennych, metod i klas. FUUUUUJ
Kolejna, kolejna kwestia, to odstępy. W procedurze Sortuj
odstępy są wrzucane tutaj jak popadnie a one mają oddzielać pewne części kodu między sobą w jednej metodzie.
Dzięki za rady nie trace czasu na to bo widocznie bardzo zle:)