Помощь - Поиск - Пользователи - Календарь
Полная версия: файлы
Форум «Всё о Паскале» > 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 )
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.