procedure TfrmMain.FindFilesOnDisk(Dir : string);
var SR : TSearchRec;
Err : integer;
i, j : integer;
st : string;
begin
if (Dir[Length(Dir)] <> '\') then Dir := Dir + '\';
Err := FindFirst(Dir + '*.*', faAnyFile, SR);
while Err = 0 do
begin
j := 0;
st := AnsiUpperCase(SR.Name);
if lbDirs.Items.Count > 0 then //Если в списке есть каталоги
//Проверить, нет ли среди них
for i := 0 to lbDirs.Items.Count - 1 do
if lbDirs.Items[i] = st then //найденного
begin
j := 1;
break;
end; //if lbDirs.Items[i] = st then
if j = 0 then
begin
if (SR.Name <> '.') and
(SR.Name <> '..') and
((SR.Attr and faDirectory) <> 0) then
begin
inc(NumDir);
DirList.Add(Dir + st);
frmMain.sbMain.Panels[1].Text := IntToStr(NumDir);
pbFind.Position := NumDir;
Application.ProcessMessages;
FindFilesOnDisk(Dir + SR.Name);
end; //if (SR.Name <> '.') and
end; //if j = 0 then
Err := FindNext(SR);
end;
end;
Объяснение:
1) 8 нулей
2) 5 нулей
3) 1077
Объяснение:
1) Переводим из десятичной системы в двоичную:
4816₁₀ = 1001011010000₂ -в этом числе ровно 8 нулей
2) Переводим из десятичной системы в двоичную:
2548₁₀ = 100111110100₂ -в этом числе ровно 5 нулей
3) Каждая восьмеричная цифра даёт три двоичных. Нам нужно 4 восьмеричных цифры, значит получим 4 группы по три двоичных цифры. Нам нужно наименьшее число, значит в старшем восьмеричном разряде берём наименьшую значащую цифру (1). Получим в двоичном виде в начале числа группу из трёх цифр (001). Из них два незначащих нуля, и только единица будет записана в числе.
В остальных двоичных разрядах будут единицы (кроме трёх, в которых должны быть нули). Эти нули мы ставим в три разряда, идущие за старшим (чтобы как можно больше отнять от числа, ведь нам нужно наименьшее число).
Мы получили наши 4 группы по три двоичных цифры:
001 000 111 111₂
Убираем незначащие нули, и получаем стандартный вид числа:
1000111111₂
Переводим в восьмеричную систему счисления (группами по 3 цифры):
001₂ = 1₈
000₂ = 0₈
111₂ = 7₈
111₂ = 7₈
Составляем из этих цифр восьмеричное число:
1000111111₂ = 1077₈
Это и есть наименьшее четырёхзначное восьмеричное число (и в его двоичной записи ровно три нуля).