pętla for

0
procedure sort (var t:matrix);
          var tmp:integer;
              k:byte     ;
          begin
               for i:=1 to 4 do<image> </image>
                   begin
                   for j:=1 to 3 do
                       for k:=j+1 to 4 do
                            if t[i][j]>t[i][k] then
                               begin
                                 tmp:=t[i][k];
                                 t[i][k]:=t[i][j] ;
                                 t[i][j]:=tmp;
                                end; 

no i wszystko by było łądnie gdyby..... nie to screen z programu
user image
na początu wyświetliłem tabele(4*4) random 2000
następnie ja posortowałem podanym wyżej algorytmem
no i przez 1 3 wiersze tabeli wszystko działą jak przewiduje ale niespodzianka czeka mnie w wierszu 4
wg algorytmu powinien porównywać t[i][j]>t[i][k]
czyli komórke 4,1 porównać z 4,2 (632>1643 if nie spełniony wiec zostaje, potem 4,2 >4,3 wiec zamieni
potem 4,3 z 4,4 nie zamieni bo 4,3<4,4
wynik powinien wyglądać wiec tak
632, 137, 1640, 1643
a jak widzimy soruje to inaczej??
wymyśliłem ze taki efekt powinien byc gdy

  if t[i][j]>t[i][k] then
                               begin
                                 tmp:=t[i][k];
                                 t[i][k]:=t[i][j] ;
                                 t[i][j]:=tmp;
                                 j:=0
                                end; 

ale normalnie w kodzie tego nie ma :( ciągle myśle że mete przekroczyłem a jednak ja mam orzed oczami :(
wytłumaczcie prosze o co chodzi !!

0

nie wgryzałem się w kod, ale nie bardzo rozumiem dlaczego "632, 137, 1640, 1643" nazywasz posortowaniem, a "137, 632, 1640, 1643" jest według ciebie źle…

0

Czemu tutaj zaczynasz w taki sposób

for j:=1 to 3 do
   for k:=j+1 to 4 do

Zamiast ?

for j:=1 to 4 do
   for k:=1 to 4 do
0

do Azarahien

dlaczego "632, 137, 1640, 1643" nazywasz posortowaniem, a "137, 632, 1640, 1643" jest według ciebie źle…

nie źle mnie zrozumiałeś a może źle mówię :P chodzi o to ze procedura sort bada parami elementy czyli j=1,k=2; j=2,k=3; j=3,k=4 w takim razie w tab1(przed sortowaniem) według mnie powinien wyglądać tak 632 137 1640 1643
ale ku mojemu zdumieniu procedura zachowuje się tak jakby w przedostatnim wierszu było jeszcze j=0 (wiec k=1) ale przecież nie ma to skąd program wie ze tak ma to wyświetlić no chyba ze czegoś nie kumam ??

do qpi musi tak byćskoro masz wiersz 4 el. jmax to jest wiec 3 a k max to4 jeśli ustawisz tak ja ty mówisz (jmax =4 i kmax=4) to wartosci wiersza sie niebeda prównywać i procedura nie zadziała :(

1 użytkowników online, w tym zalogowanych: 0, gości: 1