Компресиране масив - живот-прог

Пример. 3.2. Добави програма, която "преса" число масив от 10 елемента, отстраняване от него на елементите по-малък от предварително определена стойност. Освободен в края на елементите на масив напълни с нули.

6 -8 15 9 -1 3 5 -10 12 2

Да предположим, че искате да го премахнете от всички елементи, чиято стойност е по-малко от 5. Резултатът трябва да бъде във вида

6 15 9 5 12 0 0 0 0 0

Първоначалните данни са посочени и редица от числа, резултатът - трансформирания масив.

Фиг. 3.2. Компресия, използвайки допълнителен масив

тип УО = масив [1. п] на цяло число;

writeln ( 'Въведете елементите на масив ");

за I: = 1 до п чета (а [Ь]);

ако [Ь]> = х след това започва

за I: = 1 до п направи запис (а [Ь]: 4);

Възстановяване на "опашката" на масива се среща естествено, тъй като глобални променливи се нулират в Паскал.

Въпреки това, за едрогабаритни масиви двойно разпределение на паметта може да бъде твърде разточително. Ето защо, по-долу осигурява версия на програмата, в която се извършва преобразуването на масив "на място".

Алгоритъмът на тази програма е, както следва:

1. Гледайки през масива за определяне на броя на първия от елементите, за да бъде изтрита.

2. Ако има такъв, се движат всеки следващ елемент в масива на първия "свободен" позиция, възстановяване на остатъка от масива.

Илюстрация на алгоритъма е показано на фиг. 3.3.

Фиг. 3.3. Компресиране масив от "на място"

Следната програма променлива J по същия начин, както в предишния, се използва за определяне на позицията, в която на следващия елемент на масива. След още изместване елемент се увеличава към следващия подходящ елемент масив се поставя в съседна позиция:

тип УО = масив [1. п] на цяло число;