Задания
Версия для печати и копирования в MS Word
Тип 13 № 75277
i

В тер­ми­но­ло­гии сетей TCP⁠/⁠IP мас­кой сети на­зы­ва­ет­ся дво­ич­ное число, опре­де­ля­ю­щее, какая часть IP-ад­ре­са узла сети от­но­сит­ся к ад­ре­су сети, а какая  — к ад­ре­су са­мо­го узла в этой сети. При этом в маске сна­ча­ла (в стар­ших раз­ря­дах) стоят еди­ни­цы, а затем с не­ко­то­ро­го места – нули.

Адрес сети по­лу­ча­ет­ся в ре­зуль­та­те при­ме­не­ния по­раз­ряд­ной конъ­юнк­ции к за­дан­но­му IP⁠-⁠ад­ре­су узла и маске.

На­при­мер, если IP⁠-⁠адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.

Из­вест­но, что в дво­ич­ной за­пи­си ад­ре­са сети, к ко­то­рой при­над­ле­жит узел 169.25.132.59, со­дер­жит­ся столь­ко же еди­ниц, сколь­ко нулей в дво­ич­ной за­пи­си маски этой сети.

Сколь­ко ад­ре­сов, в дво­ич­ной за­пи­си ко­то­рых ровно 11 еди­ниц, со­дер­жит­ся в этой сети?

Ре­ше­ние.

Это за­да­ние ещё не ре­ше­но, при­во­дим ре­ше­ние про­то­ти­па.


В тер­ми­но­ло­гии сетей TCP⁠/⁠IP мас­кой сети на­зы­ва­ет­ся дво­ич­ное число, опре­де­ля­ю­щее, какая часть IP⁠-⁠ад­ре­са узла сети от­но­сит­ся к ад­ре­су сети, а какая  — к ад­ре­су са­мо­го узла в этой сети. При этом в маске сна­ча­ла (в стар­ших раз­ря­дах) стоят еди­ни­цы, а затем с не­ко­то­ро­го места  — нули.

Адрес сети по­лу­ча­ет­ся в ре­зуль­та­те при­ме­не­ния по­раз­ряд­ной конъ­юнк­ции к за­дан­но­му IP⁠-⁠ад­ре­су узла и маске.

На­при­мер, если IP⁠-⁠адрес узла равен 231.32.255.131, а маска равна 255.255.240.0, то адрес сети равен 231.32.240.0.

Из­вест­но, что в дво­ич­ной за­пи­си ад­ре­са сети, к ко­то­рой при­над­ле­жит узел 68.30.20.77, со­дер­жит­ся столь­ко же еди­ниц, сколь­ко нулей в дво­ич­ной за­пи­си маски этой сети.

Сколь­ко ад­ре­сов, в дво­ич­ной за­пи­си ко­то­рых ровно 10 еди­ниц, со­дер­жит­ся в этой сети?

При­ведём ре­ше­ние на языке Python.

from ipaddress import *

 

for mask in range(32, -1, -1):

net = ip_network(f'68.30.20.77/{mask}',0)

if bin(int(net[0])).count('1') == 32 - mask:

count = 0

for ip in net:

if bin(int(ip)).count('1') == 10:

count += 1

print(count)

 

 

Ответ: 28.

 

При­ведём ана­ли­ти­че­ское ре­ше­ние Юрия Кра­силь­ни­ко­ва.

Адрес сети в дво­ич­ном виде со­дер­жит 12 еди­ниц и вы­гля­дит так:

01000100000111100001010001001101

Ко­ли­че­ство нулей в маске, ко­то­рое будет равно ко­ли­че­ству еди­ниц в ад­ре­се сети - это 8:

01000100000111100001010001001101

11111111111111111111111100000000

Тре­бу­е­мый в усло­вии IP-адрес дол­жен со­дер­жать 10 еди­ниц: 8 в ад­ре­се сети и 2 в но­ме­ре узла.

Число спо­со­бов рас­ста­вить две еди­ни­цы на 8 мест - это число со­че­та­ний из 8 по 2.

8*7/(1*2)=28

 

При­ведём ре­ше­ние Юрия Кра­силь­ни­ко­ва на языке Python.

import ipaddress,math

s = bin(int(ipaddress.ip_address('68.30.20.77')))[2:].zfill(32) # Дво­ич­ное пред­став­ле­ние ад­ре­са сети

for l in range(32):

if s[:32-l].count('1') == l: break # l - ко­ли­че­ство нулей в маске

print(math.comb(l,10-l)) # число со­че­та­ний


Аналоги к заданию № 75250: 75277 Все

Источник: Стат­Град: Тре­ни­ро­воч­ная ра­бо­та 28.01.2025 ИН2410302