Sortowanie przez wstawianie

0

screenshot-20220206233420.png
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.

0

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.

0
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)

0

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.

4

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.

0

Dzięki za rady nie trace czasu na to bo widocznie bardzo zle:)

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