Programming Taskbook 0


Download 1.62 Mb.
Pdf ko'rish
bet62/71
Sana21.06.2023
Hajmi1.62 Mb.
#1644761
TuriУчебное пособие
1   ...   58   59   60   61   62   63   64   65   ...   71
Bog'liq
Abramyan-Pascal2016-1


часть. Таким образом, в этом варианте процедура SetLength вызывается 
только один раз.
Замечание. Можно было бы вообще не вызывать в этой программе 
процедуру SetLength, но тогда в массиве b останутся «лишние» нулевые 
элементы, что не позволит использовать для его вывода метод WriteAll (по-
скольку этот метод выведет все элементы, в том числе и «лишние»). В этой 
ситуации можно было бы вывести в качестве размера число m, а для выво-
да элементов использовать цикл for. Если же полученный таким способом 
массив предполагается использовать в других частях программы, то вызов 
процедуры SetLength существенно упростит его дальнейшее использование, 


Глава 5. Дополнительные средства обработки массивов 
103 
поскольку в противном случае значение свойства Length для этого массива 
не будет соответствовать размеру его «истинного» содержимого. 
Тестирование нового варианта алгоритма для массивов большого раз-
мера дает следующий результат: 
size = 20000 time = 1 
size = 40000 time = 1 
size = 80000 time = 1 
size = 160000 time = 1 
size = 320000 time = 3 
size = 640000 time = 6 
Мы получили гораздо более эффективный алгоритм. 
Приведем еще один вариант решения, использующий изученные нами 
в предыдущей главе запросы. В данном случае достаточно применить за-
прос фильтрации Where (см. п. 4.2), отбирающий нужные элементы. Чтобы 
полученную последовательность можно было сохранить в виде массива 
(как того требуют условия задачи), достаточно применить к ней экспорти-
рующий запрос ToArray, рассмотренный в п. 4.6: 
Task('Array54'); // Вариант 4 
var a := ReadArrInteger; 
var b := a.Where(e -> not Odd(e)).ToArray; 
b.WriteAll; 
Для проверки быстродействия этого варианта в программе замера 
времени между комментариями «начало алгоритма» и «конец алгоритма» 
надо поместить единственный оператор: 
var b := a.Where(e -> not Odd(e)).ToArray; 
Проверка быстродействия показывает, что оно будет почти таким же, 
как и у варианта 3 (использующего «счетчик заполненности» m):

Download 1.62 Mb.

Do'stlaringiz bilan baham:
1   ...   58   59   60   61   62   63   64   65   ...   71




Ma'lumotlar bazasi mualliflik huquqi bilan himoyalangan ©fayllar.org 2024
ma'muriyatiga murojaat qiling