Skocz do zawartości

3 liczby do posortowania


mysame

Polecane posty

Witam,

napisałem program, który ma sortować trzy liczby, ale oczywiście nie działa. Z góry dziękuje za wskazówki jak go naprawić. :)

 

 

program sortowanie;

 

uses crt;

var x: integer;

var y: integer;

var z: integer;

 

begin

writeln('Podaj pierwsza liczbe: ');

readln(x);

writeln('Podaj druga liczbe: ');

readln(y);

writeln('Podaj trzecia liczbe: ');

readln(z);

 

if (x<=y) and (z<=x) then writeln(z,x,y);

if (x<=y) and (z>=x) and (y<=z) then writeln(x,y,z);

if (x<=y) and (z>=x) and (y>=z) then writeln(x,z,y);

if (x>=y) and (z<=y) then writeln(z,y,x);

if (x>=y) and (z<=y) and (z<=x) then writeln(y,z,x);

if (x>=y) and (z<=y) and (z>=x) then writeln(y,x,z);

 

readkey

end.

Link do komentarza
Udostępnij na innych stronach

jak już w ten sposób (nie uniwersalny, ale fakt - kompilator może nejlepiej zoptymalizować), to chyba tak:

 

if (x<=y) and (z<=x) then
writeln(z,x,y)
else if (y<=x) and (z<=y) then
writeln(z,y,x)
else if (z<=x) and (z<=x) then
writeln(y, z,x)
else if (x<=z) and (y<=x) then
writeln(y,x,z)
else if (y<=z) and (x<=y) then
writeln(x,y,z)
else
  writeln(x,z,y);

 

Chyba się nie pomyliłem, ale przy większej ilości już bym robił sortowanie choćby bąbelkowe :)

Link do komentarza
Udostępnij na innych stronach

Bardzo dziękuje, aczkolwiek spróbowałem zrobić też dla czterech liczb na podstawie algorytmu i kompletnie nie wiem co robię źle

program sortowanie2;

uses crt;

var a,b,c,d: integer;

begin

writeln('Podaj liczby: ');

readln(a,b,c,d);

if(a<=b) and (c<=b) and (d<=c) then writeln(d,c,b,a) else

if(a<=b) and (c>=b) and (d<=a) then writeln(d,c,a,b) else

if(a>=b) and (c<=b) and (d<=c) then writeln(d,c,b,a) else

if(a>=b) and (c>=b) and (d<=b) then writeln(d,b,c,a) else

if(a>=b) and (c>=b) and (d>=b) and (d>=c) then writeln(a,c,a,b) else

if(a>=b) and (c>=b) and (d>=b) and (d<=c) then writeln(d,c,b,a) else

if(a>=b) and (c<=b) and (d>=c) and (b>=d) then writeln(b,c,a,d) else

if(a>=b) and (c<=b) and (d>=c) and (b<=d) then writeln(b,c,d,a) else

if(a<=b) and (c>=b) and (d>=a) and (d>=c) then writeln(b,c,a,d) else

if(a<=b) and (c>=b) and (d>=a) and (d<=c) then writeln(b,c,d,a) else

if(a<=b) and (c<=b) and (d>=c) and (a>=d) then writeln(a,b,d,c) else

if(a<=b) and (c<=b) and (d>=c) and (a<=d) then writeln(a,b,c,d);

 

readkey

end.

Link do komentarza
Udostępnij na innych stronach

źle robisz to że liczby trzymasz w oddzielnych zmiennych a nie tablicy.

 

type
 TIntegerArray = array of Integer;

procedure Swap(var AValue1, AValue2 : Integer);
var
 Tmp : Integer;
begin
 Tmp := AValue1;
 AValue1 := AValue2;
 AValue2 := Tmp;
end;

procedure BubbleSort(var AMatrix : TIntegerArray);
var
 i,j : Cardinal;
begin
 for i := Low(AMatrix) to High(AMatrix) - 1 do
for j := Low(AMatrix) to High(AMatrix) - 1 do
 	if AMatrix[j] > AMatrix[j + 1] then
   	Swap(AMatrix[j], AMatrix[j + 1]);
end;

Link do komentarza
Udostępnij na innych stronach

Bardzo dziękuje, aczkolwiek spróbowałem zrobić też dla czterech liczb na podstawie algorytmu i kompletnie nie wiem co robię źle

Przy 4 elementach masz taki problem, że występują tu 24 przypadki, a rozważyłeś tylko 12... Dlatego weź użyj już tu algorytmu - przy małej ilości danych najefektywniejszy będzię algorytm babelkowy (ma mały narzut kodu, co rekompensuje jego powolność w innych przypadkach)

Link do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.

×
×
  • Utwórz nowe...