битовых единиц } begin


битовых единиц } begin Write ('Введите число 0..65535 (2^16-1): '); ReadLn (a); num := 0; tmp := a; while tmp > 0 do begin {удаление младшей 1 из переменной tmp} tmp := tmp - tmp and (tmp xor (tmp-1)); num := num + 1 end; WriteLn ( 'Количество единичных бит в числе ' , a); WriteLn (' = ', num); ReadLn end. Ясно, что для всех чисел, меньших 2k-1 (где k - разрядность двоичного представления числа), циклу while программы SUM_BIT2 потребуется менее k шагов алгоритма, тогда как в цикле for программы SUM_BIT делается всегда ровно k шагов. (Впрочем, при более тщательном анализе трудоемкости, можно еще уточнять, сколько потребуется при этом машинных операций. Этот вопрос останется вне нашего рассмотрения. Актуальность же подобного исследования проявляется, например, когда планируется схемная реализация алгоритма, скажем, при создании микропроцессора робототехнического устройства. Тогда существенно не только количество шагов алгоритма, но и число машинных тактов
Индекс
Элементарные функции    Линейные уравнения    Нелинейные уравнения    Случайные числа


Hosted by uCoz