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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.05.2012, 00:12   #1
(Нафаня)
Пользователь
 
Аватар для (Нафаня)
 
Регистрация: 08.03.2011
Сообщений: 56
Вопрос Задача на файлы

Не могу понять что не правильно( Пишет 'I/O error 102', процесс остановлен и что-то еще такое не могу перевести(
Код:
const
  n=7;
type
  telem=integer;
  mas=array [1..n] of telem;
  tfile=file of mas;
var
  f:tfile;
  x:mas;
  k,p,i:telem;
begin
  rewrite(f);
  Assign(f,'file.dat');
  write(f,x);
  reset(f);
  while not(eof(f)) do
    begin
      k:=0;
      p:=0;
      for i:=1 to n do
        if x[2*i-1]=0 then k:=k+1
          else if x[2*i]=0 then p:=p+1;
      if k>p then writeln('Na nechet mestah >')
        else writeln ('Na chetnyh >');
     end;
  close(f);
end.
Если бы люди,вдруг,узнали,о чем я думаю... Со мной бы сначала перестали здороваться,а потом,вообще,на костре сожгли бы нафиг
(Нафаня) вне форума Ответить с цитированием
Старый 31.05.2012, 01:05   #2
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
  Assign(f,'file.dat');
  reset(f);
  write(f,x);
  seek(f,0);
  while not(eof(f)) do
    begin
      k:=0;
      p:=0;
      for i:=1 to n do
        if x[2*i-1]=0 then k:=k+1
          else if x[2*i]=0 then p:=p+1;
      if k>p then writeln('Na nechet mestah >')
        else writeln ('Na chetnyh >');
  //вставьте хотя бы 1 считывание, иначе цикл будет бесконечным
     end;
  close(f);
Так попробуйте.
ПС Все правлю и правлю пост
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 31.05.2012 в 01:10.
BDA на форуме Ответить с цитированием
Старый 31.05.2012, 01:40   #3
(Нафаня)
Пользователь
 
Аватар для (Нафаня)
 
Регистрация: 08.03.2011
Сообщений: 56
По умолчанию

Тоже самое пишет( А зачем нужна процедура seek?
Если бы люди,вдруг,узнали,о чем я думаю... Со мной бы сначала перестали здороваться,а потом,вообще,на костре сожгли бы нафиг
(Нафаня) вне форума Ответить с цитированием
Старый 31.05.2012, 01:42   #4
(Нафаня)
Пользователь
 
Аватар для (Нафаня)
 
Регистрация: 08.03.2011
Сообщений: 56
По умолчанию

Нашла зачем) Ну ладно) Все равно, спасибо что откликнулись)
Если бы люди,вдруг,узнали,о чем я думаю... Со мной бы сначала перестали здороваться,а потом,вообще,на костре сожгли бы нафиг
(Нафаня) вне форума Ответить с цитированием
Старый 31.05.2012, 01:48   #5
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Все еще не работает и пишет ту же ошибку?
Цитата:
error 102
File not assigned
Reported by Reset, Rewrite, Append, Rename, or Eraseif the file variable has not been assigned a name through a call to Assign or AssignFile.
Вы привели полный текст программы?
Напишите, что должна делать программа.
И то, в чем компилируете: паскаль, дельфи...
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 31.05.2012, 08:19   #6
(Нафаня)
Пользователь
 
Аватар для (Нафаня)
 
Регистрация: 08.03.2011
Сообщений: 56
По умолчанию

Да, ошибка та же. Я в дельфи 7 делаю. Условие: Дан файл целых чисел. Определить, на каких местах больше нулей, на четных или на нечетных.
Код:
program nom_14;

{$APPTYPE CONSOLE}

uses
  SysUtils;

const
  n=7;
type
  telem=integer;
  mas=array [1..n] of telem;
  tfile=file of mas;
var
  f:tfile;
  x:mas;
  k,p,i:telem;
begin
  rewrite(f);
  Assign(f,'file.dat');
  write(f,x);
  reset(f);
  while not(eof(f)) do
    begin
      k:=0;
      p:=0;
      for i:=1 to n do
        if x[2*i-1]=0 then k:=k+1
          else if x[2*i]=0 then p:=p+1;
      if k>p then writeln('Na nechet mestah >')
        else writeln ('Na chetnyh >');
     end;
  close(f);
end.
Если бы люди,вдруг,узнали,о чем я думаю... Со мной бы сначала перестали здороваться,а потом,вообще,на костре сожгли бы нафиг
(Нафаня) вне форума Ответить с цитированием
Старый 31.05.2012, 08:46   #7
(Нафаня)
Пользователь
 
Аватар для (Нафаня)
 
Регистрация: 08.03.2011
Сообщений: 56
По умолчанию

Заработала) я файл неправильно создала)
Только когда программа сработала, там глюк какой-то, что строчка, где написано "На четных больше" или "На нечетных больше", повторяется бесконечное число раз
Код:
const
  n=7;
type
  telem=integer;
  mas=array [1..n] of telem;
  tfile=file of mas;
var
  f:tfile;
  x:mas;
  k,p,i:telem;
begin
  Assign(f,'file.dat');
  rewrite(f);
  writeln('Vv chisla v fail');
  for i:=1 to n do readln(x[i]);
  write(f,x);
  close(f);
  reset(f);
  while not(eof(f)) do
    begin
      k:=0;
      p:=0;
      for i:=1 to n do
        if x[2*i-1]=0 then k:=k+1
          else if x[2*i]=0 then p:=p+1;
      if k>p then writeln('Na nechet mestah >')
        else writeln ('Na chetnyh >');
     end;
  close(f);
end.
Если бы люди,вдруг,узнали,о чем я думаю... Со мной бы сначала перестали здороваться,а потом,вообще,на костре сожгли бы нафиг
(Нафаня) вне форума Ответить с цитированием
Старый 31.05.2012, 15:26   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Я уже сказал, почему цикл бесконечен.
Вы не делаете ни одного считывания, при этом, условием выхода является конец файла, который не может быть достигнут. И вообще, в этой задаче не нужен массив. Тем более, по условию у вас файл целых чисел, а не файл массивов из целых чисел.
Код:
var
  f: file of integer;
  i, n, a, k, p: integer;

  // k - nechet
  // p - chet
begin
  Assign(f, 'file.dat');
  rewrite(f);
  write('Input count of numbers: ');
  readln(n);
  for i := 1 to n do
  begin
    write('Input ', i, ' number: ');
    readln(a);
    write(f, a);
  end;
  seek(f, 0);
  i := 1;
  k := 0;
  p := 0;
  while not(eof(f)) do
  begin
    read(f, a);
    if a = 0 then
      if i = 0 then
        inc(p)
      else
        inc(k);
    i := (i + 1) mod 2;
  end;
  close(f);
  if k > p then
    writeln('Na nechet mestah >')
  else
  if k < p then
    writeln('Na chetnyh >')
  else
    writeln('Nichia');
  readln;

end.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 31.05.2012 в 15:34.
BDA на форуме Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
задача на файлы Сristina Помощь студентам 2 15.03.2011 20:53
Задача на файлы Janetka Помощь студентам 66 31.08.2010 10:20