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

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

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.08.2012, 14:32   #1
brunis
 
Регистрация: 17.07.2012
Сообщений: 8
По умолчанию Чтение из файла

Помогите пожалуйста, как правильно нужно считывать информацию из файла в этой задаче http://acmp.ru/?main=task&id_task=9 Сколько я не крутил с read-ом и readln-ом у меня всевремя образуется вечный цикл(ну или что-то типо того) у меня программа зависает в этом месте
Код:
  Readln(n);
  For i:=1 to n do Read(f1,a[i]);
вот полный код
Код:
uses crt;
Var  f1,f2:Text;
     a:array [1..100] of integer;
     n,i,max,min,sum,b,e:integer;
Begin
  Assign(f1,'INPUT.TXT'); Reset(f1);
  Assign(f2,'OUTPUT.TXT'); Rewrite(f2);
  Readln(f1,n);
  For i:=1 to n do Read(f1,a[i]);
  b:=1;
  e:=1;
  max:=a[1];
  min:=a[1];
  sum:=0;
  For i:=1 to n do begin
    if min>a[i] then Begin min:=a[i]; b:=i; End;
    if max<a[i] then Begin max:=a[i]; e:=i; End;
    If a[i]>0 then sum:=sum+a[i];
  End;
  write(f2,sum,' ');

  if b>e then Begin
    sum:=b;
    b:=e;
    e:=sum;
  End;
  sum:=1;
  if(e-b<2) then sum:=0
  Else For i:=b+1 to e-1 do sum:=sum*a[i];
  write(f2,sum);
  Close(f1);
  Close(f2);
End.
Если вводить значения через консоль то всё работает, а эта ошибка не даёт продвигаться дальше.
brunis вне форума Ответить с цитированием
Старый 08.08.2012, 16:10   #2
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

пробел это символ - тип Char
То бишь по сути в файле во 2 строке имеем последовательность:числосимволчислосимволчисло...
astecenko вне форума Ответить с цитированием
Старый 09.08.2012, 19:43   #3
Paster Fob
Форумчанин
 
Аватар для Paster Fob
 
Регистрация: 06.02.2011
Сообщений: 105
По умолчанию

Мой вариант:
Код:
type tarray=array [1..100] of integer;

var f1,f2:text;mas:tarray;
    i,k,m,n,sum,max,min:integer;

begin
  assign(f1,'input.txt');
  reset(f1);
  assign(f2,'output.txt');
  rewrite(f2);
  readln(f1,n);
  sum:=0;
  for i:=1 to n do begin
    read(f1,mas[i]);
    if mas[i]>0 then
      sum:=sum+mas[i];
  end;
  min:=mas[1];max:=mas[1];
  for i:=1 to n do begin
    if mas[i]<=min then begin
      min:=mas[i];
      k:=i;
    end;
    if mas[i]>=max then begin
      max:=mas[i];
      m:=i;
    end;
  end;
  n:=1;
  if m>k then
    for i:=k+1 to m-1 do
      n:=n*mas[i]
  else
    for i:=m+1 to k-1 do
      n:=n*mas[i];
  write(f2,sum,' ',n);
  close(f1);
  close(f2);
end.
Paster Fob вне форума Ответить с цитированием
Старый 10.08.2012, 06:52   #4
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Цитата:
Сообщение от astecenko Посмотреть сообщение
пробел это символ - тип Char
То бишь по сути в файле во 2 строке имеем последовательность:числосимволчислосимволчисло...
Ну и что?.. astacenko, открой учебник или help и почитай про ввод чисел в текстовых файлах.

Brunis, у тебя те две строчки, которые отдельно, написаны неверно - в превой строке пропущена файловая переменная. Это как раз должно было привести к эффекту, похожему на "подвисание", хотя на самом деле прога просто ждет ввода с клавы.

Но в тексте программы у тебя эта ошибка отсутствует (то есть файловая пременная, f1, наличиствует). В таком виде - все правильно, программа должна была осуществить ввод как положено, и это железно. Почему у тебя не проходит - загадка природы.. Хотя, помню я такие случаи на некоторых сайтах: говорят, что строка одна, на самом деле она разбита на несколько. Это, как я понимаю, может происходить, если авторы сайта делают исправление в строке, используя обычный текстовый редактор, и он бъет строку. Тогда приходилось вставлять в цикл ввода проверку окончания строки и перехода на новую, как-то так:
Код:
  for i:=1 to n do begin
    if EoLn(f) then readln(f);
    read(f,a[i])
  end;
Но прежде чем прибегать к такому средству, все же убедись, что ты не совершаешь ошибку, как в тех двух строках выше.
Успехов тебе.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Старый 10.08.2012, 12:56   #5
brunis
 
Регистрация: 17.07.2012
Сообщений: 8
По умолчанию

Спасибо всем за помощь, проблему я уже давно нашёл и она оказалась во мне Я отправлял на проверку файл моего первоначального кода, который и содержал ошибку...
Помимо компиляции программу нужно ещё и сохранять, а этого я не делал. Так что всё оказалось гораздо проще
brunis вне форума Ответить с цитированием
Старый 10.08.2012, 13:19   #6
astecenko
Homo Interneticus
Форумчанин
 
Аватар для astecenko
 
Регистрация: 04.03.2011
Сообщений: 611
По умолчанию

TinMan с текстовыми файлами средствами Pascal давно не работал (оно мне не надо как-то), но все же открыл справку, увидел и осмыслил: With type integer or type real variables: Read skips any blanks, tabs, or end-of-line markers preceding the numeric string.

Только одно не понятно, нафига мой ник каверкать, тем более что он образован от фамилии?
astecenko вне форума Ответить с цитированием
Старый 11.08.2012, 12:59   #7
TinMan
Форумчанин
 
Аватар для TinMan
 
Регистрация: 05.09.2011
Сообщений: 869
По умолчанию

Я очень извиняюсь, это прсто ошибка, без всякого умысла - как переднего, так и заднего. Еще раз извиняюсь.
Предпочитаю на "ты".
TinMan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Чтение из файла на си Mostwanted Общие вопросы C/C++ 2 29.05.2011 15:42
чтение из файла Niksan Общие вопросы C/C++ 3 02.05.2011 18:14
Чтение с файла с++ Voxa7 Помощь студентам 2 27.04.2011 20:47
чтение из файла maxandmin Общие вопросы C/C++ 1 21.07.2010 17:40
Чтение из файла Need_Help Паскаль, Turbo Pascal, PascalABC.NET 5 19.05.2007 05:37