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

> Прочтите прежде чем задавать вопрос!

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

> СЛОЖНАЯ ЗАДАЧА:Типизированные файлы-НУЖНА ПОМОЩЬ!, добавление записей, их сортировка и т.д.
LLIRIKS
сообщение 19.12.2004 1:34
Сообщение #1


Новичок
*

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

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


Плиз!
Помогите доделать до конца...
2/3 задачи уже решил - и застрял...
в общем, вот она, задача:
Цитата
Подготовить список из N наименований товаров. Конкретное значение N указано в варианте. Информация о каждом товаре содержит:
1. Название товара.
2. Цену.
3. Год выпуска.
4. Количество.
Список должен быть упорядочен по одному из параметров, указанных в конкретном варианте. Сведения по каждому товару необходимо представить в виде записи.
Разработать программу, которая заносит во внешний файл записи упорядоченного списка, и программу, которая добавляет в сформированный внешний файл данные об М товарах, при этом, не нарушая упорядоченности исходного файла. Если среди добавляемых товаров встречается товар, сведения о котором в файле уже есть, то необходимо их обновить, т. е. старую запись исключить.
Варианты задания
7. Товары упорядочены по неубыванию цены, N=13, М=4.

Не могу воплотить в жизнь последний этап задачи, т.е. добавлять в файл записи, не нарушая при этом упорядоченности файла и обновляя информацию об уже существующих товарах... Вот что у меня пока получилось:
Исходный код
uses crt;
type TOVAR=record
NAZV:string;
ZENA:integer;
GOD_VIP:integer;
KOL:integer;
end;
const N=13;
M=4;
var F1,F2:file of TOVAR;
S1,S2:TOVAR;
I,K,J:integer;
begin
{################################-VVOD_DANNIH-##############################}
assign(F1,'tovary.dat');
rewrite(F1);
for I:=1 to N do
begin
with S1 do
begin
clrscr;
writeln;
writeln('-------------------------------------------------------');
writeln('Vvedite dannie ',I,'-go tovara:');
writeln('-------------------------------------------------------');
writeln('Vvedite nazvanie:');
readln(NAZV);
writeln('Vvedite zenu:');
readln(ZENA);
writeln('Vvedite god vipuska:');
readln(GOD_VIP);
writeln('Vvedite kolichestvo:');
readln(KOL);
end;
write(F1,S1);
end;
close(F1);
{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-SORTIROVKA-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
assign(F1,'tovary.dat');
reset(F1);
K:=filesize(F1);
seek(F1,0);
for I:=K-1 downto 1 do
for J:=1 to K-2 do
begin
seek(F1,J);
read(F1,S1);
seek(F1,J+1);
read(F1,S2);
if S1.ZENA>S2.ZENA then
begin
seek(F1,J);
write(F1,S2);
seek(F1,J+1);
write(F1,S1);
end;
end;
close(F1);
{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-VIVOD_DANNIH_1-@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
assign(F1,'tovary.dat');
reset(F1);
clrscr;
I:=1;
while (not EOF(F1)) do
begin
read(F1,S1);
with S1 do
begin
writeln;
writeln('-------------------------------------------------------');
writeln('Dannie ',I,'-go tovara:');
writeln('-------------------------------------------------------');
writeln('Nazvanie: ',NAZV);
writeln('Zena: ',ZENA);
writeln('God vipuska: ',GOD_VIP);
writeln('Kolichestvo: ',KOL);
Inc(I);
end;
end;
close(F1);
{###########-DOBAVLENIE_DANNIH_BEZ_NARUSHENIYA_UPORYADOCHENNOSTI-###########}
{ВОТ ЗДЕСЬ-ТО Я И НЕ ЗНАЮ, ЧТО ДЕЛАТЬ...}
end.

сложность состоит в том, что в файл нужно добавлять новые записи уже в нужное место...
МОЖЕТ, МОЖНО КАК-НИБУДЬ РАЗДВИНУТЬ ЗАПИСИ В ФАЙЛЕ И МЕЖДУ НИМИ ВСТАВИТЬ НОВУЮ ЗАПИСЬ?


--------------------
Я не люблю, когда мне лезут в душу,
Тем более, когда в нее плюют...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
LLIRIKS
сообщение 19.12.2004 13:54
Сообщение #2


Новичок
*

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

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


Цитата(volvo @ 19.12.04 11:08)
LLIRIKS
А тем же самым способом, что я описал выше, перенести ненужную запись в самый конец файла, а потом отсечь ее с помощью Truncate, не догадался?

А можно поподробней? unsure.gif


--------------------
Я не люблю, когда мне лезут в душу,
Тем более, когда в нее плюют...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме
LLIRIKS   СЛОЖНАЯ ЗАДАЧА:Типизированные файлы-НУЖНА ПОМОЩЬ!   19.12.2004 1:34
volvo   Ты имеешь в виду это? ... fp := filepos(f...   19.12.2004 2:04
LLIRIKS   ОГРОМНОЕ СТУДЕНЧЕСКОЕ СПАСИБО! дальше уже все ...   19.12.2004 2:30
LLIRIKS   Хотя нет... вру... возникает еще вот такая проблем...   19.12.2004 3:46
volvo   LLIRIKS А тем же самым способом, что я описал выш...   19.12.2004 11:08
LLIRIKS   А можно поподробней? :unsure:   19.12.2004 13:54
volvo   fp := filepos(f); { запоминаешь текущую позицию в...   19.12.2004 14:29
LLIRIKS   а почему curr:=filesize(f)-1 ? здесь ведь указател...   19.12.2004 15:10
volvo   LLIRIKS Ты не понял, я не привел саму запись пуст...   19.12.2004 15:29
LLIRIKS   вот, написал: uses crt; type TOVAR=record ...   19.12.2004 16:50
volvo   LLIRIKS Ты просто пытаешься читать за концом файл...   19.12.2004 17:09
LLIRIKS   работает, но опять не до конца... если добавлять з...   19.12.2004 17:29
LLIRIKS   ПОМОГИТЕ, плиз!.. осталось совсем немного - ис...   19.12.2004 19:51
volvo   LLIRIKS Секунду, ты в 2-х местах поменял то, что ...   19.12.2004 20:00
LLIRIKS   да... если добавлять записи с неповторяющимися наз...   19.12.2004 20:04
LLIRIKS   с нулевой записью я разобрался... фуф... но вот 2-...   19.12.2004 20:23
LLIRIKS   Выручайте, плз! завтра уже сдавать... где у ме...   19.12.2004 21:54


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

 



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