Sortowanie- problem z rekordami

0

Witam,

Mam problem z sortowaniem. Wszystko byłoby pięknie, ale gdy próbuje posortować rekordy to wyskakuje błąd 'Incompatible types'. Kompletnie przekracza to moje umiejętności programowania. Proszę się nie 'czepiać' co do kodu (bo wiem, że jest strasznie amatorski) i spróbować mi pomóc. Użyłem wyszukiwarki i nie znalazłem rozwiązania.

program Project2;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
    N=2;

var kr:string;

type adres=
    Record
    miasto:string[10];
    kraina:string[10];
    end;

type kucyk=
    Record
    imie:string[10];
    kolor:string[10];
    wiek:integer;
    adres_st:adres;
    end;

tab= array [1..N] of kucyk;
var kucyki,kucyki1:tab;

type plik_int=file of kucyk;
     tab1=array[1..N] of kucyk;
var p:plik_int;

procedure wczytaj(var T:tab);
var i:integer;
begin
  for i:=1 to N do
    with T[i] do
      begin
        writeln('Podaj imie');
        readln(imie);
        writeln('Podaj kolor');
        readln(kolor);
        writeln('Podaj wiek');
        readln(wiek);
          with adres_st do
            begin
              writeln('Podaj miasto');
              readln(miasto);
              writeln('Podaj kraine');
              readln(kraina);
            end;
           writeln;   
      end;
end;

procedure wyswietl(var T:tab);
var i:integer;
begin
  for i:=1 to N do
    with T[i] do
      begin
        writeln('Imie: ', imie);
        writeln('Kolor: ', kolor);
        writeln('Wiek: ', wiek);
          with adres_st do
            begin
              writeln('Miasto: ', miasto);
              writeln('Kraina: ', kraina);
            end;
  writeln;         
      end;
end;

function czywiek(var T:tab; kr:string):boolean;
var i:integer;
begin
  readln(kr);
  for i:=1 to N do
    with T[i] do
      begin
        if wiek>5 then
          czywiek:=true else
            czywiek:=false
      end;
end;

procedure zapisz_plik(var p:plik_int;T:tab);
var i:integer;
begin
  assign(p,'dane.dat');
  rewrite(p);
  for i:=1 to N do
    write(p,T[i]);
  close(p);
end;

procedure z_pliku(var p:plik_int; var T:tab);
var i:integer;
begin
  assign(p,'dane.dat');
  {$I-}
  reset(p);
  {$I+}
  if Ioresult <> 0 then
    writeln('Brak pliku o podanej nazwie')
  else
  begin
  i:=1;
  while not eof(p) do
  begin
    read(p,t[i]);
    inc(i);
  end;
  end;
close(p);
  
end;

procedure sortowanie(var T:tab);
var i,a,b:integer;
begin
  for b:=1 to 10 do
  begin
    for i:=1 to 10 do
    begin
      if t[i] < t[i+1] then
        begin
        a:=t[i+1];
        t[i+1]:=t[i];
        t[i]:=a;
        end;
    end;
  end;
end;

begin
wczytaj(kucyki);
wyswietl(kucyki);
zapisz_plik(p,kucyki);
z_pliku(p,kucyki1);
readln;
end.
0

Patrzyłem tylko na sortowanie. Zobacz, jaką masz wielkość tablicy i jak ją iterujesz :|
Tablica ma 2 elementy, a Ty chcesz iterować do 10 :|

Są dwie bardzo ważne funkcje: high i low(nie wiem, czy w TP już były, ale chyba tak).

0
Juhas napisał(a):

Patrzyłem tylko na sortowanie. Zobacz, jaką masz wielkość tablicy i jak ją iterujesz :|
Tablica ma 2 elementy, a Ty chcesz iterować do 10 :|

Są dwie bardzo ważne funkcje: high i low(nie wiem, czy w TP już były, ale chyba tak).

Wiem o tym, ale chce po prostu zrobić, żeby to działało... Później takimi rzeczami się zajmę.

0

Nie da się wprost porównać dwóch rekordów. Można porównywać pola rekordów i sortować rekordy według wybranych pól.
Czyli wyrażenie t[i] < t[i+1] nie da się wyliczyć.
Ale można wyliczyć wyrażenie t[i].imie < t[i+1].imie.
Przy zamianie rekordów

  a:=t[i+1];
  t[i+1]:=t[i];
  t[i]:=a;

zmienna a musi być takiego samego typu jak elementy zamieniane, czyli a:kucyk

Ponadto wypadałoby napisać w którym miejscu występuje błąd.

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