[Turbo Pascal] Zapis pliku binarnego zdefiniowanego.

0

Mam problem z napisaniem programu, który zapisze do pliku binarnego zdefiniowanego 40 wartości typu real, a następnie zamieni miejscami pierwszą wartość z ostatnią w tym pliku.

Napisałem coś takiego:

program binarne;

uses crt;

var
v : array[1..40] of real;
f : file of real;
i : longint;
a, b, t: real;

begin
clrscr;
randomize;
assign(f, 'C:\liczby.dat');
rewrite(f);
for i:=1 to 40 do
begin
v[i]:=random(17038);
write(f,v[i]);
end;
t := a;
a := b;
b := t;
seek(f,0);
write(f,a);
seek(f,39);
write(f,b);
read(f, v[i]);
close(f);

end.

Przy próbie uruchomienia wyskakuje błąd disk read error i zaznacza linijkę read(f, v[i]);

0

Omg...

assign(f, 'C:\liczby.dat');
rewrite(f); //tworzysz nowy plik !!!
for i:=1 to 40 do
begin
v[i]:=random(17038);
write(f,v[i]);
end;
t := a;
a := b;
b := t;
seek(f,0);
write(f,a);
seek(f,39);
write(f,b);
read(f, v[i]);
close(f);

Jeżeli tworzysz nowy plik, to nie możesz używać w nim 'seek' oraz 'read'...
Sprecyzuj pytanie.

Oraz polecam przerzucenie się na jakiś inny kompilator.

0

Czyli mam go najpierw stworzyć, zamknąć i otworzyć i potem np. zamienić miejscami liczby? Zrobiłem coś takiego, dokładnie to mam problem z tym, że nie wiem jak wyświetlić te liczby w programie i czy dobrze robię zamianę.

program binarne;

uses crt;

var
v : array[1..40] of real;
f : file of real;
i : longint;
a, b, t: real;

begin
clrscr;
randomize;
assign(f, 'C:\liczby.dat');
rewrite(f);
for i:=1 to 40 do
begin
v[i]:=random(17038);
write(f,v[i]);
end;

assign(f, 'C:\liczby.dat');
reset(f);
t := a;
a := b;
b := t;
seek(f,0);
write(f,a);
seek(f,39);
write(f,b);
close(f);

readln;
end.

0
  1. zapomniałeś zamknąć plik po zakończeniu zapisu a przed ponownym otwarciem go
  2. co to jest a i b? nagle tu używasz
t := a;
a := b;
b := t;

a nigdzie nie nadałeś im sensownych wartości.

0
 
program binarne;

uses crt;

var
   v : array[1..40] of real;
   f : file of real;
   i : longint; 
   a, b, t: real;
begin
   clrscr;
   randomize;
   assign(f, 'C:\liczby.dat');
   rewrite(f);
   for i:=1 to 40 do
       begin
           v[i]:=random(17038);
           write(f,v[i]);
       end;
   Close(f);
   Assign(f, 'C:\liczby.dat');
   Reset(f);
   //(...)
   Close(f);
end.

Tak to powinno wyglądać na początek. Poza tym zmienne a, b i t w ogóle nie mają podanych wartości. Przypisujesz je sobie ale mają wzięte wartości z kosmosu, trochę to nieładne, jakkolwiek inaczej by to ująć.

W miejscu (...) powinieneś wczytać wszystkie elementy po kolei do tej samej tablicy i ew. wprowadzić warunek, że pierwsze i ostatnie pole jest zapisane odwrotnie (np. inna zmienna). Następnie wrócić na początek pliku i nadpisać go.

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