З сортуванням файлів, Детальна інформація

З сортуванням файлів
Тип документу: Реферат
Сторінок: 3
Предмет: Математика
Автор: Олексій
Розмір: 9
Скачувань: 1428
Із описання розв'язання нашої задачі побудови файла з якомога довшими відрізками неважко виділити окремі підзадачі та задати їх розв'язання підпрограмами.

Однією з підзадач є "заповнити масив змістом сховища". Реалізуємо сховище додатковим файлом типу 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