Консультация № 185784
08.04.2012, 16:10
84.69 руб.
0 2 1
Уважаемые эксперты! Пожалуйста, ответьте на вопрос:
Помогите найти ошибку в коде.
Задача: написать процедуру, упорядочивающую значения в типизированном файле.
Возможно "врёт" файловый буфер. Как управлять им (и возможно ли) в Pascal ABC мне не известно.
Мой код:
Код:
procedure FileSort(Name: String);
var f: file of byte; i, j, min, PosMin, tmp: byte;
begin
assign(f,name);
reset(f);
for i:=0 to FileSize(f)-2 do
begin
seek(f,i);
read(f,min);
{Поиск минимума}
for j:=i+1 to FileSize(f)-1 do
begin
seek(f,j);
read(f,tmp);
if tmp<min then
begin
min:=tmp;
PosMin:=j
end;
end;
{Обмен}
seek(f,i);
read(f,tmp);
seek(f,i);
write(f,min);
seek(f,PosMin);
write(f,tmp);
end;
seek(f,0);
while not eof(f) do
begin
read(f,tmp);
write(tmp:4);
end;
close(f);
end;
var f: file of byte; s: string; i,x: byte;
begin
s:='C:\PABCWork.NET\Pas\FileSort.dat';
assign(f,s);
rewrite(f);
randomize;
for i:=0 to 9 do
begin
x:=random(256);
write(f,x);
write(x:4);
end;
writeln;
close(f);
FileSort(s);
end.

Обсуждение

Неизвестный
08.04.2012, 16:55
общий
это ответ
Здравствуйте, Максим Юрьевич!
Достаточно сделать инициализацию PosMin:=i;
FreePascal:
Код:
procedure FileSort(Name: String);
var f: file of byte; i, j, min, PosMin, tmp: byte;
begin
assign(f,name);
reset(f);
for i:=0 to FileSize(f)-2 do
begin
PosMin:=i;
seek(f,i);
read(f,min);
{Поиск минимума}
for j:=i+1 to FileSize(f)-1 do
begin
seek(f,j);
read(f,tmp);
if tmp<min then
begin
min:=tmp;
PosMin:=j
end;
end;
{Обмен}
seek(f,i);
read(f,tmp);
seek(f,i);
write(f,min);
seek(f,PosMin);
write(f,tmp);
end;
seek(f,0);
while not eof(f) do
begin
read(f,tmp);
write(tmp:4);
end;
close(f);
end;
var f: file of byte; s: string; i,x: byte;
begin
s:='C:\PABCWork.NET\Pas\FileSort.dat';
assign(f,s);
rewrite(f);
randomize;
for i:=0 to 9 do
begin
x:=random(256);
write(f,x);
write(x:4);
end;
writeln;
close(f);
FileSort(s);
end.


Код:
/home/micren/projects/Pascal/test
194 144 172 98 119 79 149 92 85 161
79 85 92 98 119 144 149 161 172 194

5
Неизвестный
08.04.2012, 17:09
общий
Большое спасибо!
Форма ответа