Практика программирования (Бейсик, Си, Паскаль)


Задачи,советы и ответы - часть 22


j=j >> 1; }

return Result;

}

Программа 2_12.pas

program sumbits;

{ Суммирование двоичных цифр введенного числа }

var

M:longint;

function sum bits(N:longint):integer;

const

Result:integer=0;

j:longint=$80000000; var

k:integer; begin

for k:=31 downto 0 do

begin

if (N and j)<>0 then inc(Result);

{ Учет k-того разряда }

j:=j shr 1;

end;

sum_bits:=Result;

end;

begin

write('Введите целое число: ');

readln(M);

writeln('Сумма его цифр = ',sum_bits(M));

readln; end.

Задание 2.13. Позиция старшей единицы

Составить функцию lef t_bit (n), аргументом которой является длинное целое положительное число. Возвращаемое значение должно совпадать с номером старшей единицы в двоичном представлении п. Нумерация двоичных разрядов ведется справа налево от 0 до 31.

Совет 1 (общий)

Наиболее прямой способ заключается в проверке битов заданного числа слева (от самого старшего разряда) направо. Как только в цикле проверки появляется первая единица, работа подпрограммы завершается. Так как аргумент функции неотрицателен, проверку можно начинать с 30-го разряда. Для сдвига битовой шкалы в Си следует использовать операцию сдвига вправо ( » ), в Паскале — операцию shr, а в QBasic придется прибегнуть к делению на 2.

Программа 2_13.oas

RЕМ Определение позиции старшей единицы в двоичном числе

DECLARE FUNCTION LeftBit!(N&)

INPUT "Введите целое число: "/Ms

IF M&=0 THEN PRINT "D этом числе единиц нет" : END

PRINT "Старший разряд находится в позиции номер ";

LeftBit(M£)

END

FUNCTION LertBil(N&)

REM Определение позиции старшей единицы в числе N

КЕМ Если N=0, то LeftBit=-l

LeftBit=-l

j&=&H40000000

FOR k=30 TO 0 STEP -1

IF (j& AND N&) THEN ' Анализ k-го разряда LeftBit-k EXIT FUNCTION

END IF

j&=j&/2 NEXT k

END FUNCTION

Программа 2_13.с

/* Определение позиции старшей единицы в двоичном числе */

#include <stdlib.h>

int left_bit(long N) ;




- Начало -  - Назад -  - Вперед -