Jak posortować rekord w macierzy?

0

tu mam swój kod na którym się zawiesza program nie wiem gdzie mam błąd

procedure sortowanie (var bib:maciez2);
 var wyb:integer;
    procedure ustaw(v,b:integer; k,l:integer;  var tb:maciez2);
      begin
        tb[k,l].autor:= tb[v,b].autor ;
        tb[v,b].autor:=tb[k,l].autor;
      end;
    procedure sort2(var tb2:maciez2);
    var b,i,j:integer;
       begin
         for b:=low(tb2) to high(tb2) do
         begin
           write('',tb2[i,j].autor);
           writeln;
         end;
       end;
    procedure sort_babel(var bib:maciez2);
    var tmp:biblioteka;
       max:string;
       vf,vf2,vif,kf,f:integer;
       begin
         for vf:=low(bib) to (high(bib)-1) do
         for vf2:=low(bib) to (high(bib)-1) do
         begin
           if max>bib[vif,f].autor then begin
           max:=bib[vf,vf2].autor;
           kf:=vif; end;
           end;
         if kf<>vif then ustaw(vf,vf2,kf,f,bib);
    writeln('posortowane autorzy');
             writeln;
             sort2(bibMac);
             end;
0

#ustaw jest źle, druga linka nic nie robi, bo obie zmienne zawierają już to samo. Ty chciałeś tutaj zrobić zamianę (swap) zawartości zmiennych.
#Jak piszesz sort2 to niech to sortuje, a nie jedynie wyświetla zawartość, bo sam sobie zagmatwasz sprawę
#Popraw wcięcia! Każde begin i każde end powinno być w swojej własnej linijce, zapewne przez to nie widzisz błędu
#if kf<>vif then ustaw(vf,vf2,kf,f,bib); jest poza pętlą for, chyba nie o to ci chodziło.

1

Przypominam o wstawianiu kodu w specjalne do tego celu znaczniki;


Formatowanie masz nie najlepsze, więc mało z tego kodu można wyczytać i zrozumieć na pierwszy rzut oka; Nazewnictwo zmiennych także pozostawia wiele do życzenia; Sformatowany kod powinien wyglądać mniej więcej tak:

procedure sortowanie (var bib:maciez2);
var
  wyb:integer;

procedure ustaw(v,b:integer; k,l:integer;  var tb:maciez2);
begin
  tb[k,l].autor:= tb[v,b].autor ;
  tb[v,b].autor:=tb[k,l].autor;
end;

procedure sort2(var tb2:maciez2);
var
  b,i,j:integer;
begin
  for b:=low(tb2) to high(tb2) do
  begin
    write('',tb2[i,j].autor);
    writeln;
  end;
end;

procedure sort_babel(var bib:maciez2);
var
  tmp:biblioteka;
  max:string;
  vf,vf2,vif,kf,f:integer;
begin
  for vf:=low(bib) to (high(bib)-1) do
    for vf2:=low(bib) to (high(bib)-1) do
    begin
      if max>bib[vif,f].autor then
      begin
        max:=bib[vf,vf2].autor;
        kf:=vif;
      end;
    end;

  if kf<>vif then
    ustaw(vf,vf2,kf,f,bib);

  writeln('posortowane autorzy');
  writeln;
  sort2(bibMac);
end;

Teraz widzisz co się w nim dzieje? W procedurze sort_babel w warunku wykorzystujesz niezainicjowaną zmienną f; Poczytaj jeszcze trochę o tej metodzie sortowania i zastanów się jak powinna wyglądać; No i popraw to:

writeln('posortowane autorzy'); //nie bardzo to po polsku

EDIT: tak na marginesie - jak rozumiesz zdanie Jak posortować rekord w macierzy? - to brzmi tak, jakbyś chciał sortowanie przeprowadzić na jednym rekordzie w macierzy, a nie posortować macierz rekordową; Przyłóż się następnym razem i do tytułu;

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