Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Работа с сетью в Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.05.2011, 23:58   #1
Jeraldino74
Пользователь
 
Регистрация: 16.05.2011
Сообщений: 45
Восклицание Определение маски подсети

Есть форма.

Форма для определения маски подсети. Здесь необходимо определить минимальную маску подсети.

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, math;

type
  TForm1 = class(TForm)
    edt_IP1: TEdit;
    edt_IP2: TEdit;
    edt_IP3: TEdit;
    edt_IP4: TEdit;
    edt_P1: TEdit;
    edt_P2: TEdit;
    edt_P3: TEdit;
    edt_P4: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Label3: TLabel;
    Button1: TButton;
    Button2: TButton;
    mm_res: TMemo;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

const
  M_1b = $FF000000;
  M_2b = $00FF0000;
  M_3b = $0000FF00;
  M_4b = $000000FF;

var
  Form1: TForm1;
  IP,MP,IP_pod, c: dWord;
  sIP1,sIP2,sIP3,sIP4: string;
  Nb_sv,X: byte;


implementation


{$R *.dfm}
function StrToIP (s1,s2,s3,s4:string):dWord;
 begin
 Result := (StrToInt(s1)shl 24) + (StrToInt(s2)shl 16) + (StrToInt(s3)shl 8) + (StrToInt(s4));
 end;

function IPToStr (I: dWORD;var s1,s2,s3,s4:string) :Boolean;
 begin
 s1 := IntToStr((I and M_1b)shr 24);
 s2 := IntToStr((I and M_2b)shr 16);
 s3 := IntToStr((I and M_3b)shr 8);
 s4 := IntToStr(I and M_4b);
 result := true;
 end;

procedure TForm1.Button2Click(Sender: TObject);
 begin
 Form1.Close;
 end;

procedure TForm1.Button1Click(Sender: TObject);
 begin
mm_res.Lines.Clear;
IP := StrToIP(edt_IP1.text, edt_IP2.text, edt_IP3.text, edt_IP4.text);
IP_pod := StrToIP(edt_P1.text, edt_P2.text, edt_P3.text, edt_P4.text);
X := IP-IP_pod;
Nb_sv := 0;
repeat
Nb_sv := Nb_sv + 1;
C := round(power(2,Nb_sv)) - 1;
until C >= X;
MP := not (C);
IPToStr(MP,sIP1,sIP2,sIP3,sIP4);
mm_res.Lines.Add(sIP1+'.'+sIP2+'.'+sIP3+'.'+sIP4);
 end;

end.
Почему то при выводе маски подсети, не затрагивает 1,2,3 октет. Где что не так?
Jeraldino74 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
IP Адреса и Маски подсети emsisem Помощь студентам 3 28.02.2011 12:15
Удаление файлов со всех компьютеров подсети Johnjc82 Помощь студентам 0 10.05.2010 23:31
Определение маски подсети Paradiz Общие вопросы .NET 0 24.04.2010 15:53
маска подсети vbas Компьютерное железо 2 04.04.2010 00:07
Маска подсети Шульц Свободное общение 0 16.03.2010 22:07