Форум: "Начинающим";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];
ВнизВопрос по типизированным файлам. Найти похожие ветки
← →
ЭлЭрДжи (2010-01-03 13:31) [0]Задача: найти в файле типа integer кол-во серий повторяющихся эл-тов.
Т.е. как я понимаю, он должен брать 2 числа, сравнивать, увеличивать кол-во серий если они равны и не переходить к следующему увеличению пока последующие символы также равны этому, т.е. длится одна серия. По видимому, код не работает уже при побайтовом чтении, помогите, плзprocedure TForm1.btn1Click(Sender: TObject);
var
f:file of Integer;
i,k,kolvo:Integer;
begin
AssignFile(f, dlgOpen1.FileName);
Reset(f);
read(f,i); //читаем 1й символ
kolvo:=0;
while not Eof(f) do // до конца файла
begin
read(f,k); // читаем i+1 символ
if i=k then
begin
kolvo:=kolvo+1; //увеличиваем кол-во, если они равны
repeat
Read(f,i); // записываем в i последующие эл-ты до конца серии
until not(i=k);
end
else
i:=k; //если не равны, присвоим i значение i+1 и цикл заново
end;
ShowMessage(IntToStr(kolvo));
end;
← →
Плохиш © (2010-01-03 14:00) [1]
> while not Eof(f) do // до конца файла
> begin
> read(f,k); // читаем i+1 символ
> if i=k then
> begin
> kolvo:=kolvo+1; //увеличиваем кол-во, если они равны
> repeat
> Read(f,i); // записываем в i последующие эл-ты
> до конца серии
> until not(i=k);
> end
> else
> i:=k; //если не равны, присвоим i значение i+1 и цикл
> заново
> end;
>
Начал читать в k следующие элементы, вот и продолжай их читать в k и сравнивать с i. А то в этом коде всего три строки отвечающие логике поставленной задачи.
← →
ЭлЭрДжи (2010-01-03 15:12) [2]я прочитал 1й символ, потом следующий. потом, если они равны, в k читаю все следующие до тех пор пока они не равны будут. Если они не равны опять присваиваю тот новый символ i и остальные читаю в k.
Тут проблема не в алгоритме, а в том, что я даже если вывожу элемент i куда нибудь, он мне выводит 859059252 с k также. Переменная kolvo нулевая. Может я неправильно по символам читаю?
← →
Плохиш © (2010-01-04 00:48) [3]
> в k читаю все следующие до тех пор пока они не равны будут.
>
Врать не надо.
← →
Германн © (2010-01-04 03:06) [4]
> ЭлЭрДжи (03.01.10 13:31)
На первый взгляд алгоритм правильный. Может проблема с файлом? Ты сам его записывал? (Редко где можно найти file of Integer);
← →
Плохиш © (2010-01-04 16:49) [5]
> Германн © (04.01.10 03:06) [4]
Хм, неужели ты как и автор считаешь, что при выполнении его цикла repeat, файл не может неожиданно закончиться?
← →
Германн © (2010-01-04 16:52) [6]
> Плохиш © (04.01.10 16:49) [5]
Тогда была бы ошибка. А ее пока нет :)
← →
Плохиш © (2010-01-04 16:57) [7]
> Германн © (04.01.10 16:52) [6]
Так там вообще "По видимому, код не работает" ;-) Такоя философская ветка...
> ЭлЭрДжи (03.01.10 15:12) [2]
Пример файла приведи.
← →
Плохиш © (2010-01-04 17:02) [8]
> ЭлЭрДжи (03.01.10 15:12) [2]
>
>
Замени это барахло
> repeat
> Read(f,i); // записываем в i последующие эл-ты
> до конца серии
> until not(i=k);
>
на
while not eof(f) and (i=k) do read(f, k);
PS. В своём коде ты теряешь первое изменившееся значение.
← →
Не занят (2010-01-04 17:05) [9]Видимо файл ОЧЕНЬ длинный :(
← →
Германн © (2010-01-04 17:15) [10]
> Плохиш © (04.01.10 17:02) [8]
>
> Замени это барахло
>
> > repeat
> > Read(f,i); // записываем в i последующие эл-ты
> > до конца серии
> > until not(i=k);
> >
>
> на
>
> while not eof(f) and (i=k) do read(f, k);
>
>
> PS. В своём коде ты теряешь первое изменившееся значение.
>
Ничего там не теряется. Нет только проверки на конец файла.
← →
Плохиш © (2010-01-04 17:32) [11]
> Германн © (04.01.10 17:15) [10]
Первое значение файла он читает в i, следующее значение читает в k, если последовательность, то он каждое следующее значение читает в i и сравнивает с k, если считанное значение отличается от k, выходит из цикла и перезаписывает это значение старым k, после чего идёт в начало, считывает в k и далее. Вопрос, куда делось последнее считанное в цикле repeat значение i?
← →
Германн © (2010-01-04 17:40) [12]
> если считанное значение отличается от k, выходит из цикла
> и перезаписывает это значение старым k
Ты не обратил внимание наelse
← →
Плохиш © (2010-01-04 17:54) [13]
> Германн © (04.01.10 17:40) [12]
> Ты не обратил внимание на else
Хм, действительно :-(
[1], [3], [11] снимаются. Будем ждать структуру файла.
← →
12 © (2010-01-04 17:55) [14]http://ru.wikipedia.org/wiki/%D0%9F%D0%BE%D0%B8%D1%81%D0%BA_%D0%BF%D0%BE%D0%B4%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8
← →
Anatoly Podgoretsky © (2010-01-04 18:01) [15]> Плохиш (04.01.2010 17:54:13) [13]
Структура приведена file of Integer;
← →
Плохиш © (2010-01-04 18:08) [16]
> Anatoly Podgoretsky © (04.01.10 18:01) [15]
>
> > Плохиш (04.01.2010 17:54:13) [13]
>
> Структура приведена file of Integer;
Это приведена жалаемая структура, а ждём ту, которая действительно в файле.
> 12 © (04.01.10 17:55) [14]
Какое отношение строки имеют кfile of Integer
?
← →
Anatoly Podgoretsky © (2010-01-04 19:41) [17]> Плохиш (04.01.2010 18:08:16) [16]
При таком объявление, в файле тоже Integer, что туда не пихай, единственная проблема - длина файла должна быть кратна 4
← →
12 © (2010-01-05 08:52) [18]2Плохиш
поиск шаблона во множестве
какая разница какого и в каком
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.03.07;
Скачать: [xml.tar.bz2];
Память: 0.49 MB
Время: 0.005 c