problem z programem "sortowanie"

0

wiecie od nie dawna programuje w pascalu, no i robiłem tablice 2d ale nie mogłem sortowania zrobić no to sie wróciłęm do tablic 1d no i chyba ta lekcje zapomniałem moglibyście pomóc poprawić mój programik sortowania tab 1d ??normalnie wstyd ze o to pytam chyba sie na newbie przeniose :D

 program sortowanie;
uses crt;
type tab=array [0..5] of byte   ;
var  x:tab;

     procedure sort(t:tab);
var
   i,j,k,tmp:byte;
begin
  for i:=low(t) to high(t)-1 do
  begin
     for j:=i+1 to high(t) do
         if t[i] > t[j] then
            begin
             tmp:=t[k];
             t[k]:=t[i];
             t[i]:=tmp;
            end;
            x[i]:=t[i];
      write ('x[',i,']=',x[i],' ');
     end;

end;

procedure los (t:tab);
var  i:byte;
          begin
               randomize;
               for i:=0 to 5 do
                   begin
                        t[i]:= random (9);
                        write ('x[',i,']=',t[i],' ');
                        x[i]:=t[i];
                   end;
          end;
begin
     clrscr;
     los (x);

     writeln;
     sort (x);
     readln;
end.
1
tmp:= t[k];
t[k]:= t[i];
t[i]:= tmp;

A skąd wziąłeś indeks "k"?
Zamiast "k" powinno być ... mam nadzieję, że się domyślisz
Dodatkowo musisz jeszcze wydrukować ostatni element tablicy na końcu procedury sort

0

no rzeczywiście .............. ja !!!!!!!!!!!!!

poprawiłem ale znów głupoty wyświetla (screen na dole) (sortuje ale ostatni element jest zawsze zły :()

 program sortowanie;
uses crt;
type tab=array [0..5] of byte   ;
var  x:tab;

     procedure sort(t:tab);
var
   i,j,tmp:byte;
begin
  for i:=low(t) to high(t)-1 do
  begin
     for j:=i+1 to high(t) do
         if t[i] > t[j] then
            begin
             tmp:=t[j];
             t[j]:=t[i];
             t[i]:=tmp;
            end;
            x[i]:=t[i];
           end;

end;

procedure los (t:tab);
var  i:byte;
          begin
               randomize;
               for i:=0 to 5 do
                   begin
                        t[i]:= random (9);
                        write ('x[',i,']=',t[i],' ');
                        x[i]:=t[i];
                   end;
          end;

procedure rajt (t:tab);
          var i:byte;
          begin
               for i:= low(t) to high (t) do
                   write ('x[',i,']=',t[i],' ');
          end;
begin
     clrscr;
     los (x);

     writeln;
     writeln;

     sort (x);
     rajt (x);
     readln;
end.

user image

1
simplex napisał(a)

Dodatkowo musisz jeszcze wydrukować ostatni element tablicy na końcu procedury sort

Aktualnie to zdanie będzie brzmiało:
Musisz jeszcze przepisać ostatni element tablicy t do tablicy x na końcu procedury sort

EDIT
Po dokładniejszym obejrzeniu kodu proponuję zmienić deklarację procedury sort i przekazać do niej tablicę przez zmienną

procedure sort(var t: tab);

wtedy nie będzie już trzeba przepisywać ręcznie elementów tablicy lokalnej w procedurze do tablicy globalnej x i nie będzie już potrzebna instrukcja

x[i]:= t[i];

swoja drogą, to jest ona co najmniej zastanawiająca, gdy w programie wywołujesz procedurę sort przekazując do niej właśnie tablicę x

PS Ta sama sytuacja dotyczy procedur los i rajt

0

nom teraz działą ja złoto no tak w procedurze sort tylko przepisywał x[i]:=t[i] ale for był ustawiony to high-1 :D

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