Страница 1 из 1

Файлы.Паскаль

Добавлено: 11 дек 2008, 23:33
Mary Yu
Дан файл целых чисел.Создать новый файл целых чисел,содержащий длины всех серий исходного файла(серией называется набор последовательно расположенных одинаковых элементов,а длиной серии- количество этих элементов).
Вот,например,для исходного файла с элементами 1,5,5,5,4,4,5 содержимое результирующего файла должно быть следующим :1,3,2,1.

Помогите пожалуйста с задачкой=^^=
Заранее домо оригато годзаймасу!!

Re: Файлы.Паскаль

Добавлено: 12 дек 2008, 20:31
chnry
393877884 Стучись. Сделаю за умеренную плату.

Re: Файлы.Паскаль

Добавлено: 13 дек 2008, 14:25
Mary Yu
Подскажите пожалуйста:
это связано с одномерным массивом?
если я введу размерность массива с повторяющимися элементами,то как вывести

содержимое результирующего файла было :1,3,2,1?

Заранее спасибо.

Re: Файлы.Паскаль

Добавлено: 13 дек 2008, 21:03
Naeel Maqsudov
Нет. С массивами это не связано вообще.
Один файл читаем, а другой тут же пишем.

Например, будем считать, что цифры, идущие подряд, составляют число.
Все, что не является цифрами (в т.ч. запятая) - это разделители - их надо просто пропускать. Т.е. в итоге, надо открыть и читать файл посимвольно до конца.

Как только накопилось очередное число, сравниваем его с предыдушим числом.
Если равно, то увеличиваем счетчик длины последовательности, а если не равно, то скидываем значение счетчика в выходной файл и сбрасываем его в единицу.
Вот и вся программа.

Re: Файлы.Паскаль

Добавлено: 14 дек 2008, 16:16
Mary Yu
нам на эту тему посвятили только пример с матрицами..поэтому ещё туго догоняю.
ладно,даже отсутствие железной мужской логики не сломит меня!

Можете написать как пропускать запятые ,как открыть файл и читать посимвольно?
>Как только накопилось очередное число, сравниваем его с предыдушим числом.
Если равно, то увеличиваем счетчик длины последовательности, а если не равно,<
это я поняла..
>то скидываем значение счетчика в выходной файл и сбрасываем его в единицу.>[\QUOTE]--это не поняла.

Re: Файлы.Паскаль

Добавлено: 15 дек 2008, 01:15
Mary Yu
Naeel Maqsudov
Помогите разобраться >0<

Re: Файлы.Паскаль

Добавлено: 15 дек 2008, 01:35
Naeel Maqsudov

Код: Выделить всё

const
  digits:set of char = ['0'..'9'];
var
  fi,fo:text;
  ch:char;
  prev,curr,count:integer;

function getnum(var x:integer):boolean;
var
  _ch:char absolute ch;
begin
  getnum:=false;
  x:=0;
  while not (eof(fi) or (_ch in digits)) do read(fi,_ch);
  if _ch in digits then begin
    while (_ch in digits) and not eof(fi) do begin
      x:=x*10+ord(_ch)-ord('0');
      read(fi,_ch);
    end;
    getnum:=true;
    writeln('in',x);
    _ch:=#0;
  end
end;

begin
  ch:=#0;
  assign(fi,'c:\inp.txt');
  reset(fi);
  assign(fo,'c:\outp.txt');
  rewrite(fo);
  if getnum(prev) then begin {берем первое число из файла}
    count:=1; {оно одно (пока)}
    while getnum(curr) do begin  {пока еще берутся числа из файла, берем}
      if curr=prev then inc(count) else begin  {если оно такое же, то увел. счетчик}
        write(fo,count,',');  {а если нет, то записываем результат и}
        prev:=curr;    {начинаем новый подсчет}
        count:=1;  {снова с единицы}
      end;
    end;
    write(fo,count);  {если числа больше не берутся, записываем последний результат}
  end;
  close(fi);
  close(fo);
end.


Re: Файлы.Паскаль

Добавлено: 15 дек 2008, 17:04
Mary Yu
Naeel Maqsudov Спасибо,Вам большое!
Буду стараться изо всех сил чтобы как можно реже вас беспокоить!