Niezalogowany (Zaloguj się)
WItaj Gościu! Możesz się teraz zalogować lub poprosić o członkowstwo na Forum Turbo Pascal Web Pag
    • CommentAuthordługi
    • CommentTime11 Feb 2008 zmieniony
     
    cześć jestem tu zaledwie 10 min i widzę ze możecie mi pomóc. jak większość mam problem z napisaniem programu w turbo Pascalu pomocy za 2 dni mam zaliczenie Quicsort – sortowanie szybkie trzeba dla wybranego z listy A(i) elementu dzielącego (najczęściej jest to pierwszy element) podzielić pozostała cześć listy na dwie części : elementów mniejszych od elementu dzielącego oraz elementów większych od tego elementu. w tym celu dla każdego i = 2,3…,n sprawdza się relacje A(1) <= A(i) i jeśli jest ona spełniona zapisuje się element A (i) na kolejne wolne miejsce w liście elementów większych , a w przypadku nie spełnienia relacji zapisuje się element A (i) na kolejne wolne miejsce w liście elementów mniejszych ; kończąc podział dopisując element dzielący A (1) na końcu listy elementów mniejszych. następnie powtarza się te operacje oddzielnie dla każdej z nowo powstałych list , Az do momentu , gdy w kolejnych krokach nie powstaną już żadne podzielone listy. to właśnie tekst do zadania wszystkich co mogą mi pomóc bardzo o to proszę . pomysły prosze przesyłac na krzysiek2786@wp.pl
    • CommentAuthorsteficzek
    • CommentTime11 Feb 2008 zmieniony
     
    O dziesięć minut za mało żeby kogokolwiek prosić o pomoc... Na 100% na tym forum jest program wykorzystujący procedurę quicksort, więc z szacunku dla osób odpowiadających na forum proponuję Ci zmarnować kolejne 5 min na szukanie odpowiedzi na Twoje pytanie w istniejących Wątkach

    Pozdrawiam
    • CommentAuthordługi
    • CommentTime12 Feb 2008
     
    panie Stefanie niestety nie mogę znaleźć tego programu nie chodzi mi tu o sortowanie ba belkowe. Pewnie ma pan racje ze to gdzieś tu jest ale niestety nie umiem tego znaleźć . dlatego prosił bym pana bardzo o pomoc.
    • CommentAuthordługi
    • CommentTime12 Feb 2008
     
    kto szuka ten znajdzie jest tak jak pan mówił sortowanie ale niestety nic z tego nie kumam dla mnie to czarna magia. proszę o pomoc . kolega mi przysłał cos takiego : Program QuickSort; var A : array[1..10] of real; e : integer; procedure Sort(first, last : integer); var i, j : integer; podzial, x : real; begin i := first; j := last; podzial := A[(first + last) div 2]; repeat while A < podzial do Inc(i); while podzial < A[j] do Dec(j); if i <= j then begin x := A[i]; A[i] := A[j]; A[j] := x; Inc(i); Dec(j); end; until (i > j); if first < j then Sort(first, j); if i < last then Sort(i, last); end; begin for e:=1 to 10 do begin A[e] := random; writeln(A[e]); end; readln; Sort(1,e); for e:=1 to 10 do writeln(A[e]); readln; end. niestety profesor powiedział ze to jest zle
    • CommentAuthordługi
    • CommentTime12 Feb 2008
     
    Program QuickSort; var A : array[1..10] of real; e : integer; procedure Sort(first, last : integer); var i, j : integer; podzial, x : real; begin i := first; j := last; podzial := A[(first + last) div 2]; repeat while A < podzial do Inc(i); while podzial < A[j] do Dec(j); if i <= j then begin x := A[i]; A[i] := A[j]; A[j] := x; Inc(i); Dec(j); end; until (i > j); if first < j then Sort(first, j); if i < last then Sort(i, last); end; begin for e:=1 to 10 do begin A[e] := random; writeln(A[e]); end; readln; Sort(1,e); for e:=1 to 10 do writeln(A[e]); readln; end.
    • CommentAuthordługi
    • CommentTime12 Feb 2008
     
    widzi sam pan taki jestem dobry ze nie wiem jak to panu wysłać by pan na to zerknął
    • CommentAuthorsteficzek
    • CommentTime12 Feb 2008
     
    Wystarczy Stefan :D

    Zamykaj kod w pascalu w znacznikach [ code] twój kod [/code] ułatwi to nam życie
    • CommentAuthorsteficzek
    • CommentTime12 Feb 2008 zmieniony
     
    var Tablica : array [0..9] of Integer; procedure QuickSort(Var Tablica : array of Integer;Lewo,Prawo : Integer); var Srodek,a,i,j : Integer; begin if Lewo<Prawo then begin Srodek:=Tablica[Random(Prawo-Lewo)+Lewo+1]; i:= Lewo-1; j:= Prawo+1; repeat repeat i:=i+1 until Srodek<=Tablica[ i]; repeat j:=j-1 until Srodek>=Tablica[ j]; a:=Tablica[ i]; Tablica[ i]:=Tablica[ j]; Tablica[ j]:=a until i>=j; Tablica[ j]:=Tablica[ i]; Tablica[ i]:=a; QuickSort(Tablica,Lewo,i-1); QuickSort(Tablica,i,Prawo) end end; Var i : Integer; Begin Randomize; for i:=0 to 9 do Tablica[ i]:=Random(256); Write('Nieposortowane:'); for i:=0 to 9 do Write(Tablica[ i],','); Writeln; QuickSort(Tablica,0,9); Write('Posortowane :'); for i:=0 to 9 do Write(Tablica[ i],','); Readln End.

    Zasada działania jest ogólnie prosta, postaram Ci się ją przybliżyć.

    Żeby opisać w/w procedurę trzeba zrozumieć rekurencję, czyli wywołanie procedury samą przez siebie.
    Oczywiście w takiej procedurze musi być warunek wyjścia (zakończenia).

    Najprostszym przykładem rekurencji jaki przychodzi mi na mysl, jest to szczeniacki dowcip czyli wpisanie do pliku autoexec.bat wywołania pliku autoexec.bat
    Co dla nieświadomego użytkownika oznaczało uruchamianie w nieskonczoność tegoż pliku, i zatrzymanie systemu.
    Dlatego też w takiej procedurze powinien znaleźć się warunek wyjścia, żeby przerwać pętlę nieskończoną.

    Zadaniem procedury jest dzielenie tablicy na dwie cześci (lewa i prawą)
    Czyli kolejno:
    - losowo wybieramy pewien element tablicy, który podzieli nam tablicę na dwie części
    - na lewo przenosimy wszystkie elementy mniejsze od tego elementu
    - na prawo wszystkie większe od niego
    - a po środku ląduje wylosowany przez nas element

    i tu następuje nasza rekurencja lub jak kto woli rekursja (czyli wywolujemy procedurę samą w sobie)
    czyli znowu:
    - sortujemy osobno lewą część dzieląc ja znowu na dwie
    - potem prawą
    itd, aż...

    uzyskany podział zawiera tylko jeden element i tu pojawia się nasz kochany warunek wyjścia
    no bo przecież nie ma już co dzielić na pół.

    Znalazłem w sieci coś takiego, bardziej obrazowo się już chyba nie da...



    Pozdrawiam
    • CommentAuthordługi
    • CommentTime13 Feb 2008
     
    dziękuje panu serdecznie niech pan żyje wieczność i pomaga tak jak do tej pory. mam jeszcze 1 problem a mianowicie narysować algorytm postępowania do tego właśnie sortowania. wiec również proszę o pomoc.
    • CommentAuthorsteficzek
    • CommentTime13 Feb 2008 zmieniony
     

    Like in Mortal Combat - That's enough!!!

    Może powinienem go narysować i wysłać pocztą na wskazany adres? <- ironia szyta grubą nicią!
    Do niedawna wydawało mi się że są jakieś granice.
    Na Boga! przecież kod programu który otrzymałeś to nic innego jak algorytm

    Lubię pomagać innym, ale nienawidzę jak się tego faktu nadużywa.