Ну смотри, есть такая формула что ли.. У - узел М - маска С - сеть Нам известен узел - это 200.15.100.23 Нам известен адрес сети - это 200.15.96.0 Маска неизвестна. Если в маске стоит 255 - то число остается тоже самое: У - 200.15.100.23 М- 255.255.Х.0 С - 200.15.96.0 Нам нужно найти НАИМЕНЬШЕЕ возможное значение третьего слева байта маски, его обозначила за Х выше. Переведем 100 и 96 в двоичную систему счисления и получим: 100 - 1100100 96 - 1100000 Т.к в маске 8 разрядов, то перед каждым полученным числом в двоичной системе счисления поставим 0. Получим: 01100100 - у xxxxxxxx - м 01100000 - с Сделаем побитовое перемножение с конца. Запомним, что в маске идут сначала все нули, а затем единицы. 01100100 - узел. Его умножаем на маску 11100000 - маска. 01100000 - сеть. Получаем ее после перемножения узла на маску. Перемножили, получили маску - 11100000. Возвращаемся к вопросу задачи: Чему равно наименьшее возможное значение третьего слева байта маски? Тут все просто, осталось перевести маску из двоичной СС в десятичную СС. Расставим степени двойки над маской 76543210 11100000 , что и является верным ответом. Если остались вопросы - задавай в комментариях, отвечу.
{$APPTYPE CONSOLE} Var U:array[1..10000] of integer; h,k:integer; Begin Randomize; Write('h = ');ReadLn(h); Write('Исходный массив:'); For h:= 1 to h do Begin U[h]:=random(2*h+1)-h; Write(' ',U[h]) End; WriteLn; Write('k = ');ReadLn(k); For h:= 1 to h do if U[h] = k then Write(h,' '); ReadLn; End.
2)
{$APPTYPE CONSOLE} Var B:array[1..10000,1..10000] of integer; m,n,j,Max:integer; Begin Randomize; Write('m = ');ReadLn(m); Write('n = ');ReadLn(n); For m:= 1 to m do Begin Max:=1; For j:= 1 to n do Begin B[m,j]:=random(21)-10; Write(B[m,j]:4); if B[m,j] > B[m,Max] then Max:=j; End; WriteLn(', Max = ',B[m,Max],'[',m,',',Max,']'); End; ReadLn End.
У - узел
М - маска
С - сеть
Нам известен узел - это 200.15.100.23
Нам известен адрес сети - это 200.15.96.0
Маска неизвестна. Если в маске стоит 255 - то число остается тоже самое:
У - 200.15.100.23
М- 255.255.Х.0
С - 200.15.96.0
Нам нужно найти НАИМЕНЬШЕЕ возможное значение третьего слева байта маски, его обозначила за Х выше.
Переведем 100 и 96 в двоичную систему счисления и получим:
100 - 1100100
96 - 1100000
Т.к в маске 8 разрядов, то перед каждым полученным числом в двоичной системе счисления поставим 0.
Получим:
01100100 - у
xxxxxxxx - м
01100000 - с
Сделаем побитовое перемножение с конца. Запомним, что в маске идут сначала все нули, а затем единицы.
01100100 - узел. Его умножаем на маску
11100000 - маска.
01100000 - сеть. Получаем ее после перемножения узла на маску.
Перемножили, получили маску - 11100000.
Возвращаемся к вопросу задачи: Чему равно наименьшее возможное значение третьего слева байта маски?
Тут все просто, осталось перевести маску из двоичной СС в десятичную СС.
Расставим степени двойки над маской
76543210
11100000
, что и является верным ответом.
Если остались вопросы - задавай в комментариях, отвечу.
{$APPTYPE CONSOLE}
Var
U:array[1..10000] of integer;
h,k:integer;
Begin
Randomize;
Write('h = ');ReadLn(h);
Write('Исходный массив:');
For h:= 1 to h do
Begin
U[h]:=random(2*h+1)-h;
Write(' ',U[h])
End;
WriteLn;
Write('k = ');ReadLn(k);
For h:= 1 to h do
if U[h] = k then Write(h,' ');
ReadLn;
End.
2)
{$APPTYPE CONSOLE}
Var
B:array[1..10000,1..10000] of integer;
m,n,j,Max:integer;
Begin
Randomize;
Write('m = ');ReadLn(m);
Write('n = ');ReadLn(n);
For m:= 1 to m do
Begin
Max:=1;
For j:= 1 to n do
Begin
B[m,j]:=random(21)-10;
Write(B[m,j]:4);
if B[m,j] > B[m,Max] then Max:=j;
End;
WriteLn(', Max = ',B[m,Max],'[',m,',',Max,']');
End;
ReadLn
End.