mysame Napisano Marzec 16, 2015 Zgłoś Share Napisano Marzec 16, 2015 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 More sharing options...
Kaczus Napisano Marzec 17, 2015 Zgłoś Share Napisano Marzec 17, 2015 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 More sharing options...
mysame Napisano Marzec 17, 2015 Autor Zgłoś Share Napisano Marzec 17, 2015 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 More sharing options...
babubabu Napisano Marzec 18, 2015 Zgłoś Share Napisano Marzec 18, 2015 ź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 More sharing options...
Kaczus Napisano Marzec 18, 2015 Zgłoś Share Napisano Marzec 18, 2015 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 More sharing options...
Polecane posty
Zarchiwizowany
Ten temat jest archiwizowany i nie można dodawać nowych odpowiedzi.