Witajcie. Mam problem z dwoma programami, nie mogę poradzić sobie z ich dalszą modyfikacją. Pisane one są we Free Pascalu.
Pierwszy z nich to sortowanie bąbelkowe, jednak nie mam pojęcia jaką linijkę wrzucić żeby obliczał liczbę przestawień w ciągu.
program sortowanie_babelkowe;
uses
Crt;
const
n=5;
type
TTablica = array [1..n] of Integer;
procedure sort_babelkowe(var t : TTablica; n : Integer);
var
i,j,
pom : Integer;
begin
for j := 1 to n - 1 do
for i := 1 to n - 1 do begin
if t[i] > t[i+1] then
begin
pom := t[i];
t[i] := t[i+1];
t[i+1] := pom;
end;
end;
end;
const
tab : TTablica=(29,9,5,3,37);
var
i : Integer;
begin
clrscr;
writeln('Sortowanie bąbelkowe');
writeln('Tablica przed sortowaniem');
for i:=1 to n do write(tab[i],' ');
writeln;
sort_babelkowe(tab,n);
writeln('Tablica po sortowaniu');
for i:=1 to n do write(tab[i],' ');
writeln;
repeat until keypressed;
end.
Drugi z kolei kod, jest sortowaniem przez scalanie, w którym podobnie musze wprowadzić modyfikację, umożliwiającą obliczenie liczby podziałów. Nie radzę sobie z tym.
program sortowanie_przez_scalanie;
uses
Crt;
const
n=7;
type
TTablica = array [1..n] of Integer;
procedure WypelnijTablice(var tab : TTablica; n : Integer );
var
i : Integer;
begin
writeln('Podaj ',n,' liczb');
for i:=1 to n do readln(tab[i]);
end;
procedure scalaj(var t : TTablica; indPocz, indSrodek, indKon : LongInt);
var
i, j,
k : Integer;
temp : TTablica;
begin
i := indPocz;
j := indSrodek + 1;
k := indPocz;
while (i <= indSrodek) and (j <= indKon) do
begin
if t[i] < t[j] then
begin
temp[k] := t[i];
Inc(i);
end
else
begin
temp[k] := t[j];
Inc(j);
end;
Inc(k);
end;
while i <= indSrodek do
begin
temp[k] := t[i];
Inc(i);
Inc(k);
end;
while j <= indKon do
begin
temp[k] := t[j];
Inc(j);
Inc(k);
end;
for i := indPocz to indKon do t[i] := temp[i];
end;
procedure sort_scal(var t : TTablica; indPocz, indKon : LongInt);
var
indSrodek : LongInt;
begin
if indPocz < indKon then
begin
indSrodek := (indPocz + indKon) div 2;
sort_scal(t,indPocz,indSrodek);
sort_scal(t,indSrodek + 1,indKon);
scalaj(t,indPocz, indSrodek, indKon);
end;
end;
const
tab : TTablica=(9,5,14,19,2,3,15);
var
i : Integer;
begin
clrscr;
writeln('Sortowanie przez scalanie');
writeln('Tablica przed sortowaniem');
for i:=1 to n do write(tab[i],' ');
writeln;
sort_scal(tab,1,n);
writeln('Tablica po sortowaniu');
for i:=1 to n do write(tab[i],' ');
writeln;
repeat until keypressed;
end.
Za pomoc z góry dziękuję.
dodanie znaczników <code class="pascal">
- @furious programming