Problem przy tablicy oraz nietypowy pomysł.

0

Mówię na wstępie, że program nie jest ukończony. Ale próbuje co pewien czas kompilować, żeby wyłapywać mniejsze lub większe błędy, które mogą zmieniać całą strukturę programu.
Mam dwa błędy jeden dziwny a drugi może prze zemnie(razem czy osobno?).
Oto błędy:
projekt1.pas(160,22) Error: Illegal qualifier
projekt1.pas(160,24) Fatal: Syntax error, ")" expected but "." found
projekt1.pas(0) Fatal: Compilation aborted

Pierwszy odpowiada za tą linijkę:

  • if ((tablica[i].s) > (tablica[i+1].s)) then**
    W tym programie zastosowałem sortowanie bąbelkowe, s to jest ustawiana na sztywno zmienna w stringu gdzie przechowuje dane co chce sortować np wg numeru faktury i przekazuje numer, i tu jest problem z drugim. Czy ta myśl jest dobra ? Czy ten program można skrócić ? Dziękuje za wszelkie uwagi. Działam na FPC.

To jest cały kod

program nazwa;
uses crt;
type

Data_wystawienia=record
Data:integer;
Miesiac:integer;
Rok:integer;
end;

Data_oplacenia=record
Data:integer;
Miesiac:integer;
Rok:integer;
end;

faktura=record
numer : integer;
numer_klienta : integer;
sposob_oplaty : string[10];
suma_netto :integer;
upust :integer;
Data:Data_wystawienia;
Data1:Data_oplacenia;
Vat:integer;
end;

var
Tablica : array[1 .. 50] of faktura;
plik_faktur : file of faktura;
plik : string;

procedure wczytaj(plik:string; x:integer; var q:integer);
var i : integer;
begin
  repeat
    writeln('Podaj ilosc faktur. (nie wiecej niz 50)');
    readln(q);
  until (q >= 1) and (q <= 50);
  writeln('Wczytywanie danych do programu.');
  for i := 1 to q do
  begin
    with tablica[i] do
    begin
      Writeln('Podaj dane ', i, ' faktury: ');
      Write('Podaj numer faktury: ');
      readln(numer);
      Write('Podaj numer klienta: ');
      readln(numer_klienta);
      //repeat
      Write('Podaj sposob zaplaty (gotowka/kredyt): ');
      readln(sposob_oplaty);
      //until Upcase(sposob_oplaty) in (['GOTOWKA','KREDYT']);
      Write('Podaj sume netto: ');
      readln(suma_netto);
      Write('Podaj ilosc upustu: ');
      readln(upust);
      Write('Podaj date wystawienia faktury: ');
      with tablica[i].Data do
      begin
      writeln('Podaj date: ') ;
      readln(Data);
      writeln('Podaj miesiac: ');
      readln(Miesiac);
      writeln('Podaj rok: ');
      readln(Rok);
      end;
      Writeln('Podaj date oplacenia: ');
      with tablica[i].Data1 do
      begin
      writeln('Podaj date: ') ;
      readln(Data);
      writeln('Podaj miesiac: ');
      readln(Miesiac);
      writeln('Podaj rok: ');
      readln(Rok);
      writeln('Podaj ilosc VAT - u.');
      readln(vat);
      end;
    end;
    writeln('Byla to faktura nr.', i);
    writeln('Aby kontynuowac wcisnij ENTER.');
    readln;
  end;
  Assign(plik_faktur, plik);
  if x = 1 then
  begin
    Reset(plik_faktur);
    Seek(plik_faktur, filesize(plik_faktur));
  end
  else
    Rewrite(plik_faktur);
  for i := 1 to q do
    Write(plik_faktur, Tablica[I]);
  Writeln('Utworzylem plik z danymi.');
  Writeln('Aby kontynuowac wcisnij ENTER');
  Close(plik_faktur);
  Readln;
end;

procedure wypisz(plik : string);
var i : integer;
begin
  writeln('Wypisanie danych z pliku: ');
  assign(plik_faktur, plik);
  reset(plik_faktur);
  for i := 1 to filesize(plik_faktur) do
  begin
    read(plik_faktur, Tablica[i]);
    with tablica[i] do
    begin
      Writeln('Dane o ', i, ' fakturze: ');
      Write('Numer faktury: ');
      writeln(numer);
      Write('Numer klienta: ');
      writeln(numer_klienta);
      Write('Sposob zaplaty: ');
      writeln(sposob_oplaty);
      writeln('Suma netto: ');
      writeln(suma_netto);
      writeln('Ilosc upustu: ');
      writeln(upust);
      with tablica[i].Data do
      begin
      writeln('Data wystawienia faktury: ');
      writeln('Dzien: ');
      writeln(Data);
      writeln('Miesiac: ');
      writeln(Miesiac);
      writeln('Rok: ');
      writeln(Rok);
      end;
       with tablica[i].Data1 do
      begin
      writeln('Data zaplaty faktury: ');
      writeln('Dzien: ');
      writeln(Data);
      writeln('Miesiac: ');
      writeln(Miesiac);
      writeln('Rok: ');
      writeln(Rok);
      end;
      writeln('Vat: ');
      writeln(vat);
      writeln('Byly to informacje o fakturze nr.',i);
      writeln('Aby kontynuowac wcisnij ENTER.');
    end;
    readln;
  end;
  Close(plik_faktur);
end;

procedure babelkowe(s:string; var tablica:faktura);
var j,p,i:integer; x:faktura;
begin
        for j:=filesize(plik_faktur) downto 1 do
begin
        p := 1;
        for i := 1 to j do
        if ((tablica[i].s) > (tablica[i+1].s)) then
begin
        x := tablica[i]; tablica[i] := tablica[i+1]; tablica[i+1] := x;
        p := 0;
end;
        if p = 1 then break;
end;
end;


procedure sortowanie;
var z:byte; s:string;
begin
repeat
writeln('Wedlug czego chcesz posortowac dane ?');
writeln('1 - Numer faktury.');
writeln('2 - Numer klienta');
writeln('3 - Sposob zaplaty');
writeln('4 - Suma netto');
writeln('5 - Upust');
writeln('Data wystawienia faktury');
writeln('6 - Dzien.');
writeln('7 - Miesiac');
writeln('8 - Rok.');
writeln('Date oplacenia faktury');
writeln('9 - Dzien.');
writeln('10 - Miesiac');
writeln('11 - Rok.');
readln(z);
until (z>=1) and (z<=7);
case z of
1:
begin
writeln('Sortuje');
Delay(2000);
s:='numer';
babelkowe(s,tablica);
writeln('Dane zostaly posortowane wg Numeru faktury.');
writeln('Aby kontynuowac wcisnij ENTER');
readln;
end;
2:
begin
writeln('Sortuje');
s:='numer_klienta';
babelkowe(s,tablica);
Delay(2000);
writeln('Dane zostaly posortowane wg');


end;





function FileExists(const FileName : string) : Boolean;
var F : file;
begin
{$I-}
  Assign(F, FileName);
  Reset(F);
  Close(F);
{$I+}
  FileExists := IOResult = 0;
end;

procedure wybor(var plik : string; var q : integer);
var a, x, z : integer; label Rammus; // KOTWICA
begin
  writeln('Podaj nazwe pliku: ');
  Readln(plik);
  if FileExists(plik) then
  begin
    Rammus :
    repeat
      writeln('Plik o danej nazwie istnieje. Mozesz teraz skorzystac z nastepujacych funkcji:');
      writeln('1 - Podanie nowej nazwy pliku');
      writeln('2 - Skasowanie zawartosci pliku i zapisanie w nim nowych informacji.');
      writeln('3 - Dopisanie danych na koncu pliku.');
      readln(a);
      case a of
        1 :
          begin
            writeln('Podaj nowa nazwe: ');
            Readln(plik);
            if FileExists(plik) then goto Rammus;
            writeln('Zmieniono nazwe pliku na: ', plik);
          end;
        2 :
          begin
            writeln('Kasuje zawartosc pliku.');
            Delay(4000);
            wczytaj(plik, x, q);
          end;
        3 :
          begin
            writeln('Dopisywanie danych na koncu pliku');
            x := 1;
            wczytaj(plik, x, q);
          end;
      else
        begin
          writeln('Bledny wybor.');
          z := 1;
        end;
      end;
    until z <> 1;
  end;
end;
0
  1. co to za potworki
Data_wystawienia=record
Data:integer;
Miesiac:integer;
Rok:integer;
end;
 
Data_oplacenia=record
Data:integer;
Miesiac:integer;
Rok:integer;
end;

przecież to są dokładnie takie same typy więc po co je deklarowałeś dwa razy. Inna sprawa dlaczego nie użyłeś typu TDate

  1. co wg Ciebie jest pod tablica[i].s??? Bo ja nigdzie nie widzę aby rekord faktura miał pole, które się nazywa s
0

TDate ? Jak on działa ? A dwa razy ponieważ mi się pomyliło,że to się nadpisze.
Co do drugiego myśl zakładała żeby 11 razy nie kopiować tego samego, to użyłem zmiennej stringowej, która by przekazywała co chce sortować np numer faktury.

0

w pascalu nie TDate tylko DateTime (moduł dos) - przechowuje datę i czas

luke18dg napisał(a)

Co do drugiego myśl zakładała żeby 11 razy nie kopiować tego samego, to użyłem zmiennej stringowej, która by przekazywała co chce sortować np numer faktury.
napiszę to raz jeszcze - gdzie w rekordzie faktura masz pole, które się nazywa s?

0

No nie mam w rekordzie fakturze nigdzie nie mam s. Ale jak zrobić żeby nie kopiować 11 razy tego samego kawałka programu ?

0
procedure babelkowe(s:string; var tablica:faktura); // tu deklarujesz, że zmienna "tablica" ma typ faktura, a ta jest REKORDEM
...
begin
...
if ((tablica[i].s) > (tablica[i+1].s)) then // a tu i niżej odwołujesz się do tego rekordu, jakby był tablicą
begin
  x := tablica[i]; tablica[i] := tablica[i+1]; tablica[i+1] := x;
  p := 0;
end;
...
luke18dg napisał(a)

No nie mam w rekordzie fakturze nigdzie nie mam s. Ale jak zrobić żeby nie kopiować 11 razy tego samego kawałka programu ?

ubierz go w funkcję/metodę.

0
Misiekd napisał(a)

w pascalu nie TDate tylko DateTime (moduł dos) - przechowuje datę i czas

luke18dg napisał(a)

Co do drugiego myśl zakładała żeby 11 razy nie kopiować tego samego, to użyłem zmiennej stringowej, która by przekazywała co chce sortować np numer faktury.
napiszę to raz jeszcze - gdzie w rekordzie faktura masz pole, które się nazywa s?

Możesz mi coś powiedzieć o tej funkcji w module DOS ? Ja chce zapisać datę podaną przez użytkownika, a nie zapisywać datę i godzinę z systemu.

0

to nie jest funkcja tylko rekord do przechowywania daty i czasu - masz pomoc w pascalu to sobie zobacz jak on wygląda

0

Tym razem mam jakiś chyba błąd logiczny, wczytuje do tablicy rekordów dane z pliku, program mi je sortuje i zapisuje do pliku ale dlaczego nadpisuje mi się jako 0 po ponownym wyświetleniu ?

 
program nazwa;
uses crt;
type

  Data = record
    Dzien : integer;
    Miesiac : integer;
    Rok : integer;
  end;

  faktura = record
    numer : integer;
    numer_klienta : integer;
    sposob_oplaty : string[10];
    suma_netto : integer;
    upust : integer;
    Data_wystawienia : Data;
    Data_oplacenia : data;
    Vat : integer;
  end;

var
  Tablica : array[1..50] of faktura;
  plik_faktur : file of faktura;
  plik : string;
  x,q:integer;

procedure kontynuuj;
begin
writeln('Aby kontynuowac wcisnij ENTER');
readln;
end;

procedure wczytaj(plik : string; x : integer; var q : integer);
var i : integer;
begin
  repeat
    writeln('Podaj ilosc faktur. (nie wiecej niz 50)');
    readln(q);
  until (q >= 1) and (q <= 50);
  writeln('Wczytywanie danych do programu.');
  for i := 1 to q do
  begin
    with tablica[i] do
    begin
      Writeln('Podaj dane ', i, ' faktury: ');
      Write('Podaj numer faktury: ');
      readln(numer);
      Write('Podaj numer klienta: ');
      readln(numer_klienta);
      //repeat
      Write('Podaj sposob zaplaty (gotowka/kredyt): ');
      readln(sposob_oplaty);
      //until Upcase(sposob_oplaty) in (['GOTOWKA','KREDYT']);
      Write('Podaj sume netto: ');
      readln(suma_netto);
      Write('Podaj ilosc upustu: ');
      readln(upust);
      Write('Podaj wartosc VAT.');
      readln(vat);
      Writeln('Podaj date wystawienia faktury: ');
      with tablica[i].Data_wystawienia do
      begin
        write('Podaj dzien: ');
        readln(Dzien);
        write('Podaj miesiac: ');
        readln(Miesiac);

        write('Podaj rok: ');
        readln(Rok);
      end;
      Writeln('Podaj date oplacenia: ');
      with tablica[i].Data_oplacenia do
      begin
        write('Podaj dzien: ');
        readln(Dzien);
        write('Podaj miesiac: ');
        readln(Miesiac);
        write('Podaj rok: ');
        readln(Rok);
      end;
    end;
    writeln('Byla to faktura nr.', i);
    kontynuuj;
  end;
  Assign(plik_faktur, plik);
  if x = 1 then
  begin
    Reset(plik_faktur);
    Seek(plik_faktur, filesize(plik_faktur));
  end
  else
    Rewrite(plik_faktur);
  for i := 1 to q do
    Write(plik_faktur, Tablica[I]);
  Writeln('Utworzylem plik z danymi.');
  kontynuuj;
  Close(plik_faktur);
end;

procedure wypisz(plik : string);
var i : integer;
begin
  writeln('Wypisanie danych z pliku: ');
  assign(plik_faktur, plik);
  reset(plik_faktur);
  for i := 1 to filesize(plik_faktur) do
  begin
    read(plik_faktur, Tablica[i]);
    with tablica[i] do
    begin
      Writeln('Dane o ', i, ' fakturze: ');
      Write('Numer faktury: ');
      writeln(numer);
      Write('Numer klienta: ');
      writeln(numer_klienta);
      Write('Sposob zaplaty: ');
      writeln(sposob_oplaty);
      Write('Suma netto: ');
      writeln(suma_netto);
      Write('Ilosc upustu: ');
      writeln(upust);
      with tablica[i].Data_wystawienia do
      begin
        writeln('Data wystawienia faktury: ');
        Write('Dzien: ');
        writeln(Dzien);
        Write('Miesiac: ');
        writeln(Miesiac);
        Write('Rok: ');
        writeln(Rok);
      end;
      with tablica[i].Data_oplacenia do
      begin
        writeln('Data zaplaty faktury: ');
        Write('Dzien: ');
        writeln(Dzien);
        Write('Miesiac: ');
        writeln(Miesiac);
        Write('Rok: ');
        writeln(Rok);
      end;
      Write('Vat: ');
      writeln(vat);
      writeln('Byly to informacje o fakturze nr.', i);
      kontynuuj;
    end;
  end;
  Close(plik_faktur);
end;

procedure babelkowe(c : byte);
var j, p, i : integer; x : faktura;
begin //BEGIN PROCEDURY
assign(plik_faktur,plik);
reset(plik_faktur);
  for j := filesize(plik_faktur) downto 1 do
  begin // BEGIN FORA

    p := 1;
    for i := 1 to j do
      case c of
        1 :
          begin
            if tablica[i].numer > tablica[i + 1].numer then
            begin // BEGIN IFA
              x := tablica[i]; tablica[i] := tablica[i + 1]; tablica[i + 1] := x;
              p := 0;
            end; // ENF IFA
          end;
        2 :
          begin
            if tablica[i].numer_klienta > tablica[i + 1].numer_klienta then
            begin // BEGIN IFA
              x := tablica[i]; tablica[i] := tablica[i + 1]; tablica[i + 1] := x;
              p := 0;
            end; // ENF IFA
          end;
        3 :
          begin
            if tablica[i].suma_netto > tablica[i + 1].suma_netto then
            begin // BEGIN IFA
              x := tablica[i]; tablica[i] := tablica[i + 1]; tablica[i + 1] := x;
              p := 0;
            end; // ENF IFA
          end;
        4 :
          begin
            if tablica[i].upust > tablica[i + 1].upust then
            begin // BEGIN IFA
              x := tablica[i]; tablica[i] := tablica[i + 1]; tablica[i + 1] := x;
              p := 0;
            end; // ENF IFA
          end;
        5 :
          begin
            if tablica[i].vat > tablica[i + 1].vat then
            begin // BEGIN IFA
              x := tablica[i]; tablica[i] := tablica[i + 1]; tablica[i + 1] := x;
              p := 0;
            end; // ENF IFA
          end;
      end;
    if p = 1 then break;
  end; // END FORA
  close(plik_faktur);
end; // END PROCEDURY

procedure sortowanie_daty;
var j, p, i : integer; x : faktura;
begin
//DZIEN
for j:=filesize(plik_faktur) downto 1 do
begin
p:=1;
for i:=1 to 1 do
if tablica[i].Data_wystawienia.Dzien > tablica[i+1].Data_wystawienia.dzien then
begin
x:=tablica[i]; tablica[i]:=tablica[i+1]; tablica[i+1]:=x;
p:=0
end;
end;

for j:=filesize(plik_faktur) downto 1 do
begin
p:=1;
for i:=1 to 1 do
if tablica[i].Data_wystawienia.Miesiac > tablica[i+1].Data_wystawienia.Miesiac then
begin
x:=tablica[i]; tablica[i]:=tablica[i+1]; tablica[i+1]:=x;
p:=0
end;
end;

for j:=filesize(plik_faktur) downto 1 do
begin
p:=1;
for i:=1 to 1 do
if tablica[i].Data_wystawienia.Rok > tablica[i+1].Data_wystawienia.Rok then
begin
x:=tablica[i]; tablica[i]:=tablica[i+1]; tablica[i+1]:=x;
p:=0
end;
end;
end;

procedure sortowanie_daty1;
var j, p, i : integer; x : faktura;
begin
//DZIEN
for j:=filesize(plik_faktur) downto 1 do
begin
p:=1;
for i:=1 to 1 do
if tablica[i].Data_oplacenia.Dzien > tablica[i+1].Data_oplacenia.dzien then
begin
x:=tablica[i]; tablica[i]:=tablica[i+1]; tablica[i+1]:=x;
p:=0
end;
end;

for j:=filesize(plik_faktur) downto 1 do
begin
p:=1;
for i:=1 to 1 do
if tablica[i].Data_oplacenia.Miesiac > tablica[i+1].Data_oplacenia.Miesiac then
begin
x:=tablica[i]; tablica[i]:=tablica[i+1]; tablica[i+1]:=x;
p:=0
end;
end;

for j:=filesize(plik_faktur) downto 1 do
begin
p:=1;
for i:=1 to 1 do
if tablica[i].Data_oplacenia.Rok > tablica[i+1].Data_oplacenia.Rok then
begin
x:=tablica[i]; tablica[i]:=tablica[i+1]; tablica[i+1]:=x;
p:=0
end;
end;
end;

procedure sortowanie;
var z : byte; s : string; c : byte; i:integer; j:integer;
begin
  repeat
    writeln('Wedlug czego chcesz posortowac dane ?');
    writeln('1 - Numer faktury.');
    writeln('2 - Numer klienta');
    writeln('3 - Sposob zaplaty');
    writeln('4 - Suma netto');
    writeln('5 - Upust');
    writeln('6 - Data wystawienia faktury');
    writeln('7 - Date oplacenia faktury');
    writeln('8 - Vat-u');
    readln(z);
  until (z >= 1) and (z <= 8);
  case z of
    1 :
      begin
        writeln('Sortuje');
        Delay(2000);
        c := 1;
        babelkowe(c);
        writeln('Dane zostaly posortowane wg Numeru faktury.');
        kontynuuj
      end;

    2 :
      begin
        writeln('Sortuje');
        c := 2;
        babelkowe(c);
        Delay(2000);
        writeln('Dane zostaly posortowane wg Numeru klienta');
        kontynuuj
      end;

    4 :
      begin
        writeln('Sortuje');
        Delay(2000);
        c := 3;
        babelkowe(c);
        writeln('Dane zostaly posortowane wg Sumy netto.');
        kontynuuj;
      end;

    5 :
      begin
        writeln('Sortuje');
        Delay(2000);
          c := 4;
          babelkowe(c);
          kontynuuj;
      end;
    6:
    begin
    writeln('Sortuje');
    Delay(2000);
    sortowanie_daty;
    kontynuuj;
    end;

    7:
    begin
    writeln('Sortuje');
    Delay(2000);
    sortowanie_daty1;
    kontynuuj;
    end;

    8 :
      begin
        writeln('Sortuje');
        Delay(2000);
        c := 5;
        babelkowe(c);
        writeln('Dane zostaly posortowane wg Vat-u');
        kontynuuj;
      end;
  end;
  assign(plik_faktur,plik);
  reset(plik_faktur);
  j:=filesize(plik_faktur);
  for i:=1 to j do
  begin
  write(plik_faktur,tablica[i]);
  end;
  end;

function FileExists(const FileName : string) : Boolean;
var F : file;
begin
{$I-}
  Assign(F, FileName);
  Reset((F));
  Close((F));
{$I+}
  FileExists := IOResult = 0;
end;

procedure wybor(var plik : string; var q : integer);
var a, x, z : integer; label Rammus; // KOTWICA
begin
  writeln('Podaj nazwe pliku: ');
  Readln(plik);
  if FileExists(plik) then
  begin
    Rammus :
    repeat
      writeln('Plik o danej nazwie istnieje. Mozesz teraz skorzystac z nastepujacych funkcji:');
      writeln('1 - Podanie nowej nazwy pliku');
      writeln('2 - Skasowanie zawartosci pliku i zapisanie w nim nowych informacji.');
      writeln('3 - Dopisanie danych na koncu pliku.');
      readln(a);
      case a of
        1 :
          begin
            writeln('Podaj nowa nazwe: ');
            Readln(plik);
            if FileExists(plik) then goto Rammus;
            writeln('Zmieniono nazwe pliku na: ', plik);
          end;
        2 :
          begin
            writeln('Kasuje zawartosc pliku.');
            Delay(4000);
            wczytaj(plik, x, q);
          end;
        3 :
          begin
            writeln('Dopisywanie danych na koncu pliku');
            x := 1;
            wczytaj(plik, x, q);
          end;
      else
        begin
          writeln('Bledny wybor.');
          z := 1;
        end;
      end;
    until z <> 1;
  end;
end;

begin
  clrscr;
  plik:='Alabot.txt';
//  x:=0;
//  q:=0;
//  wczytaj(plik,x,q);
  wypisz(plik);
   clrscr;

  sortowanie;

  wypisz(plik);

  writeln('Ala');
  readln;
end.
0
for i:=1 to 1 do

a ty pytasz o błędy logiczne...

0

Dobrze poprawiłem błędy, które znalazłem. A teraz ktoś wie dlaczego ?


program nazwa;
uses crt;
type

  Data = record
    Dzien : integer;
    Miesiac : integer;
    Rok : integer;
  end;

  faktura = record
    numer : integer;
    numer_klienta : integer;
    sposob_oplaty : string[10];
    suma_netto : integer;
    upust : integer;
    Data_wystawienia : Data;
    Data_oplacenia : data;
    Vat : integer;
  end;

var
  Tablica : array[1..50] of faktura;
  plik_faktur : file of faktura;
  plik : string;
  x,q:integer;

procedure kontynuuj;
begin
writeln('Aby kontynuowac wcisnij ENTER');
readln;
end;

procedure wczytaj(plik : string; x : integer; var q : integer);
var i : integer;
begin
  repeat
    writeln('Podaj ilosc faktur. (nie wiecej niz 50)');
    readln(q);
  until (q >= 1) and (q <= 50);
  writeln('Wczytywanie danych do programu.');
  for i := 1 to q do
  begin
    with tablica[i] do
    begin
      Writeln('Podaj dane ', i, ' faktury: ');
      Write('Podaj numer faktury: ');
      readln(numer);
      Write('Podaj numer klienta: ');
      readln(numer_klienta);
      //repeat
      Write('Podaj sposob zaplaty (gotowka/kredyt): ');
      readln(sposob_oplaty);
      //until Upcase(sposob_oplaty) in (['GOTOWKA','KREDYT']);
      Write('Podaj sume netto: ');
      readln(suma_netto);
      Write('Podaj ilosc upustu: ');
      readln(upust);
      Write('Podaj wartosc VAT.');
      readln(vat);
      Writeln('Podaj date wystawienia faktury: ');
      with tablica[i].Data_wystawienia do
      begin
        write('Podaj dzien: ');
        readln(Dzien);
        write('Podaj miesiac: ');
        readln(Miesiac);

        write('Podaj rok: ');
        readln(Rok);
      end;
      Writeln('Podaj date oplacenia: ');
      with tablica[i].Data_oplacenia do
      begin
        write('Podaj dzien: ');
        readln(Dzien);
        write('Podaj miesiac: ');
        readln(Miesiac);
        write('Podaj rok: ');
        readln(Rok);
      end;
    end;
    writeln('Byla to faktura nr.', i);
    kontynuuj;
  end;
  Assign(plik_faktur, plik);
  if x = 1 then
  begin
    Reset(plik_faktur);
    Seek(plik_faktur, filesize(plik_faktur));
  end
  else
    Rewrite(plik_faktur);
  for i := 1 to q do
    Write(plik_faktur, Tablica[I]);
  Writeln('Utworzylem plik z danymi.');
  kontynuuj;
  Close(plik_faktur);
end;

procedure wypisz(plik : string);
var i : integer;
begin
  writeln('Wypisanie danych z pliku: ');
  assign(plik_faktur, plik);
  reset(plik_faktur);
  for i := 1 to filesize(plik_faktur) do
  begin
    read(plik_faktur, Tablica[i]);
    with tablica[i] do
    begin
      Writeln('Dane o ', i, ' fakturze: ');
      Write('Numer faktury: ');
      writeln(numer);
      Write('Numer klienta: ');
      writeln(numer_klienta);
      Write('Sposob zaplaty: ');
      writeln(sposob_oplaty);
      Write('Suma netto: ');
      writeln(suma_netto);
      Write('Ilosc upustu: ');
      writeln(upust);
      with tablica[i].Data_wystawienia do
      begin
        writeln('Data wystawienia faktury: ');
        Write('Dzien: ');
        writeln(Dzien);
        Write('Miesiac: ');
        writeln(Miesiac);
        Write('Rok: ');
        writeln(Rok);
      end;
      with tablica[i].Data_oplacenia do
      begin
        writeln('Data zaplaty faktury: ');
        Write('Dzien: ');
        writeln(Dzien);
        Write('Miesiac: ');
        writeln(Miesiac);
        Write('Rok: ');
        writeln(Rok);
      end;
      Write('Vat: ');
      writeln(vat);
      writeln('Byly to informacje o fakturze nr.', i);
      kontynuuj;
    end;
  end;
  Close(plik_faktur);
end;

procedure babelkowe(c : byte);
var j, p, i : integer; x : faktura;
begin //BEGIN PROCEDURY
assign(plik_faktur,plik);
reset(plik_faktur);
  for j := filesize(plik_faktur) downto 1 do
  begin // BEGIN FORA

    p := 1;
    for i := 1 to j do
      case c of
        1 :
          begin
            if tablica[i].numer > tablica[i + 1].numer then
            begin // BEGIN IFA
              x := tablica[i]; tablica[i] := tablica[i + 1]; tablica[i + 1] := x;
              p := 0;
            end; // ENF IFA
          end;
        2 :
          begin
            if tablica[i].numer_klienta > tablica[i + 1].numer_klienta then
            begin // BEGIN IFA
              x := tablica[i]; tablica[i] := tablica[i + 1]; tablica[i + 1] := x;
              p := 0;
            end; // ENF IFA
          end;
        3 :
          begin
            if tablica[i].suma_netto > tablica[i + 1].suma_netto then
            begin // BEGIN IFA
              x := tablica[i]; tablica[i] := tablica[i + 1]; tablica[i + 1] := x;
              p := 0;
            end; // ENF IFA
          end;
        4 :
          begin
            if tablica[i].upust > tablica[i + 1].upust then
            begin // BEGIN IFA
              x := tablica[i]; tablica[i] := tablica[i + 1]; tablica[i + 1] := x;
              p := 0;
            end; // ENF IFA
          end;
        5 :
          begin
            if tablica[i].vat > tablica[i + 1].vat then
            begin // BEGIN IFA
              x := tablica[i]; tablica[i] := tablica[i + 1]; tablica[i + 1] := x;
              p := 0;
            end; // ENF IFA
          end;
      end;
    if p = 1 then break;
  end; // END FORA
  j:=filesize(plik_faktur);
  for i:=1 to j do
  begin
  write(plik_faktur,tablica[i]);
  end;
  close(plik_faktur);
end; // END PROCEDURY

procedure sortowanie_daty;
var j, p, i : integer; x : faktura;
begin
//DZIEN
for j:=filesize(plik_faktur) downto 1 do
begin
p:=1;
for i:=1 to j do
if tablica[i].Data_wystawienia.Dzien > tablica[i+1].Data_wystawienia.dzien then
begin
x:=tablica[i]; tablica[i]:=tablica[i+1]; tablica[i+1]:=x;
p:=0
end;
end;

for j:=filesize(plik_faktur) downto 1 do
begin
p:=1;
for i:=1 to j do
if tablica[i].Data_wystawienia.Miesiac > tablica[i+1].Data_wystawienia.Miesiac then
begin
x:=tablica[i]; tablica[i]:=tablica[i+1]; tablica[i+1]:=x;
p:=0
end;
end;

for j:=filesize(plik_faktur) downto 1 do
begin
p:=1;
for i:=1 to j do
if tablica[i].Data_wystawienia.Rok > tablica[i+1].Data_wystawienia.Rok then
begin
x:=tablica[i]; tablica[i]:=tablica[i+1]; tablica[i+1]:=x;
p:=0
end;
end;
end;

procedure sortowanie_daty1;
var j, p, i : integer; x : faktura;
begin
//DZIEN
for j:=filesize(plik_faktur) downto 1 do
begin
p:=1;
for i:=1 to j do
if tablica[i].Data_oplacenia.Dzien > tablica[i+1].Data_oplacenia.dzien then
begin
x:=tablica[i]; tablica[i]:=tablica[i+1]; tablica[i+1]:=x;
p:=0
end;
end;

for j:=filesize(plik_faktur) downto 1 do
begin
p:=1;
for i:=1 to j do
if tablica[i].Data_oplacenia.Miesiac > tablica[i+1].Data_oplacenia.Miesiac then
begin
x:=tablica[i]; tablica[i]:=tablica[i+1]; tablica[i+1]:=x;
p:=0
end;
end;

for j:=filesize(plik_faktur) downto 1 do
begin
p:=1;
for i:=1 to j do
if tablica[i].Data_oplacenia.Rok > tablica[i+1].Data_oplacenia.Rok then
begin
x:=tablica[i]; tablica[i]:=tablica[i+1]; tablica[i+1]:=x;
p:=0
end;
end;
end;

procedure sortowanie;
var z : byte; s : string; c : byte; i:integer; j:integer;
begin
  repeat
    writeln('Wedlug czego chcesz posortowac dane ?');
    writeln('1 - Numer faktury.');
    writeln('2 - Numer klienta');
    writeln('3 - Sposob zaplaty');
    writeln('4 - Suma netto');
    writeln('5 - Upust');
    writeln('6 - Data wystawienia faktury');
    writeln('7 - Date oplacenia faktury');
    writeln('8 - Vat-u');
    readln(z);
  until (z >= 1) and (z <= 8);
  case z of
    1 :
      begin
        writeln('Sortuje');
        Delay(2000);
        c := 1;
        babelkowe(c);
        writeln('Dane zostaly posortowane wg Numeru faktury.');
        kontynuuj
      end;

    2 :
      begin
        writeln('Sortuje');
        c := 2;
        babelkowe(c);
        Delay(2000);
        writeln('Dane zostaly posortowane wg Numeru klienta');
        kontynuuj
      end;

    4 :
      begin
        writeln('Sortuje');
        Delay(2000);
        c := 3;
        babelkowe(c);
        writeln('Dane zostaly posortowane wg Sumy netto.');
        kontynuuj;
      end;

    5 :
      begin
        writeln('Sortuje');
        Delay(2000);
          c := 4;
          babelkowe(c);
          kontynuuj;
      end;
    6:
    begin
    writeln('Sortuje');
    Delay(2000);
    sortowanie_daty;
    kontynuuj;
    end;

    7:
    begin
    writeln('Sortuje');
    Delay(2000);
    sortowanie_daty1;
    kontynuuj;
    end;

    8 :
      begin
        writeln('Sortuje');
        Delay(2000);
        c := 5;
        babelkowe(c);
        writeln('Dane zostaly posortowane wg Vat-u');
        kontynuuj;
      end;
  end;
  end;

function FileExists(const FileName : string) : Boolean;
var F : file;
begin
{$I-}
  Assign(F, FileName);
  Reset((F));
  Close((F));
{$I+}
  FileExists := IOResult = 0;
end;

procedure wybor(var plik : string; var q : integer);
var a, x, z : integer; label Rammus; // KOTWICA
begin
  writeln('Podaj nazwe pliku: ');
  Readln(plik);
  if FileExists(plik) then
  begin
    Rammus :
    repeat
      writeln('Plik o danej nazwie istnieje. Mozesz teraz skorzystac z nastepujacych funkcji:');
      writeln('1 - Podanie nowej nazwy pliku');
      writeln('2 - Skasowanie zawartosci pliku i zapisanie w nim nowych informacji.');
      writeln('3 - Dopisanie danych na koncu pliku.');
      readln(a);
      case a of
        1 :
          begin
            writeln('Podaj nowa nazwe: ');
            Readln(plik);
            if FileExists(plik) then goto Rammus;
            writeln('Zmieniono nazwe pliku na: ', plik);
          end;
        2 :
          begin
            writeln('Kasuje zawartosc pliku.');
            Delay(4000);
            wczytaj(plik, x, q);
          end;
        3 :
          begin
            writeln('Dopisywanie danych na koncu pliku');
            x := 1;
            wczytaj(plik, x, q);
          end;
      else
        begin
          writeln('Bledny wybor.');
          z := 1;
        end;
      end;
    until z <> 1;
  end;
end;

begin
  clrscr;
  plik:='Alabot.txt';
  x:=0;
  q:=0;
  wczytaj(plik,x,q);
  wypisz(plik);
   clrscr;

  sortowanie;

  wypisz(plik);

  writeln('Ala');
  readln;
end.
0

Gdzie mam błąd w sortowaniu bąbelkowym ? Procedura w ogóle nie sortuje dlaczego ?

procedure sortowanie;
var z : byte; j, i : integer; x : faktura;
begin
  repeat
    writeln('Wedlug czego chcesz posortowac dane ?');
    writeln('1 - Numer faktury.');
    writeln('2 - Numer klienta');
    writeln('3 - Sposob zaplaty');
    writeln('4 - Suma netto');
    writeln('5 - Upust');
    writeln('6 - Data wystawienia faktury');
    writeln('7 - Date oplacenia faktury');
    writeln('8 - Vat-u');
    readln(z);
  until (z >= 1) and (z <= 8);
  case z of
    1 :
      begin
        writeln('Sortuje');
        Delay(2000);
        assign(plik_faktur, plik);
        reset(plik_faktur);
        for j := filesize(plik_faktur) to 1 do
          for i := 1 to j do
          begin
            if (t[i].numer) > (t[i + 1].numer) then
            begin
              x := t[i]; t[i] := t[i+1]; t[i+1]:= x;
            end;
          end;
        close(plik_faktur);
        with t[1] do
        begin
          Writeln('Dane o ', 1, ' fakturze: ');
          Write('Numer faktury: ');
          writeln(numer);
          Write('Numer klienta: ');
          writeln(numer_klienta);
          Write('Sposob zaplaty: ');
          writeln(sposob_oplaty);
          Write('Suma netto: ');
          writeln(suma_netto);
          Write('Ilosc upustu: ');
          writeln(upust);
          with Data_wystawienia do
          begin
            writeln('Data wystawienia faktury: ');
            Write('Dzien: ');
            writeln(Dzien);
            Write('Miesiac: ');
            writeln(Miesiac);
            Write('Rok: ');
            writeln(Rok);
          end;
          with Data_oplacenia do
          begin
            writeln('Data zaplaty faktury: ');
            Write('Dzien: ');
            writeln(Dzien);
            Write('Miesiac: ');
            writeln(Miesiac);
            Write('Rok: ');
            writeln(Rok);
          end;
          Write('Vat: ');
          writeln(vat);
          writeln('Byly to informacje o fakturze nr.', 1);
          kontynuuj;
        end;
        writeln('Dane zostaly posortowane wg Numeru faktury.');
        kontynuuj;
      end;
  end;
end;

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