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

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

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

 
 Ответить  Открыть новую тему 
> паскаль, работа с файлами
сообщение
Сообщение #1


Гость






Помогите доделать задачку!
Не могу обойтись без дополнительно массива, он в тексте программы красным! Надо сражу записывать в файл, обходя этот массив, кто сможет помогите с данной проблемкой!



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

Код
Uses Crt;
Const n = 7; m = 3;
Type
t = record {tovar}
name: String; {nazvanie}
c, {cena}
y, {god vipuska}
k: Word {kol-vo}
end;
Var
  p: Array [1..n+m] of t; { <--- *** Здесь был красный цвет *** }
e: t;
i,j,k,w: Byte;
f: File of t;
Procedure Vvod(var m: t);
begin
with m do
begin
Write('Najvanie: '); ReadLn(name);
Write('Cena: '); ReadLn©;
Write('Gop vipuska: '); ReadLn(y);
Write('Koli4estvo: '); ReadLn(k)
end;
WriteLn
end;Procedure Vivod;
begin
WriteLn('Nazvanie:':15, 'Cena:':6, 'God:':6, 'Kol-vo:':8);
for i:=1 to w do
with p[i] do
begin
Write(name:15);
Write(c:6);
Write(y:6);
WriteLn(k:8)
end;
end;Procedure Save;
begin
ReWrite(f);
for i:=1 to n do
Write(f,p[i]);
Close(f)
end;Begin
w:=n;
ClrScr;
WriteLn('Vvod informacii o ', n, ' tovarah.');
WriteLn;
for i:=1 to n do
begin
WriteLn('Vvod informacii o ', i, '-m tovare.');
Vvod(p[i]) end;
WriteLn('Najmite ENTER, chtobi otsortirovat'' tovari po nevozrastaniyu ','goda vipuska i zanesti ih spisok v fail "fail.dat".');
ReadLn;
for i:=n-1 downto 1 do
for j:=1 to I do if p[j].y < p[j+1].y then
begin
e:=p[j];
p[j]:=p[j+1];
p[j+1]:=e
end;
Assign(f,'fail.dat');
Save;
WriteLn('V fail byl zapisan sleduyuschiy spisok:');
Vivod; WriteLn;
WriteLn('Nujno dobavit'' dannie po ', m, '-m tovaram. Najmite ENTER.');
ReadLn;
for i:=1 to m do begin
WriteLn('Vvod informacii o ', i, '-m tovare.');
Vvod(e);
j:=1;
while j <= w do
begin
if p[j].name = e.name then
begin
p[j]:=e;
break
end;
Inc(j)
end;
if j = w+1 then
begin
j:=1;
while (j <= w)and(p[j].y > e.y) do
Inc(j);
Inc(w);
for k:=w downto j+1 do
p[k]:=p[k-1];
p[j]:=e
end
end;
Save;
WriteLn('Dannie byli uspeshno zaneseny v spisok, ne narushaya uporyado', 'chennosti, i sohraneny v fail "fail.dat".');
WriteLn; Vivod; ReadLn
End.


Сообщение отредактировано: volvo -
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Не могу обойтись без дополнительно массива, он в тексте программы красным! Надо сражу записывать в файл, обходя этот массив, кто сможет помогите с данной проблемкой!
Обойтись-то, конечно, можно, только вот к чему это? Смысл в чем? Запутаться? Без проблем. Представь себе, что если сортировка массива выглядит так:
for i:=n-1 downto 1 do
for j:=1 to I do if p[j].y < p[j+1].y then begin
e:=p[j]; p[j]:=p[j+1]; p[j+1]:=e
end;
, то сортировка напрямую в файле будет выглядеть вот так:
for i:=n-1 downto 1 do
for j:=1 to I do begin
seek(f, j - 1); read(f, rec_j);
seek(f, j); read(f, rec_j_1);

if rec_j.y < rec_j_1.y then begin
seek(f, j - 1); write(f, rec_j_1);
seek(f, j ); write(f, rec_j );
end;
end;
Разницу чувствуешь? Это только начало. Когда придется вставлять записи в определенное место файла, будет еще веселее... Ты все еще хочешь изменить программу? wink.gif
 К началу страницы 
+ Ответить 

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

 




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