Плиз!
Помогите доделать до конца...
2/3 задачи уже решил - и застрял...
в общем, вот она, задача:
Ты имеешь в виду это?
ОГРОМНОЕ СТУДЕНЧЕСКОЕ СПАСИБО!
дальше уже все просто...
P.S.: Вот, значит, где собака порылась... ;)
Хотя нет... вру...
возникает еще вот такая проблема:
LLIRIKS
А тем же самым способом, что я описал выше, перенести ненужную запись в самый конец файла, а потом отсечь ее с помощью Truncate, не догадался?
fp := filepos(f); { запоминаешь текущую позицию в файле }
{ переписываешь все последующие на одну назад, при этом
ненужная запись будет перезаписана следующей по порядку,
и т.д., а последняя будет дублировать предпоследнюю}
for curr := fp to filesize(f) - 2 do
begin
seek(f, curr+1); read(f, rec);
seek(f, curr); write(f, rec);
end;
seek(f, filesize(f) - 1);
truncate(f); {отсекаешь последнюю запись}
а почему curr:=filesize(f)-1 ?
здесь ведь указатель должен быть в конце файла, разве не так?
если не сложно, объясните, когда и в каких местах указатели...
LLIRIKS
Ты не понял, я не привел саму запись пустой структуры, я привел пример, как, после того, как размер файла увеличен, перекинуть нужные записи на 1 ближе к концу файла, и тем самым освободить место для вставки новой записи в середину файла.
P.S. А начинаем с
вот, написал:
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,S3:TOVAR;
I,K,L,J,fp:integer;
begin
{################################-ВВОД_ДАННЫХ-##############################}
assign(F1,'tovary.dat');
rewrite(F1);
for I:=1 to N do
begin
with S1 do
begin
clrscr;
writeln;
writeln('-------------------------------------------------------');
writeln('Введите данные ',I,'-го товара:');
writeln('-------------------------------------------------------');
writeln('Введите название:');
readln(NAZV);
writeln('Введите цену:');
readln(ZENA);
writeln('Введите год выпуска:');
readln(GOD_VIP);
writeln('Введите количество:');
readln(KOL);
end;
write(F1,S1);
end;
close(F1);
{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-СОРТИРОВКА-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
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);
{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-ВЫВОД_ДАННЫХ-@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
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('Данные ',I,'-го товара:');
writeln('-------------------------------------------------------');
writeln('Название: ',NAZV);
writeln('Цена: ',ZENA);
writeln('Год выпуска: ',GOD_VIP);
writeln('Количество: ',KOL);
Inc(I);
end;
end;
close(F1);
{###############- ДОБАВЛЕНИЕ_ДАННЫХ_БЕЗ_НАРУШЕНИЯ_УПОРЯДОЧЕН
НОСТИ-###########}
assign(F1,'tovary.dat');
reset(F1);
for I:=1 to M do
begin
with S1 do
begin
clrscr;
writeln;
writeln('-------------------------------------------------------');
writeln('Введите данные ',I,'-го товара:');
writeln('-------------------------------------------------------');
writeln('Введите название:');
readln(NAZV);
writeln('Введите цену:');
readln(ZENA);
writeln('Введите год выпуска:');
readln(GOD_VIP);
writeln('Введите количество:');
readln(KOL);
end;
L:=filesize(F1);
seek(F1,0);
for J:=0 to L do
begin
read(F1,S2);
if (S2.NAZV=S1.NAZV) then
begin
for K:=J to filesize(F1)-2 do
begin
seek(F1,K+1);read(F1,S3);
seek(F1,K);write(F1,S3);
end;
seek(F1,filesize(F1)-1);
truncate(F1);
end;
end;
L:=filesize(F1);
seek(F1,0);
for J:=0 to L do
begin
read(F1,S2);
if (S1.ZENA<S2.ZENA) then
begin
for K:=filesize(F1)-1 to J do
begin
seek(F1,K);read(F1,S3);
seek(F1,K+1);write(F1,S3);
end;
seek(F1,J);
write(F1,S1);
J:=L+1;
end;
if (J=L) and (S1.ZENA>S2.ZENA) then
begin
seek(F1,J+1);
write(F1,S1);
end;
end;
end;
close(F1);
{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-ВЫВОД_ДАННЫХ-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
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('Данные ',I,'-го товара:');
writeln('-------------------------------------------------------');
writeln('Название: ',NAZV);
writeln('Цена: ',ZENA);
writeln('Год выпуска: ',GOD_VIP);
writeln('Количество: ',KOL);
Inc(I);
end;
end;
close(F1);
end.
L:=filesize(F1);
seek(F1,0);
for J:=0 to L do
begin
read(F1,S2); {ВОТ ЗДЕСЬ ВЫЛЕТАЕТ... ЧЕГО ЕЙ НЕ НРАВИТСЯ?!....}
if (S2.NAZV=S1.NAZV) then
begin
for K:=J to filesize(F1)-2 do
begin
seek(F1,K+1);read(F1,S3);
seek(F1,K);write(F1,S3);
end;
seek(F1,filesize(F1)-1);
truncate(F1);
end;
end;
LLIRIKS
Ты просто пытаешься читать за концом файла:
for J:=0 to L do
begin
read(F1,S2);
...
for J:=0 to L-1 do {или for J := 1 to L do}
begin
read(F1,S2);
...
работает, но опять не до конца...
если добавлять записи с названием, которое уже есть - вылетает...
ПОМОГИТЕ, плиз!..
осталось совсем немного - исправить ошибку...
LLIRIKS
Секунду, ты в 2-х местах поменял то, что я сказал? У тебя в программе есть 2 подобных цикла...
for J:=0 to L do
begin...
с нулевой записью я разобрался... фуф...
но вот 2-е ЕСЛИ ну никак не могу найти...
вот что у меня на данный момент:
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,S3:TOVAR;
I,K,L,J,fp:integer;
begin
{################################-ВВОД_ДАННЫХ-##############################}
assign(F1,'tovary.dat');
rewrite(F1);
for I:=1 to N do
begin
with S1 do
begin
clrscr;
writeln;
writeln('-------------------------------------------------------');
writeln('Введите данные ',I,'-го товара:');
writeln('-------------------------------------------------------');
writeln('Введите название:');
readln(NAZV);
writeln('Введите цену:');
readln(ZENA);
writeln('Введите год выпуска:');
readln(GOD_VIP);
writeln('Введите количество:');
readln(KOL);
end;
write(F1,S1);
end;
close(F1);
{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-СОРТИРОВКА-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
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);
{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-ВЫВОД_ДАННЫХ_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('Данные ',I,'-го товара:');
writeln('-------------------------------------------------------');
writeln('Название: ',NAZV);
writeln('Цена: ',ZENA);
writeln('Год выпуска: ',GOD_VIP);
writeln('Количество: ',KOL);
Inc(I);
end;
end;
close(F1);
{###############- ДОБАВЛЕНИЕ_ДАННЫХ_БЕЗ_НАРУШЕНИЯ_УПОРЯДОЧЕН
НОСТИ-###########}
assign(F1,'tovary.dat');
reset(F1);
for I:=1 to M do
begin
with S1 do
begin
clrscr;
writeln;
writeln('-------------------------------------------------------');
writeln('Введите данные ',I,'-го товара:');
writeln('-------------------------------------------------------');
writeln('Введите название:');
readln(NAZV);
writeln('Введите цену:');
readln(ZENA);
writeln('Введите год выпуска:');
readln(GOD_VIP);
writeln('Введите количество:');
readln(KOL);
end;
L:=filesize(F1);
seek(F1,0);
for J:=0 to L-1 do
begin
read(F1,S2);
if (S2.NAZV=S1.NAZV) then
begin
for K:=J to L-2 do
begin
seek(F1,K+1);read(F1,S3);
seek(F1,K);write(F1,S3);
end;
seek(F1,L-1);
truncate(F1);
end;
end;
L:=filesize(F1);
seek(F1,0);
for J:=0 to L-1 do
begin
read(F1,S2);
if (S1.ZENA<S2.ZENA) then
begin
for K:=L-1 to J do
begin
seek(F1,K);read(F1,S3);
seek(F1,K+1);write(F1,S3);
end;
seek(F1,J);
write(F1,S1);
J:=L+1;
end;
if (J=L-1) and (S1.ZENA>S2.ZENA) then
begin
seek(F1,J+1);
write(F1,S1);
end;
end;
end;
close(F1);
{@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@-ВЫВОД_ДАННЫХ-@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
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('Данные ',I,'-го товара:');
writeln('-------------------------------------------------------');
writeln('Название: ',NAZV);
writeln('Цена: ',ZENA);
writeln('Год выпуска: ',GOD_VIP);
writeln('Количество: ',KOL);
Inc(I);
end;
end;
close(F1);
end.
Выручайте, плз!
завтра уже сдавать...
где у меня ошибки (кажется, их несколько)
Acheter Viagra Femme