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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 09.05.2010, 15:53   #1
PlayHard
Пользователь
 
Регистрация: 05.05.2010
Сообщений: 13
Восклицание Ошибка: Попытка чтения за концом файла

вот программа с заданием:
Код:
//Сформировать файл F целого типа.
//Найти S - сумму первых трех положительных компонент файла (считая, что они имеются в файле).
//Если  S>10, то получить из файла одномерный массив B, записывая в него каждую вторую компоненту файла. Массив распечатать.
//Если S<=10, то каждую компоненту файла увеличить на величину S. Файл распечатать.

program laba6;
uses crt;
var f:file of integer;
    B:array[1..999] of integer;
    s,a,n,i,k,m:integer;
begin
assign (f,'1.dat');
rewrite (f);
writeln ('введите 1-ый компонент файла');
readln (a);
n:=1;
while a<>999 do
      begin
      write (f,a);
      writeln ('следующии компонент или 999 для выхода');
      readln (a);
      n:=n+1;
      end;
s:=0;
k:=0;
reset (f);
while not eof (f) do
      begin
      repeat
      read (f,a);
      s:=s+a;
      k:=k+1;
      until k=3;
      writeln ('сумма s первых 3-х элементов равна: ',s);
      end;
reset (f);
m:=0;
while not eof (f) do
read (f,a);
      begin
      m:=m+1;
      if s>10 then
        begin
        for i:=1 to n do
         if (m mod 2)=0 then
         write (b[i]);
         if s<=10 then
         a:=a*s;
         write (f,a);
         end;
      end;
reset (f);
while not eof (f) do
      begin
      read (f,a);
      writeln (a:5);
      end;
      for i:=1 to n do
      begin
      writeln (b[i]);
      end;
      close (f);
end.
пишет ошибку:
»*Ошибка: Попытка чтения за концом файла (Program лаба №6 2 семестр.pas, строка 30)

че за ошибка??? и как от нее избавиться???

ЗАРАНЕЕ БЛАГОДАРЮ!!! А И КСТАТИ С 9 МАЯ ТОВАРИЩИ!!!
PlayHard вне форума Ответить с цитированием
Старый 09.05.2010, 17:01   #2
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Код:
k:=0;
reset (f);
while not eof (f) do
      begin
      k:=0; // Думаю эта строка тебе поможет.
      repeat
      read (f,a);
      s:=s+a;
      k:=k+1;
      until k=3;
      writeln ('сумма s первых 3-х элементов равна: ',s);
      end;
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 09.05.2010, 17:06   #3
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
while not eof (f) do
      begin
      repeat
      read (f,a);
      s:=s+a;
      k:=k+1;
      until k=3
Где вы будете читать, если стоите на последнем элементе?
p51x вне форума Ответить с цитированием
Старый 10.05.2010, 11:15   #4
PlayHard
Пользователь
 
Регистрация: 05.05.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Z1000000 Посмотреть сообщение
Код:
k:=0;
reset (f);
while not eof (f) do
      begin
      k:=0; // Думаю эта строка тебе поможет.
      repeat
      read (f,a);
      s:=s+a;
      k:=k+1;
      until k=3;
      writeln ('сумма s первых 3-х элементов равна: ',s);
      end;
так я ж выше писал надо еще и в цикле??


Цитата:
Сообщение от p51x Посмотреть сообщение
Код:
while not eof (f) do
      begin
      repeat
      read (f,a);
      s:=s+a;
      k:=k+1;
      until k=3
Где вы будете читать, если стоите на последнем элементе?
так я ж перед циклом писал reset
Цитата:
Сообщение от PlayHard Посмотреть сообщение
Код:
reset (f);<-----вот разве он не ставит указатель на нулевой компонент (ну т.е в начало)
while not eof (f) do
      begin
      repeat
      read (f,a);
      s:=s+a;
      k:=k+1;
      until k=3;
      writeln ('сумма s первых 3-х элементов равна: ',s);
      end;
мб я чет не так написал????? ПОМОГИТЕ ЗАВТРА СДАВАТЬ
PlayHard вне форума Ответить с цитированием
Старый 10.05.2010, 11:44   #5
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Извини, комменты не прочил.

Код:
k:=0;
reset (f);
while not eof (f) do
      begin
      repeat
      read (f,a);
      s:=s+a;
      k:=k+1;
      until k=3;
      writeln ('сумма s первых 3-х элементов равна: ',s);
      end;
но смысл тот же, у тебя нет выхода из цикла чтения из файла. После того, как он прочитает первые 3 элемента. Он напишет на экране сумму. И потом. будет читать 4, 5, 6, ... итд элементы, пока не достигнет конца файла и выдаст ошибку.

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

Вот тебе кусочек , только проверь на синтаксис. От руки набивал, Паскаля нет рядом

Код:
k := 0;S:=0;
while not eof (f) or k<3 do
 begin 
 read (f,a);
 if a = abs(a) then begin k:=k+1;S:=S+a; end; // число положительное
 end;
if k = 3 then // Были найдены 3 положительные числа
 writeln ('сумма s первых 3-х положительных элементов равна: ',s);
else
 begin
 writeln ('В файле отсутствуют 3 положительных числа. Работа программы завершена');  
 Exit;
 end;
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 10.05.2010, 12:33   #6
PlayHard
Пользователь
 
Регистрация: 05.05.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Z1000000 Посмотреть сообщение
Извини, комменты не прочил.

Код:
k:=0;
reset (f);
while not eof (f) do
      begin
      repeat
      read (f,a);
      s:=s+a;
      k:=k+1;
      until k=3;
      writeln ('сумма s первых 3-х элементов равна: ',s);
      end;
но смысл тот же, у тебя нет выхода из цикла чтения из файла. После того, как он прочитает первые 3 элемента. Он напишет на экране сумму. И потом. будет читать 4, 5, 6, ... итд элементы, пока не достигнет конца файла и выдаст ошибку.

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

Вот тебе кусочек , только проверь на синтаксис. От руки набивал, Паскаля нет рядом

Код:
k := 0;S:=0;
while not eof (f) or k<3 do
 begin 
 read (f,a);
 if a = abs(a) then begin k:=k+1;S:=S+a; end; // число положительное
 end;
if k = 3 then // Были найдены 3 положительные числа
 writeln ('сумма s первых 3-х положительных элементов равна: ',s);
else
 begin
 writeln ('В файле отсутствуют 3 положительных числа. Работа программы завершена');  
 Exit;
 end;
написал то ты без ошибок ток упс "»*Ошибка: Попытка чтения за концом файла (Program лаба №6 2 семестр.pas, строка 27)"

ппц че ей надо не понимаю:confuse d:

Последний раз редактировалось PlayHard; 10.05.2010 в 12:39.
PlayHard вне форума Ответить с цитированием
Старый 10.05.2010, 13:40   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,709
По умолчанию

Код:
while not eof (f) and k<3 do
p51x вне форума Ответить с цитированием
Старый 10.05.2010, 21:10   #8
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

p51x прав, действительно
Код:
while not eof (f) and k<3 do
а все вместе :

Код:
program laba6;
uses crt;
var f:file of integer;
    B:array[1..999] of integer;
    s,a,n,i,k,m:integer;
begin
assign (f,'1.dat');
rewrite (f);
writeln ('введите 1-ый компонент файла');
readln (a);
n:=1;
while a<>999 do
      begin
      write (f,a);
      writeln ('следующии компонент или 999 для выхода');
      readln (a);
      n:=n+1;
      end;

reset (f);
k := 0;S:=0;
while (not eof (f)) and (k<3) do
 begin
 read (f,a);
 if a = abs(a) then begin k:=k+1;S:=S+a; end; // число положительное
 end;
if k = 3 then // Были найдены 3 положительные числа
 writeln ('сумма s первых 3-х положительных элементов равна: ',s)
else
 begin
 writeln ('В файле отсутствуют 3 положительных числа. Работа программы завершена');
 Exit;
 end;

reset (f);
m:=0;
while not eof (f) do
read (f,a);
      begin
      m:=m+1;
      if s>10 then
        begin
        for i:=1 to n do
         if (m mod 2)=0 then
         write (b[i]);
         if s<=10 then
         a:=a*s;
         write (f,a);
         end;
      end;
reset (f);
while not eof (f) do
      begin
      read (f,a);
      writeln (a:5);
      end;
      for i:=1 to n do
      begin
      writeln (b[i]);
      end;
      close (f);
end.
Это работает проверил в pascal abc 3.0.1.35
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 10.05.2010, 21:34   #9
Z1000000
Форумчанин
 
Регистрация: 04.05.2010
Сообщений: 495
По умолчанию

Вот тебе полный рабочий вариант твоей лабы.

Код:
program laba6;
uses crt;
var f:file of integer;
    B:array[1..999] of integer;
    counter : integer;
    s,a,n,i,k,m:integer;
begin
cls;
assign (f,'1.dat');
rewrite (f);
writeln ('введите 1-ый компонент файла');
readln (a);
n:=1;
while a<>999 do
      begin
      write (f,a);
      writeln ('следующии компонент или 999 для выхода');
      readln (a);
      n:=n+1;
      end;

reset (f);
k := 0;S:=0;
while (not eof (f)) and (k<3) do
 begin
 read (f,a);
 if a = abs(a) then begin k:=k+1;S:=S+a; end; // число положительное
 end;
if k = 3 then // Были найдены 3 положительные числа
 writeln ('сумма s первых 3-х положительных элементов равна: ',s)
else
 begin
 writeln ('В файле отсутствуют 3 положительных числа. Работа программы завершена');
 Exit;
 end;

if S > 10 then
 begin
 m:=1; counter :=1;
 reset(f);
 while not eof(f) do
  begin
  read(f,a);
  if m mod 2 = 0 then begin b[counter] := a; counter := counter + 1; end;
  m := m+1;
  end;
 writeln ('Сумма больше 10.Распечатываем массив ,составленный из вторых элементов');
 for i := 1 to counter-1 do
  writeln ( b[i] );
 end
else
 begin // S<=10
 reset(f);
 m:=0;
 while not eof(f) do
  begin
  read(f,a);
  seek(f,m);
  write(f,a+S);
  m:=m+1;
  end;
 close(f);
 writeln ('Сумма меньше либо равна 10. Распечатываем файл.');
 reset(f);
 while not eof(f) do
  begin
  read(f,a);
  writeln(a);
  end;
 end;
close (f);
end.
Нажми на весы, поставь +
Для благодарностей : WebMoney WMR R252732729948
Z1000000 вне форума Ответить с цитированием
Старый 10.05.2010, 21:36   #10
PlayHard
Пользователь
 
Регистрация: 05.05.2010
Сообщений: 13
По умолчанию

Цитата:
Сообщение от Z1000000 Посмотреть сообщение
p51x прав, действительно
Код:
while not eof (f) and k<3 do
а все вместе :

Код:
program laba6;
uses crt;
var f:file of integer;
    B:array[1..999] of integer;
    s,a,n,i,k,m:integer;
begin
assign (f,'1.dat');
rewrite (f);
writeln ('введите 1-ый компонент файла');
readln (a);
n:=1;
while a<>999 do
      begin
      write (f,a);
      writeln ('следующии компонент или 999 для выхода');
      readln (a);
      n:=n+1;
      end;

reset (f);
k := 0;S:=0;
while (not eof (f)) and (k<3) do
 begin
 read (f,a);
 if a = abs(a) then begin k:=k+1;S:=S+a; end; // число положительное
 end;
if k = 3 then // Были найдены 3 положительные числа
 writeln ('сумма s первых 3-х положительных элементов равна: ',s)
else
 begin
 writeln ('В файле отсутствуют 3 положительных числа. Работа программы завершена');
 Exit;
 end;

reset (f);
m:=0;
while not eof (f) do
read (f,a);
      begin
      m:=m+1;
      if s>10 then
        begin
        for i:=1 to n do
         if (m mod 2)=0 then
         write (b[i]);
         if s<=10 then
         a:=a*s;
         write (f,a);
         end;
      end;
reset (f);
while not eof (f) do
      begin
      read (f,a);
      writeln (a:5);
      end;
      for i:=1 to n do
      begin
      writeln (b[i]);
      end;
      close (f);
end.
Это работает проверил в pascal abc 3.0.1.35
я тож проверил работает! ток считает не до конца
http://www.programmersforum.ru/attac...1&d=1273512871

че делать??? он сумму считает выводит файл а вот 2 часть задания не выполняет заполняет ее нулями ПОМОГИТЕ!!!
Изображения
Тип файла: jpg олшибка.jpg (76.7 Кб, 141 просмотров)
PlayHard вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
ошибка чтения файла Umnik1 Общие вопросы Delphi 12 25.06.2013 22:57
ошибка чтения из реестра betirsolt Общие вопросы Delphi 4 18.04.2010 17:30
Ошибка чтения из памяти Шульц Общие вопросы Delphi 20 03.11.2009 12:26
Delphi... Проблема с динамическими массивами (попытка чтения по неправильному адресу) g0liath Помощь студентам 2 12.05.2009 08:45
ошибка чтения KiSH333 БД в Delphi 12 22.08.2008 11:09