Компресиране масив - живот-прог
Пример. 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. п] на цяло число;