Технический форум

Технический форум (http://www.tehnari.ru/)
-   Помощь студентам (http://www.tehnari.ru/f41/)
-   -   Pascal. Помогите пожалуйста (http://www.tehnari.ru/f41/t106305/)

hedgehod 11.01.2016 22:11

Pascal. Помогите пожалуйста
 
Если маска подсети 255.255.255.248 и IP-адрес компьютера в сети 156.128.0.227, то номер компьютера в сети равен ?

Vladimir_S 12.01.2016 13:09

Цитата:

Сообщение от hedgehod (Сообщение 1197569)
Если маска подсети 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 она ПОЛНОСТЬЮ отлажена и оттестирована.

hedgehod 13.01.2016 17:49

Спасибо, думаю смогу отладить для ABC. Огромное спасибо.


Часовой пояс GMT +4, время: 09:39.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.