Na forum 4programmers.net korzystamy z plików cookies. Część z nich jest niezbędna do funkcjonowania
naszego forum, natomiast wykorzystanie pozostałych zależy od Twojej dobrowolnej zgody, którą możesz
wyrazić poniżej. Klikając „Zaakceptuj Wszystkie” zgadzasz się na wykorzystywanie przez nas plików cookies
analitycznych oraz reklamowych, jeżeli nie chcesz udzielić nam swojej zgody kliknij „Tylko niezbędne”.
Możesz także wyrazić swoją zgodę odrębnie dla plików cookies analitycznych lub reklamowych. W tym celu
ustaw odpowiednio pola wyboru i kliknij „Zaakceptuj Zaznaczone”. Więcej informacji o technologii cookie
znajduje się w naszej polityce prywatności.
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? :|
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+}interfaceuses
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);privatevar e : integer;publicend;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);beginend;procedure Sortuj;beginnew( L );// tworzymy pierwszego strażnikanew( 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ówfor i :=1to n dobegin// czytamy element
p := L;// p ustawiamy na pierwszego strażnikawhile 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 Lend;
p := L^.Nastepny;// listę przesyłamy na wyjściewhile p^.Nastepny <>nildobeginwrite( p^.x,' ');
p := p^.Nastepny;end;
writeln;while L <>nildo// usuwamy listę z pamięcibegin
e := L;
L := L^.Nastepny;dispose( e );end;end;procedure TForm1.Button2Click(Sender: TObject);beginbeginif Lista=nilthenbeginnew(Wezel_Pierwszy);new(Lista);
Wezel_Pierwszy:=Lista;
i:=1;
randomize;
Lista^.x:=random(1000);
ListBox1.Items.Add(IntToStr(i)+' : '+IntToStr(Lista^.x));endelsebeginwhile Lista^.Nastepny <>nildo 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<>nilthenbegin
ListBox2.clear;end;end;end;end;procedure TForm1.Button3Click(Sender: TObject);begin
Lista:=Wezel_Pierwszy;
e:=0;while Lista <>nildobegin
e:=e+1;
ListBox2.Items.Add(IntToStr(e)+' : '+IntToStr(Lista^.x));
Lista:=Lista^.Nastepny;if e>0thenbegin
ListBox1.clear;end;end;end;procedure TForm1.FormCreate(Sender: TObject);beginend;procedure TForm1.ListBox1Click(Sender: TObject);beginend;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.