Цитата:
Сообщение от hedgehod
Если маска подсети 255.255.255.248 и IP-адрес компьютера в сети 156.128.0.227, то номер компьютера в сети равен ?
|
Получите и распишитесь. Работает с любыми подсетями и IP:
Код:
Var
SM,IP,SM_Bin,IP_Bin,Nc_Bin:String;
Nc:LongInt;
NZ,LL:Byte;
Function Dec2Bin(D:LongInt):String;
var
S1,S2,C:String;
i,L:byte;
Q:LongInt;
begin
Q:=D;
S1:='';
repeat
STR((Q mod 2), C);
S1:=S1+C;
Q:=Q div 2;
until Q=0;
L:=Length(S1);
S2:='';
for i:=1 to L do
S2:=S2+S1[L-i+1];
Dec2Bin:=S2;
end;
Function Bin2Dec(S:String):LongInt;
var
k,L:byte;
P,Q,R:LongInt;
Code:Integer;
begin
L:=Length(S);
Val(S[L],P,Code);
Q:=1;
for k:=L-1 downto 1 do
begin
Q:=Q*2;
Val(S[k],R,Code);
P:=P+R*Q;
end;
Bin2Dec:=P;
end;
Function Bin_SM_IP(S:String):String;
var
S1,P,SR:String;
R:LongInt;
Code:Integer;
C:Char;
L,k,m,LR:Byte;
begin
L:=Length(S);
k:=0;
S1:='';
repeat
P:='';
repeat
Inc(k);
if (S[k]<>'.') and (k<=L) then P:=P+S[k];
until (S[k]='.') or (k=L);
Val(P,R,Code);
SR:=Dec2Bin(R);
LR:=Length(SR);
for m:=1 to 8-LR do S1:=S1+'0';
S1:=S1+SR;
until k=L;
Bin_SM_IP:=S1;
end;
Function Num_of_Zero(S:String):Byte;
var k,L:Byte;
begin
L:=Length(S);
k:=0;
While S[L-k]='0' do Inc(k);
Num_of_Zero:=k;
end;
Begin
Write('Subnet Mask (x.x.x.x) = ');
Readln(SM);
Write('IP (x.x.x.x) = ');
Readln(IP);
SM_Bin:=Bin_SM_IP(SM);
IP_Bin:=Bin_SM_IP(IP);
NZ:=Num_of_Zero(SM_Bin);
LL:=Length(IP_Bin);
Nc_Bin:=Copy(IP_Bin,LL-NZ+1,NZ);
Nc:=Bin2Dec(Nc_Bin);
Writeln('Computer subnet number is ',Nc);
Readln
End.
Естественно, если у Вас этот дебильный АВС, то LongInt нужно всюду заменить на Integer, что, впрочем, не гарантирует работоспособности программы. На Free Pascal она ПОЛНОСТЬЮ отлажена и оттестирована.