Помощь - Поиск - Пользователи - Календарь
Полная версия: файлы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Hunt666
задачка такая удалить из файла с нечетным количеством элементов тот который находится посередине у мне прога почти готова но понять не могу в чем ошибка


program file_1;
uses crt;
var f: file of byte;
k,i,y,n,x: byte;
begin
begin
{создание файла}
randomize;
clrscr;
assign(f,'a:\aaa.bbb');
rewrite(f);
for i:=1 to 19 do
begin
n:=random(99);
write(n,' ');
end;
writeln;
close(f);
end;

{удаление среднего элемента}

begin
assign(f,'a:\aaa.bbb');
reset(f);
x:= filesize(f);
k:=((x div 2)+1);
for i:=k to (filesize(f)-1) do
begin
seek(f,i);
read(f,y);
seek(f,i-1);
write(f,y);
end;
truncate(f);
write(y,' ');
close(f);
end;
End.



ps частьв которой идет создание файла я задавал массивом и его уже писал в файл все работало
эту часть я изменил вторую не трогал
мисс_граффити
1. обязательно надо с дискетой работать? или у тебя на а что-то другое привешено?
2. процитируй, пожалуйста, строчку, где идет первоначальная запись в файл. я ее не нашла...
Hunt666
Цитата(мисс_граффити @ 18.02.2007 15:25) *

1. обязательно надо с дискетой работать? или у тебя на а что-то другое привешено?
2. процитируй, пожалуйста, строчку, где идет первоначальная запись в файл. я ее не нашла...



куда писать файл не важно ( просто так искать удобнее)
первоначальное создание файла идет в

begin
{создание файла}
randomize;
clrscr;
assign(f,'a:\aaa.bbb');
rewrite(f);
for i:=1 to 19 do
begin
n:=random(99);
write(n,' ');
end;
writeln;
close(f);
end;

мисс_граффити
я тебя что попросила сделать?
показать мне строчку, где элементы пишутся в файл.
Hunt666
Цитата(мисс_граффити @ 18.02.2007 15:41) *

я тебя что попросила сделать?
показать мне строчку, где элементы пишутся в файл.

ошибку увидел вот что получилось
 
program file_1;
uses crt;
var f: file of byte;
k,i,y,n,x: byte;
begin
begin
{создание файла}
randomize;
clrscr;
assign(f,'a:\aaa.bbb');
rewrite(f);
writeln('файл состоит из элементов:');
for i:=1 to 19 do
begin
n:=random(50);
write(f,n);
write(n,' ');
end;
writeln;
close(f);

end;

{удаление среднего элемента}

begin
assign(f,'a:\aaa.bbb');
reset(f);
x:= filesize(f);
k:=((x div 2)+1);
for i:=k to (filesize(f)-1) do
begin
seek(f,i);
read(f,n);
seek(f,i-1);
write(f,n);
end;
truncate(f);
close(f);
end;
End.



тока вот теперь у меня не получается вывести на экран что находится в файле (конечном)
мисс_граффити
а где ты пытаешься вывести?
что именно не получается?
Hunt666
Цитата(мисс_граффити @ 18.02.2007 16:34) *

а где ты пытаешься вывести?
что именно не получается?

пытался после truncate но выводит тока последний элемент
volvo
После Truncate делай Reset, и только потом пытайся вывести данные...
мисс_граффити
Естественно. После truncate указатель где, по-твоему? Явно ведь не на начале файла...
Hunt666

truncate(f);
writeln;
readln;
reset(f);
writeln('файл стал');
while not eof(f) do
begin
read(f,y);
write(y,' ');
end;
writeln;
readln;
close(f);



вот что я после truncate добавил ,все работает ,спасибо всем кто помогал
Hunt666
т.к. делал прогу по аналогии то не совсем понял что происходит вот в этом месте

for i:=k to (filesize(f)-1) do
begin
seek(f,i);
read(f,n);
seek(f,i-1);
write(f,n);
end;

Bokul
Сдвигаешь на единицу все элементы файла начиная с середины, тем самым замещая (удаляя) центральный элемент..

Добавлено через 3 мин.
PS Поздравляю себя с 1000 сообщением !thanks.gif (почти volvo догнал smile.gif )
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.