З сортуванням файлів, Детальна інформація
З сортуванням файлів
Із описання розв'язання нашої задачі побудови файла з якомога довшими відрізками неважко виділити окремі підзадачі та задати їх розв'язання підпрограмами.
Однією з підзадач є "заповнити масив змістом сховища". Реалізуємо сховище додатковим файлом типу T. Нехай копіювання значень із нього в масив задає процедура із заголовком
procedure copyfa(var f : FoT; var A : ArrT; var m : Longint);
Третій параметр служить для повернення кількості скопійованих значень. Оскільки сховище має таке саме подання, що і початковий файл, цією процедурою можна скористатися і для початкового заповнення масиву з файла.
Наступна підзадача – "вивести елементи масиву A у порядку неспадання в результатний файл без їх заміщення новими". Нехай це виведення задає процедура outtree із заголовком
procedure outtree(var f : FoT; var A : ArrT; m : Longint);
Для подальшого уточнення алгоритму скористаємося підпрограмами підрозділу 17.4.2, дещо змінивши їх із урахуванням подання даних.
Нехай процедура з заголовком indbld(m:Longint) задає початкову перестановку значень масиву P таким чином, що виконується умова (18.2). Нехай процедура indreorg(i,k:Longint) задає відновлення властивості (18.2) у частині масиву A[P[i]], … , A[P[k]].
З використанням усіх указаних підпрограм уточнимо алгоритм. Нехай змінна n зберігає кількість значень, скопійованих у масив A, ch – кількість значень, записаних у сховище, подане файлом h. Нехай last – останнє значення, виведене в результатний файл. Не записуючи всіх означень, наведемо основну частину програми:
copyfa(f, A, n); indbld(n); ch:=0;
while (n>0) and not eof(f) do
begin
last:=A[P[1]]; write(g, last);
read(f, A[1]);
if (A[1] < last) and (ch < MX) then
begin write(h, A[1]); ch:=ch+1 end
else
if A[1] < last then {ch=MX}
begin
outtree(g, A, n);
copyfa(h, A, n); ch:=0;
\xF0B3 last}indreorg(1, n)
end;
if n > 0 then outtree(g, A, n);
if ch > 0 then
begin
copyfa(h, A, n); ch:=0;
indbld(n); outtree(g, A, n)
end
Із зазначених вище підпрограм уточнимо лише процедуру outtree, решта залишаються вправами (див.підр.17.4.2).
Однією з підзадач є "заповнити масив змістом сховища". Реалізуємо сховище додатковим файлом типу T. Нехай копіювання значень із нього в масив задає процедура із заголовком
procedure copyfa(var f : FoT; var A : ArrT; var m : Longint);
Третій параметр служить для повернення кількості скопійованих значень. Оскільки сховище має таке саме подання, що і початковий файл, цією процедурою можна скористатися і для початкового заповнення масиву з файла.
Наступна підзадача – "вивести елементи масиву A у порядку неспадання в результатний файл без їх заміщення новими". Нехай це виведення задає процедура outtree із заголовком
procedure outtree(var f : FoT; var A : ArrT; m : Longint);
Для подальшого уточнення алгоритму скористаємося підпрограмами підрозділу 17.4.2, дещо змінивши їх із урахуванням подання даних.
Нехай процедура з заголовком indbld(m:Longint) задає початкову перестановку значень масиву P таким чином, що виконується умова (18.2). Нехай процедура indreorg(i,k:Longint) задає відновлення властивості (18.2) у частині масиву A[P[i]], … , A[P[k]].
З використанням усіх указаних підпрограм уточнимо алгоритм. Нехай змінна n зберігає кількість значень, скопійованих у масив A, ch – кількість значень, записаних у сховище, подане файлом h. Нехай last – останнє значення, виведене в результатний файл. Не записуючи всіх означень, наведемо основну частину програми:
copyfa(f, A, n); indbld(n); ch:=0;
while (n>0) and not eof(f) do
begin
last:=A[P[1]]; write(g, last);
read(f, A[1]);
if (A[1] < last) and (ch < MX) then
begin write(h, A[1]); ch:=ch+1 end
else
if A[1] < last then {ch=MX}
begin
outtree(g, A, n);
copyfa(h, A, n); ch:=0;
\xF0B3 last}indreorg(1, n)
end;
if n > 0 then outtree(g, A, n);
if ch > 0 then
begin
copyfa(h, A, n); ch:=0;
indbld(n); outtree(g, A, n)
end
Із зазначених вище підпрограм уточнимо лише процедуру outtree, решта залишаються вправами (див.підр.17.4.2).
The online video editor trusted by teams to make professional video in
minutes
© Referats, Inc · All rights reserved 2021