Program nnatovna;
uses crt;
const n=13;
var
a:array [1..n] of integer;
i,min,max,temp:integer;
begin
writeln('*** alphaues is thinking... ***');
writeln('*** OK ***');
writeln();
randomize;
writeln('Элементы массива:');
{создание и вывод массива}
for i:=1 to n do
begin
a[i]:=random(100)-50;
write (a[i]:5);
end;
{ищем номера мин и мах}
min:=1;
max:=1;
for i:=1 to n do
begin
if a[min]>a[i] then min:=i;
if a[max]<a[i] then max:=i;
end;
{меняем местами мин и мах элементы}
temp:=a[min];
a[min]:=a[max];
a[max]:=temp;
{вывод результата}
writeln();
writeln('Результат:');
for i:=1 to n do
write(a[i]:5);
end.
96
Объяснение:
Сначала вспомним, что такое конъюнкция: это аналог логической операции И(в простонародье - операции умножения). В бинарной(двоичной) системе счисления она используется так :
0 и 0 = 0
1 и 0 = 0
0 и 1 = 0
1 и 1 = 1
Ну, а теперь возьмём пример
Адрес: 231.32.255.131
Маска: 255.255.240.0
Отлично. Посмотрим сразу на число 255, оно в двоичной системе выглядит так : 11111111. Это значит, что при побитовой конъюнкции любого числа, получается тоже самое число. Т.е. :
231 = 11100111, 255 = 11111111. (возьму первые 4 бита : 1*1=1,1*1=1,1*1=1,1*0=0)
Т.о. 231(логическое И)255=231.
Теперь адрес сети:
231*255=231
32*255=32
255*240=240
131*0=0
Вот и получили адрес сети : 231.32.240.0
Теперь решение задачи :
Тут нужно в обратную сторону. Есть IP адрес, есть узел.
Узел : 98.162.71.123
Адрес: 98.162.71.96
Надо найти правый байт. У узла он равен 123(в десятичной) -> 1111011(в двоичной). У адреса он равен 96(в десятичной) -> 1100000.
Ну, а теперь обратное действие, смотрим на байты узла, умножаем на x, получаем байты адреса. Вот так :
1111011*=1100000
1*х=1 -> x=1
1*x=1 -> x=1
1*x=0 -> x=0
... И так далее, но дальше считать нет смысла, ибо все остальные пять байтов будут равны нулю, т.к. правая часть вся равна нулю(по свойствам выше)
Получили =1100000, а это тоже самое, что и последний байт адреса сети, и равен он 96.
Получили маску : 255.255.255.96
uses GraphABC;
begin
var s:=ReadlnString('Укажите время MM:CC');
var m:=s.Left(2).ToInteger;
var c:=s.Right(2).ToInteger;
var i:=m;
var j:=c;
Font.Size:=60;
Font.Color:=clBlue;
repeat
while i<60 do begin
while j<60 do begin
if i<10 then s:='0'+i+':' else s:=i+':';
if j<10 then s+='0'+j else s+=j;
FillRect(50,100,350,400);
DrawTextCentered(50,100,350,400,s);
Inc(j);
Sleep(1000)
end;
j:=0;
Writeln;
Inc(i)
end;
i:=0
until False
end.