Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2009, 12:30   #1
makc101
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 15
Вопрос работа с файлами (Pascal)

Вот задание:Дан файл целых чисел. Преобразовать его, удалив нечетные числа. Порядок следования четных чисел сохранить.
Вот прога, но она не работает:
Код:
program file;
procedure Input(s:string);
var f:file of word;
    k, i, l:word;
begin
writeln('vvedite kolichestvo komponentov');
readln(k);
assign(f,s);
rewrite(f);
for i:=1 to k do
 begin
 read(l);
 write(f,l);
 end;
close(f);
end;
procedure Change(s:string);
var f:file of word;
    l, i, k:word;
begin
assign(f,s);
reset(f);
i:=0;
k:=0;
while not Dof (f) do
 begin
 read(f,l);
 inc(i);
 if(l mod 2)=0 then
      begin
      seek(f,k);
      write(f,k);
      k:=k+1;
      seek(f,i);
      end;
 end;
seek(f,k);
truncate(f);
close(f);
end;
procedure Output(s:string);
var f:file of word;
    l:word;
begin
assign(f,s);
reset(f);
while not EOF do
 begin
 read(f,l);
 writeln('l');
 end;
end;
var s:string;
Begin
write('s');
readln(s);
Input(s);
Change(s);
Output(s);
End.

Последний раз редактировалось Stilet; 09.02.2010 в 15:38.
makc101 вне форума Ответить с цитированием
Старый 26.12.2009, 12:39   #2
Veselyn
Форумчанин
 
Аватар для Veselyn
 
Регистрация: 29.01.2009
Сообщений: 175
По умолчанию

что именно не работает?
Все люди делятся на 10 типов: те, кто понимают двоичную систему счисления и те, кто нет.
Veselyn вне форума Ответить с цитированием
Старый 26.12.2009, 12:46   #3
makc101
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 15
По умолчанию

Не выводит данные,но файл создается
makc101 вне форума Ответить с цитированием
Старый 26.12.2009, 13:07   #4
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,762
По умолчанию

Если в паскале есть класс TStringList или TStrings, то удобнее и легче использовать его.
Увы нет под рукой паскаля.
FaTaL вне форума Ответить с цитированием
Старый 26.12.2009, 13:09   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Если в паскале есть класс TStringList или TStrings,
нет такого в Turbo Pascal

___________________________________

makc101

1) НИКОГДА НЕ НАЗЫВАЙТЕ ПРОГРАММУ FILE (и не используете имён переменный, функций и процедур, совпадающих с ключевыми словами. В лучшем случае, получите ошибку при компиляции, в худшем - глюки при работе!!!!

2) похоже, выложенный код вообще НЕ компилируется!

3) идея программы правильная, но было несколько критических ошибок!
исправил!

4) при публикации кода на форуме используете кнопочку # (это обрамление кода тэгами [СODE] .. [/CODE]

вот рабочее решение:
Код:
procedure Input(s: string);
var f: file of word;
  k, i, l: word;
begin
  writeln('vvedite kolichestvo komponentov');
  readln(k);
  assign(f, s);
  rewrite(f);
  for i := 1 to k do
  begin
    read(l);
    write(f, l);
  end;
  close(f);
end;

procedure Change(s: string);
var f: file of word;
  l, i, k: word;
begin
  assign(f, s);
  reset(f);
  i := 0;
  k := 0;
  while not Eof(f) do
  begin
    read(f, l);
    inc(i);
    if (l mod 2) = 0 then
    begin
      seek(f, k);
      write(f, l);
      k := k + 1;
      seek(f, i);
    end;
  end;
  seek(f, k);
  truncate(f);
  close(f);
end;

procedure Output(s: string);
var f: file of word;
  l: word;
begin
  assign(f, s);
  reset(f);
  while not EOF(f) do
  begin
    read(f, l);
    writeln(l);
  end;
  close(f);
end;

var s: string;
begin
  write('Vvedite ima faila: ');
  readln(s);
  Input(s);
  Change(s);
  Output(s);
end.

p.s. в процедурах Change и Output можно было крутить цикл не до EOF(f)
а банально FOR по количеcтву записей в файле
(для типизированных файлов size(f) возвращает сколько записей в файле!)

Последний раз редактировалось Serge_Bliznykov; 26.12.2009 в 13:32.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.12.2009, 14:46   #6
makc101
Пользователь
 
Регистрация: 29.11.2009
Сообщений: 15
По умолчанию

Спасибо! В следующий раз учту.
makc101 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с массивами и файлами (Pascal) pakusya Помощь студентам 8 28.06.2012 10:08
Работа с файлами в Pascal Fellics{новичок} Помощь студентам 1 16.12.2009 10:20
Pascal/ работа с файлами V@dlo Помощь студентам 1 14.11.2009 19:55
pascal работа с файлами evilguy Помощь студентам 3 18.04.2009 18:08