Страница 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 Спасибо,Вам большое!
Буду стараться изо всех сил чтобы как можно реже вас беспокоить!