IPB
ЛогинПароль:

> Правила раздела!

1. Заголовок или название темы должно быть информативным !
2. Все тексты фрагментов программ должны помещаться в теги [code] ... [/code] или [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ" и используйте ПОИСК !
4. НЕ используйте форум для личного общения!
5. Самое главное - это раздел теоретический, т.е. никаких задач и программ (за исключением небольших фрагментов) - для этого есть отдельный раздел!

2 страниц V < 1 2  
 Ответить  Открыть новую тему 
> Работа с файлами, Как записать данные
Free
сообщение 5.06.2005 17:26
Сообщение #21


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Цитата
procedure FFind(var f:filetype);
...
begin
  for i:=0 to filesize(f - 1) do { не до последней, а до предпоследней записи }
...

А можно поинтересоваться, почему до предпоследней?


procedure FSortByPrice(var f:filetype);
var
i, j:integer;
rec1, rec2:DC;
begin
for i:=0 to filesize(f)-1 do
for j:=i+1 to filesize(f) do begin
seek(f,i); read(f,rec1);
seek(f,j); read(f,rec2); {тут выдаёт ошибку Error 100: Disk read error}
if (rec1.cena<rec2.cena) then begin
seek(f,j); write(f,rec1);
seek(f,i); write(f,rec2); { меняем местами }
{ в противном случае - ничего делать не надо: записи остаются на своих местах }
end;
end; { for }
...


Остальное всё подправил, вроде работает smile.gif volvo, спасибо!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 5.06.2005 18:11
Сообщение #22


Гость






Цитата(Free @ 5.06.05 17:26)
А можно поинтересоваться, почему до предпоследней?

Потому что
seek(f, filesize(f));
означает "переместить указатель файла ЗА последнюю запись" - это обычно делается для добавления в конец файла. Не забывай, что у тебя нумерация записей в файле начинается с 0, и чтобы обратиться к записи №3 (№3 для тебя, начиная с 1-цы), тебе нужно сделать
seek(f, 2);
Если же ты сделаешь seek(f, 3); то будешь добавлять 4-ю запись (это допустимо), или читать 4-ю (а вот это и есть Error 100)...

2.
procedure FSortByPrice(var f:filetype);
...
for i:=0 to pred(filesize(f)-1) do { причина - выше }
for j:=i+1 to pred(filesize(f)) do begin
...
end; { for }
...
 К началу страницы 
+ Ответить 
Free
сообщение 7.06.2005 0:11
Сообщение #23


Новичок
*

Группа: Пользователи
Сообщений: 16
Пол: Мужской

Репутация: -  0  +


Всё вроде разобрался, программа раюотает! smile.gif volvo, огромное спасибо за помощь!!! Респект!!! :flowers:
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

2 страниц V < 1 2
 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 16.08.2025 15:29
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"