[#1] problem z progamem w pascalu
Może mi ktos pomóc. Mianowicie nei chce mi ten program sortować liczb. Czy ktokolwiek wie jak moża zrobić aby ten program mógł sortowac???
Jeśli tak to bede wdzićczny za pomoc
a o to ten program:



PROGRAM Sort;
USES CRT;
CONST
wymiar=100;
MAXWART=20000;
TYPE
TElement=INTEGER;
tablice=ARRAY[0..wymiar] OF TElement;
typ =INTEGER;
VAR a:tablice;
jk,n:integer;
z:char;
PROCEDURE Zamien(VAR a,b:TElement);
VAR p:TElement;
BEGIN
p:=a;
a:=b;
b:=p;
END;

PROCEDURE InsertionSort(VAR tabl:tablice;d,g:typ);
VAR
i,j :INTEGER;
w:TElement;

BEGIN
i:=d+1;
WHILE i<=g DO
BEGIN
w:=tabl[i];
j:=i;
WHILE (j>d) AND (w BEGIN
tabl[j]:=tabl[j-1];
DEC(j)
END;
tabl[j]:=w;
INC(i)
END
END; {InsertionSort}


PROCEDURE InsertSortWart (VAR tabl:tablice;d,g:typ);
VAR
j,i:INTEGER;
w :TElement;

BEGIN
i:=d+1;
WHILE i<=g DO
BEGIN
w:=tabl[i];
tabl[0]:=w;
j:=i;
WHILE w BEGIN
tabl[j]:=tabl[j-1];
DEC(j)
END;
tabl[j]:=w;
INC(i)
END
END; {InsertSortWart}

PROCEDURE InsertSortWart2 (VAR tabl:tablice;d,g:typ);
VAR
j,i:INTEGER;
w :TElement;

BEGIN
i:=d+1;
WHILE i<=g DO
BEGIN
w:=tabl[i];
tabl[0]:=w;
j:=i;
WHILE w DEC(j);
MOVE(tabl[j],tabl[j+1],sizeof(TElement)*(i-j));
tabl[j]:=w;
INC(i)
END
END; {InsertSortWart2}

PROCEDURE InsertSort2(VAR tab:tablice;CONST n:INTEGER);
VAR
pom:TElement;
i,j:INTEGER;
d,g,s:INTEGER;

BEGIN
FOR i:=2 TO n DO
BEGIN
IF tab[i-1]>tab[i]
THEN
BEGIN {element i nie jest na swoim miejscu}
pom:=tab[i];
d:=1;
g:=i-1;
WHILE d<=g DO
BEGIN
s:=(d+g) SHR 1;
{szybsze niz (d+g) div 2}
IF tab[s]<=pom
THEN d:=succ(s)
ELSE g:=pred(s)
END;
move(tab[s],tab[s+1],sizeof(TElement)*(i-s));
{duzo szybsze niz ciag przepisan}
tab[s]:=pom
END
END
END;

PROCEDURE ShellSort(VAR tabl:tablice;d,g:typ);
VAR
k,i,j:INTEGER;
w :TElement;

BEGIN
k:=1;
WHILE k k:=k+k;
WHILE k>1 DO
BEGIN
k:=k DIV 2;
i:=d+k;
WHILE i<=g DO
BEGIN
w:=tabl[i];
j:=i;
WHILE (j-k>=d) AND (w BEGIN
tabl[j]:=tabl[j-k];
DEC(j,k)
END;
tabl[j]:=w;
Inc(i)
END
END
END; {ShellSort}

PROCEDURE ShellWirth(VAR tabl:tablice;d,g:typ);
CONST
t=4;
VAR
i,j,k,s:typ;
w :TElement;
m :1..t;
h :ARRAY[1..t] OF INTEGER;
BEGIN
h[1]:=9;
h[2]:=5;
h[3]:=3;
h[4]:=1;
FOR m:=1 TO t DO
BEGIN
k:=h[m];
s:=-k; {miejsce wartownika}
FOR i:=k+1 TO g DO
BEGIN
w:=tabl[i];
j:=i-k; {element porownywany i przesuwany}
IF s=0
THEN s:=-k;
s:=s+1; {okreslenie miejsca wstawienia wartownika dla
kolejnych elementow}
tabl[s]:=w;
WHILE w BEGIN
tabl[j+k]:=tabl[j];
j:=j-k
END;
tabl[j+k]:=w
END
END
END;

PROCEDURE BubbleSort(VAR tabl:tablice;d,g:typ);
VAR
i,j:INTEGER;

BEGIN
WHILE g>d DO
BEGIN
j:=d;
FOR i:=d TO g-1 DO
IF tabl[i]>tabl[i+1]
THEN
BEGIN
zamien(tabl[i],tabl[i+1]);
j:=i
END;
g:=j
END
END; {BubbleSort}

PROCEDURE QuickSort(VAR tabl:tablice;dol,g:typ);
PROCEDURE sort(d,g:typ);
VAR
i,j,s:typ;
w:TElement;
BEGIN
i:=d;
j:=g;
s:=(d+g) DIV 2;
w:=tabl[s];
REPEAT
WHILE tabl[i] INC(i);
WHILE tabl[j]>w DO
DEC(j);
IF i<=j
THEN
BEGIN
zamien(tabl[i],tabl[j]);
INC(i);
DEC(j)
END
UNTIL i>j;
IF d THEN sort(d,j);
IF i THEN sort(i,g)
END; {sort}
BEGIN {QuickSort}
sort(1,wymiar)
END; {QuickSort}
PROCEDURE SelectionSort(VAR tabl:tablice;d,g:typ);
VAR
i,j,nrmin,w:typ;

BEGIN
FOR i:=d TO g-1 DO
BEGIN
nrmin:=i;
w:=tabl[nrmin];
FOR j:=i+1 TO g DO
IF tabl[j] THEN
BEGIN
nrmin:=j;
w:=tabl[nrmin]
END;
zamien(tabl[nrmin],tabl[i])
END
END; {SelectionSort}
PROCEDURE HeapSort(VAR tabl:tablice;d,g:typ; p:byte);
VAR
w,i,j:typ;
PROCEDURE WGore(k:typ);
VAR i:typ;
w:TElement;
BEGIN
w:=tabl[k];
tabl[0]:=MAXWART;
i:=k SHR 1; {k DIV 2}
WHILE tabl[i] BEGIN
tabl[k]:=tabl[i];
k:=i;
i:=i SHR 1; {i DIV 2}
END;
tabl[k]:=w
END;

PROCEDURE WDol(k,n:typ);
VAR
i:typ;
w:TElement;
znal:BOOLEAN;
BEGIN
w:=tabl[k];
znal:=FALSE;
j:=2*k;
WHILE (j<=n) AND NOT znal DO
BEGIN
IF j THEN
IF tabl[j] THEN INC(j);
IF w THEN
BEGIN
tabl[k]:=tabl[j];
k:=j;
j:=2*k;
END
ELSE Znal:=TRUE;
END;
tabl[k]:=w;
END; {w dol}

BEGIN
IF p=1
THEN
BEGIN
i:=(g-d+1) SHR 1; {szybsze niz (g-d+1) div 2}
WHILE i>=d DO
BEGIN
WDol(i,g);
DEC(i)
END;
END
ELSE
IF p=2
THEN
BEGIN
FOR i:=d+1 TO g DO
WGore(i); {inne doprowadzanie tablicy do kopca}
END;
i:=g; {sortowanie}
WHILE i>d DO
BEGIN
For jk:=1 to n do write(a[jk],' ');
writeln;
zamien(tabl[d],tabl[i]);

DEC(i);
WDol(1,i)
END;
For jk:=1 to n do write(a[jk],' ');
writeln;
END; {HeapSort}

PROCEDURE MergeSort(VAR tabl:tablice;d,g:typ);
VAR
s:INTEGER;

PROCEDURE scal(p,g,k:INTEGER;VAR tabl:tablice);
VAR
i,j,l:INTEGER;
z :tablice;

BEGIN
i:=p;
j:=g;
l:=p;
WHILE (i BEGIN
IF tabl[i]<=tabl[j]
THEN
BEGIN
z[l]:=tabl[i];
i:=i+1
END
ELSE
BEGIN
z[l]:=tabl[j];
j:=j+1
END;
l:=l+1
END; {WHILE}
WHILE i BEGIN
z[l]:=tabl[i];
l:=l+1;
i:=i+1
END;
WHILE j<=k DO
BEGIN
z[l]:=tabl[j];
l:=l+1;
j:=j+1
END;
FOR i:=p TO k DO
tabl[i]:=z[i]
END; {scal}

BEGIN
IF d THEN
BEGIN
s:=(d+g) SHR 1;
MergeSort(tabl,d,s);
MergeSort(tabl,s+1,g);
scal(d,s+1,g,tabl)
END
END;
PROCEDURE WYPIS(a:TAblice;n:integer);
var
i:integer;
BEGIN
for i:=1 to n do
write(' ',a[i]);
end;

BEGIN
clrscr;
Writeln('podaj ilosc liczb');
Readln(n);
Writeln('podaj liczby');
For jk:=1 TO n do
Read(A[jk]);
readln;
writeln('wybierz sortowanie');
readln(z);
CASE z of
'h': HeapSort(A,1,n,1);
'H': HeapSort(A,1,n,2);
END;
Wypis(a,n);
END.

[#2] Re: problem z progamem w pascalu

@mie777, post #1


Pare uwag na początek:
1) esetyka programu, bo nic nie idzie przeczytać (5 minut sie głowiłem, ale
o co chodzi), czyli wcięcia, posortuj zadeklarowane zmienne
2) w tym programie jest pare procedur sortowania, która ci nie chodzi ?
3) więcej komentarzy, przed programem co on robi , przed
procedurami i itp...
4) sprawdź debugierem, krok po kroku
5) jesli nie masz debugiera, nie wiesz jak działa albo nie chce ci sie to
powstawiaj własne fragmenty sprawdzające co sie dzieje w programie
np.
writeln("zmienna i ma wartość ",i);
writeln("pętla wykonała się ",i," razy");
6) i ostatnie, dobrze poczytaj N. Wirtha (Alogrytmy + struktury danych = programy) albo jak masz siłę i dostęp do polskiej wersji to zajrzyj do
Sztuki programowania, tom 2, Knutha.

7) żartowałem, że 6 jest ostania, nie ma nic lepszego niż posputy kod,
zeżre Ci mase czasu ale dużo sie dowiesz (albo dowiesz się że musisz
jeszcze dużo popracować )

8) nie idź na łatwizne, posiedz poklep troche, poczytaj a nie wrzucasz niesformatowany kod i szukasz kogoś kto odwali czarną robotę.

Powodzenia z problemem.

Asman/Action

[#3] Re: problem z progamem w pascalu

@mie777, post #1

w ogóle nie napisałeś czy przeszedł kompilację, a jak nie to jakie komunikaty dał kompilator.
[#4] Re: problem z progamem w pascalu

@R-Tea, post #3

Kompilacja sukcesful
chodzi o to że nie sortuje mi liczb

[#5] Re: problem z progamem w pascalu

@mie777, post #4

jak widać to w tym pliku masz nie heapsorta ale takze pozostałe sposoby sortowania - spróbuj zamienic heapsorta na sortowanie bąbelkowe - ono jest najprostsze
[#6] Re: problem z progamem w pascalu

@mie777, post #1

Dalej mam problem z tym programem Mianowicie sortuje mi tylko jedną metodą HEapSort. I nie wiem czemu innymi metodami nie chce sortować.
Jeśli ktoś widzi jakiś błąd w procedurach bede wdzićczny za info

Na stronie www.PPA.pl, podobnie jak na wielu innych stronach internetowych, wykorzystywane są tzw. cookies (ciasteczka). Służą ona m.in. do tego, aby zalogować się na swoje konto, czy brać udział w ankietach. Ze względu na nowe regulacje prawne jesteśmy zobowiązani do poinformowania Cię o tym w wyraźniejszy niż dotychczas sposób. Dalsze korzystanie z naszej strony bez zmiany ustawień przeglądarki internetowej będzie oznaczać, że zgadzasz się na ich wykorzystywanie.
OK, rozumiem