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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.04.2014, 19:24   #1
sanji2010
Пользователь
 
Регистрация: 25.11.2013
Сообщений: 52
По умолчанию Работа с файлами PASCAL

Здравствуйте, столкнулся с такой проблемой. Написал программу, без считывания и вывода в файл она работала, мне сказали переделать, если не трудно, помогите найти ошибку. Задание:
Для заданного массива X1,X2, … ,Xn найти среднее арифметическое СХ элементов, имеющих четные номера и притом положительных, а для заданного массива Y1,Y2, … ,Yn найти среднее арифметическое СY элементов, имеющих нечетные номера и притом отрицательных.
Код:
uses crt;
{$I-}
CONST
t=100;
var sum,sum1,arifm1,arifm2:real; m,n,i,j,k,f:integer;f1,f2,f3:file of integer;
    a,b:array [1 .. t] of integer;
    way,way1:string;
begin
clrscr;
repeat
  write(' Введите путь к файлу c первым массивом: ');
  readln(way);
  assign(f1,way);
  reset(f1);
  if IOresult<>0 then writeln('Файл не найден, повторите ввод');
    assign(f1,way);
    reset(f1);
  until IOresult=0;
  while not eof do
  begin
  read(a[i]);
 k:=0;
 sum:=0;
 if ((i mod 2)=0) and (a[i]>0) then
 begin
  k:=k+1;
  sum:=sum+a[i];
 end;
 if k<>0 then
 arifm1:=sum/k
 else
 writeln(' В массиве нет подходящих элементов');
 close(f1);
 end;
repeat
  write(' Введите путь к файлу со вторым массивом: ');
  readln(way1);
  assign(f2,way1);
  reset(f2);
  if IOresult<>0 then writeln('Файл не найден, повторите ввод');
    assign(f2,way1);
    reset(f2);
  until IOresult=0;
  f:=0;
 sum1:=0;
 while not eof do
 begin
 if ((j mod 2)<>0) and (b[j]<0) then
  begin
  f:=f+1;
  sum1:=sum1+b[j];
  end;
 if f<>0 then
 arifm2:=sum1/f
 else
 writeln(' В массиве нет подходящих элементов');
 end;
 writeln('Результат работы программы выведен в файл result.txt');
  assign(f3,'result.txt');
  rewrite(f1);
  writeln(arifm1);
  writeln(arifm2);
readln;

end.
Skype sanji-dim
Свою благодарность можно выразить на счёт R393628098492
sanji2010 вне форума Ответить с цитированием
Старый 21.04.2014, 22:51   #2
AnryKZKZ
Пользователь
 
Регистрация: 15.04.2014
Сообщений: 62
По умолчанию

Код:
uses crt;
repeat
  write(' Введите путь к файлу c первым массивом: ');
  readln(way);
  assign(f1,way);
  reset(f1);
  if IOresult<>0 then writeln('Файл не найден, повторите ввод');
    assign(f1,way);
    reset(f1);
  until IOresult=0;
Не совсем понятно зачем вы еще раз делаете assign (f1, Way) и reset (f1)? Они там совсем не нужны.

Код:
  while not eof do
  begin
  read(a[i]);
Для считывания необходимо писать read(f1, a[i]); или readln(f1, a[i]); - в зависимости от ситуации. В Вашем случае - read(f1, a[i]);
А так вы просто считываете значения с консоли.

Код:
repeat
  write(' Введите путь к файлу со вторым массивом: ');
  readln(way1);
  assign(f2,way1);
  reset(f2);
  if IOresult<>0 then writeln('Файл не найден, повторите ввод');
    assign(f2,way1);
    reset(f2);
  until IOresult=0;
та же ошибка, о которой писал ранее.

Код:
  f:=0;
 sum1:=0;
 while not eof do
 begin
 if ((j mod 2)<>0) and (b[j]<0) then
  begin
  f:=f+1;
  sum1:=sum1+b[j];
  end;
 if f<>0 then
 arifm2:=sum1/f
 else
 writeln(' В массиве нет подходящих элементов');
 end;
Тут не совсем понятно как вы получаете значение b[j]. Вероятнее всего пропустили команду read(f2, b[j]);

Код:
 writeln('Результат работы программы выведен в файл result.txt');
  assign(f3,'result.txt');
  rewrite(f1);
  writeln(arifm1);
  writeln(arifm2);
readln;

end.
в rewrite должна стоять переменная f3. Т.е. команда будет rewrite(f3);
writeln для записи в файл пишется writeln(f3, arifm1); и writeln(f3, arifm2);
После всего этого нужно ставить close (f3);
AnryKZKZ вне форума Ответить с цитированием
Старый 21.04.2014, 22:58   #3
sanji2010
Пользователь
 
Регистрация: 25.11.2013
Сообщений: 52
По умолчанию

Cпасибо большое =) Очень помогли, наконец разобрался.
Рабочий код программы
Код:
{$I-}
var
  x, c1, c2: integer;
  s1, s2: LongInt;
  p: string;
  f: text;
begin
  repeat
    Write('Файл с массивом X: '); ReadLn(p);
    Assign(f,p); Reset(f);
  until IOResult=0;
  s1:=0; c1:=0; n:=0;
  while SeekEOF(f) do begin
    inc(n); Read(x);
    if not odd(n) and (x>0) then begin
      inc(c1); s1:=s1+x;
    end;
  end;
  Close(f);
  repeat
    Write('Файл с массивом Y: '); ReadLn(p);
    Assign(f,p); Reset(f);
  until IOResult=0;
  s2:=0; c2:=0; n:=0;
  while SeekEOF(f) do begin
    inc(n); Read(x);
    if odd(n) and (x<0) then begin
      inc(c2); s2:=s2+x;
    end;
  end;
  Close(f);
  Assign(f,'result.txt'); Rewrite(f);
  if c1=0 then WriteLn(f,'В массиве X нет подходящих элементов')
  else WriteLn(f,'CX = ',s1/c1);
  if c2=0 then WriteLn(f,'В массиве Y нет подходящих элементов')
  else WriteLn(f,'CY = ',s2/c2);
  Close(f);
  WriteLn('Резльтат записан в файл "result.txt".');
end.
Skype sanji-dim
Свою благодарность можно выразить на счёт R393628098492
sanji2010 вне форума Ответить с цитированием
Старый 21.04.2014, 23:33   #4
AnryKZKZ
Пользователь
 
Регистрация: 15.04.2014
Сообщений: 62
По умолчанию

Не за что. Обращайтесь.
AnryKZKZ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами (Pascal) Viktorionchik Помощь студентам 4 10.04.2014 17:59
Pascal, работа с файлами Monori Помощь студентам 14 09.05.2012 13:33
Работа с файлами(Pascal Mekkeliard Помощь студентам 2 07.12.2010 15:56
работа с файлами (pascal) pascalforever Помощь студентам 0 22.11.2010 19:04
PASCAL Работа с файлами Natsu Помощь студентам 22 28.02.2010 20:16