Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
20
Добавлен:
02.05.2014
Размер:
11.91 Кб
Скачать
//---------------------------------------------------------------------------

#ifndef UCSUH
#define UCSUH
//---------------------------------------------------------------------------
#include <Classes.hpp>
#include <Controls.hpp>
#include <StdCtrls.hpp>
#include <Forms.hpp>
#include <ComCtrls.hpp>
#include <ExtCtrls.hpp>
#include <Graphics.hpp>
#include <Menus.hpp>
#include <math.h>
#include <ImgList.hpp>
#include <Buttons.hpp>
#include <Dialogs.hpp>
//---------------------------------------------------------------------------
class TForm_Kod : public TForm
{
__published:	// IDE-managed Components
        TMainMenu *MainMenu1;
        TMenuItem *N1;
        TPageControl *PageControl1;
        TTabSheet *TabSheet1;
        TTabSheet *TabSheet2;
        TImage *Image1;
        TLabel *Label1;
        TEdit *Edit1;
        TEdit *Edit2;
        TButton *Button_Kod;
        TEdit *Edit3;
        TLabel *Label2;
        TLabel *Label3;
        TButton *Button_Screm;
        TEdit *Edit4;
        TEdit *Edit5;
        TLabel *Label4;
        TButton *Button_Descrem;
        TEdit *Edit6;
        TEdit *Edit7;
        TLabel *Label5;
        TLabel *Label6;
        TLabel *Label7;
        TLabel *Label8;
        TLabel *Label9;
        TLabel *Label10;
        TTabSheet *TabSheet3;
        TRichEdit *RE_Out;
        TButton *Button2;
        TRadioGroup *RadioGroup1;
        TLabel *Label11;
        TLabel *Label12;
        TLabel *Label13;
        TLabel *Label14;
        TTabSheet *TabSheet4;
        TEdit *Edit8;
        TButton *Bt_Sluch;
        TEdit *Edit9;
        TButton *Bt_Prov;
        TLabel *Label15;
        TLabel *Label16;
        TLabel *Label17;
        TLabel *Label18;
        TImage *Image2;
        TLabel *Label19;
        TLabel *Label20;
        TLabel *Label21;
	TTabSheet *TSScrStrim;
	TPanel *PBtScrStrim;
	TMemo *MemScrStrim;
	TSpeedButton *SBtOpenStrimFile;
	TSpeedButton *SBtSaveStrimFile;
	TSpeedButton *SBtScrStrim;
	TSpeedButton *SBtDeScrStrim;
	TOpenDialog *ODlgStrim;
	TSaveDialog *SvDlgStrim;
	TLabel *Label22;
	TProgressBar *ProgressBar1;
	TMenuItem *N2;
	TMenuItem *N3;
	TMenuItem *N4;
	TMenuItem *N5;
        void __fastcall Button_KodClick(TObject *Sender);
        void __fastcall Button_ScremClick(TObject *Sender);
        void __fastcall Button_DescremClick(TObject *Sender);
        void __fastcall Edit1Click(TObject *Sender);
        void __fastcall Button2Click(TObject *Sender);
        void __fastcall FormDestroy(TObject *Sender);
        void __fastcall RadioGroup1Click(TObject *Sender);
        void __fastcall Bt_SluchClick(TObject *Sender);
        void __fastcall Bt_ProvClick(TObject *Sender);
        void __fastcall EditKeyPress(TObject *Sender, char &Key);
	void __fastcall N1Click(TObject *Sender);
	void __fastcall SBtOpenStrimFileClick(TObject *Sender);
	void __fastcall SBtSaveStrimFileClick(TObject *Sender);
	void __fastcall SBtScrStrimClick(TObject *Sender);
	void __fastcall SBtDeScrStrimClick(TObject *Sender);
	void __fastcall N2Click(TObject *Sender);
	void __fastcall N5Click(TObject *Sender);
	void __fastcall N4Click(TObject *Sender);
private:	// User declarations
public:		// User declarations
AnsiString Dvoich_Preobr(BYTE);
AnsiString Scrembler(AnsiString const, int);
AnsiString De_Scrembler(AnsiString, int);
BYTE Preobr_Chisl(AnsiString);
Graphics::TBitmap *Bitm;
      __fastcall TForm_Kod(TComponent* Owner);
};

AnsiString TForm_Kod::Dvoich_Preobr(BYTE c)
{
	AnsiString s="";
	while(c>1)
	{
		s=s+(c%2);
		c=c/2;
	}
	s=s+c;
	while (s.Length()<8)
	{
		s=s+"0";
	}
	strrev(s.c_str());
	return s;
}

AnsiString TForm_Kod::Scrembler(AnsiString s, int kl)
{
	TabSheet3->Caption="Процесс счета скр-ра";
	RE_Out->Clear();
	DWORD X01, Y01, X11, Y11, X01s, Y01s, X11s, Y11s;
	if(Bitm!=NULL)
	{
   	delete Bitm;
      Bitm=NULL;
   }
	Bitm= new Graphics::TBitmap;
	Bitm->Height=309;
	Bitm->Width=s.Length()*10+60;
	Bitm->Canvas->Brush->Color=clWhite;
	Bitm->Canvas->FillRect(Rect(0,0,Bitm->Width,Bitm->Height));
	Y01=Bitm->Height/2-40;
	Y01s=Bitm->Height-50;
	Y11s=Bitm->Height/2+20;
	Y11=30;
	X01s=X01=30;
	X11s=X11=Bitm->Width-30;
	Bitm->Canvas->Pen->Color=clBlack;
	Bitm->Canvas->MoveTo(X01,Y01);
	Bitm->Canvas->LineTo(X11,Y01);
	Bitm->Canvas->MoveTo(X01,Y01);
	Bitm->Canvas->LineTo(X01,Y11);
	Bitm->Canvas->MoveTo(X01s,Y01s);
	Bitm->Canvas->LineTo(X11s,Y01s);
	Bitm->Canvas->MoveTo(X01s,Y01s);
	Bitm->Canvas->LineTo(X01s,Y11s);
	Bitm->Canvas->MoveTo(X01,Y01);
	Bitm->Canvas->TextOutA(X01,Y11,"A(i)");
	Bitm->Canvas->TextOutA(10,Y11-20,"Исходный код");
	Bitm->Canvas->TextOutA(10,Y11s-20,"Скрэмбл. код");
	Bitm->Canvas->TextOutA(X01s+3,Y11s,"B(i)");
	Bitm->Canvas->TextOutA(X01-10,Y11+25,"1");
	Bitm->Canvas->TextOutA(X01s-10,Y11s+25,"1");
	Bitm->Canvas->TextOutA(X01-10,Y01-5,"0");
	Bitm->Canvas->TextOutA(X01s-10,Y01s-5,"0");
	Bitm->Canvas->TextOutA(X11+3,Y01-10,"i");
	Bitm->Canvas->TextOutA(X11s+3,Y01s-10,"i");
	bool *a= new bool[s.Length()];
	bool *b= new bool[s.Length()];
	AnsiString s_out="", ss_m="";
	Bitm->Canvas->Pen->Color=clRed;
	for(int i=0; i<s.Length();i++)
 	{
 		a[i]=StrToInt(s[i+1]);
 		if(a[i]==0)Bitm->Canvas->MoveTo(X01+10*i,Y01);
 		if(a[i]==1)
  		{
  			Bitm->Canvas->Brush->Color=clYellow;
  			Bitm->Canvas->MoveTo(X01+10*i,Y01);
  			Bitm->Canvas->LineTo(X01+10*i,Y11+30);
  			Bitm->Canvas->LineTo(X01+10*i+10,Y11+30);
  			Bitm->Canvas->LineTo(X01+10*i+10,Y01);
  			Bitm->Canvas->FillRect(Rect(X01+10*i+1,Y11+31,X01+10*i+9,Y01-1));
  			Bitm->Canvas->Brush->Color=clWhite;
  		}
  		if(((i+1)%8)==0)
  		{
  			Bitm->Canvas->MoveTo(X01+10*i+10,Y01-3);
  			Bitm->Canvas->LineTo(X01+10*i+10,Y01+4);
  			Bitm->Canvas->TextOutA(X01+10*i+10,Y01+5,i+1);
  		}
 	}
	if(kl==0)
	{
		Bitm->Canvas->MoveTo(X01s,Y11s+30);
		Bitm->Canvas->LineTo(X01s+10*s.Length(),Y11s+30);
		Bitm->Canvas->MoveTo(X01,Y11+30);
		Bitm->Canvas->LineTo(X01+10*s.Length(),Y11+30);
		for(int i=0; i<s.Length();i++)
 		{
 			if (i==0) b[i]=a[i];
 			if (i==1) b[i]=a[i];
 			if (i==2) b[i]=a[i];
 			if ((i>=0) && (i<3)) ss_m="B("+IntToStr(i)+ ") = A("+IntToStr(i)+")=" +
 			IntToStr(a[i]);
 			if ((i==3)||(i==4)) {b[i]=(a[i]^b[i-3]);
 			ss_m="B("+IntToStr(i)+ ") = A("+IntToStr(i)+")" +(char)94+"B("+IntToStr(i-3)+") = "+
 			IntToStr(a[i])+(char)94+IntToStr(b[i-3])+" = "+IntToStr(b[i]);}
 			if (i>4) {b[i]=(a[i]^b[i-3]^b[i-5]);
 			ss_m="B("+IntToStr(i)+ ") = A("+IntToStr(i)+")" +(char)94+"B("+IntToStr(i-3)+")"+(char)94+"B("+IntToStr(i-5)+") = "+
 			IntToStr(a[i])+(char)94+IntToStr(b[i-3])+(char)94+IntToStr(b[i-5])+" = "+IntToStr(b[i]);}
 			s_out=s_out+IntToStr(b[i]);
 			RE_Out->Lines->Add(ss_m);
 			if(b[i]==0)Bitm->Canvas->MoveTo(X01s+10*i,Y01s);
 			if(b[i]==1)
  			{
  				Bitm->Canvas->Brush->Color=clSilver;
  				Bitm->Canvas->MoveTo(X01s+10*i,Y01s);
  				Bitm->Canvas->LineTo(X01s+10*i,Y11s+30);
  				Bitm->Canvas->LineTo(X01s+10*i+10,Y11s+30);
  				Bitm->Canvas->LineTo(X01s+10*i+10,Y01s);
  				Bitm->Canvas->FillRect(Rect(X01s+10*i+1,Y11s+31,X01s+10*i+9,Y01s-1));
  				Bitm->Canvas->Brush->Color=clWhite;
  			}
   		if(((i+1)%8)==0)
  			{
  				Bitm->Canvas->MoveTo(X01s+10*i+10,Y01s-3);
  				Bitm->Canvas->LineTo(X01s+10*i+10,Y01s +4);
  				Bitm->Canvas->MoveTo(X01s+10*i+10,Y11s+30-3);
  				Bitm->Canvas->LineTo(X01s+10*i+10,Y11s +34);
  				Bitm->Canvas->TextOutA(X01s+10*i+10,Y01s+5,i+1);
  				Bitm->Canvas->Pen->Style=psDot;
  				Bitm->Canvas->MoveTo(X01s+10*i+10,Y01s-3);
  				Bitm->Canvas->LineTo(X01s+10*i+10,Y01+10);
  				Bitm->Canvas->Pen->Style=psSolid;
  			}
 		}
   }
  	Bitm->Canvas->Pen->Style=psDot;
  	Bitm->Canvas->MoveTo(X01s,Y11s-20);
  	Bitm->Canvas->LineTo(X01s,Y01+10);
  	Bitm->Canvas->MoveTo(X01s,Y11s+5);
  	Bitm->Canvas->LineTo(X01s,Y11s-10);
  	Bitm->Canvas->Pen->Style=psSolid;
	if(kl==1)
	{
		for(int i=0; i<s.Length();i++)
 		{
 			if ((i>=0) && (i<6))
      	{
      		b[i]=a[i];
      		ss_m="B("+IntToStr(i)+ ") = A("+IntToStr(i)+")=" + IntToStr(a[i]);
         }
         if ((i==6))
         {
         	b[i]=(a[i]^b[i-6]);
            ss_m="B("+IntToStr(i)+ ") = A("+IntToStr(i)+")" +(char)94+"B("+IntToStr(i-6)+") = "+
            	IntToStr(a[i])+(char)94+IntToStr(b[i-6])+" = "+IntToStr(b[i]);
         }
         if (i>6)
         {
         	b[i]=(a[i]^b[i-6]^b[i-7]);
            ss_m="B("+IntToStr(i)+ ") = A("+IntToStr(i)+")" +(char)94+"B("+IntToStr(i-6)+")"+(char)94+"B("+IntToStr(i-7)+") = "+
            IntToStr(a[i])+(char)94+IntToStr(b[i-6])+(char)94+IntToStr(b[i-7])+" = "+IntToStr(b[i]);
         }
         s_out=s_out+IntToStr(b[i]);
         RE_Out->Lines->Add(ss_m);
         if(b[i]==0)Bitm->Canvas->MoveTo(X01s+10*i,Y01s);
         if(b[i]==1)
         {
         	Bitm->Canvas->Brush->Color=clSilver;
            Bitm->Canvas->MoveTo(X01s+10*i,Y01s);
            Bitm->Canvas->LineTo(X01s+10*i,Y11s+30);
            Bitm->Canvas->LineTo(X01s+10*i+10,Y11s+30);
            Bitm->Canvas->LineTo(X01s+10*i+10,Y01s);
            Bitm->Canvas->FillRect(Rect(X01s+10*i+1,Y11s+31,X01s+10*i+9,Y01s-1));
            Bitm->Canvas->Brush->Color=clWhite;
         }
         if(((i+1)%8)==0)
         {
         	Bitm->Canvas->MoveTo(X01s+10*i+10,Y01s-3);
            Bitm->Canvas->LineTo(X01s+10*i+10,Y01s+4);
            Bitm->Canvas->TextOutA(X01s+10*i+7,Y01s+7,i+1);
         }
      }
   }
   delete [] a;
   delete [] b;
   RE_Out->Lines->Add("\nВ итоге полученный код:");
   RE_Out->Lines->Add(s_out);
   return s_out;
}

AnsiString TForm_Kod::De_Scrembler(AnsiString s, int kl)
{
TabSheet3->Caption="Процесс счета дескр-ра";
RE_Out->Clear();
bool *a= new bool[s.Length()];
bool *b= new bool[s.Length()];
AnsiString s_out="", ss_m="";;
for(int i=0; i<s.Length();i++)
 {
 a[i]=StrToInt(s[i+1]);
 }
if(kl==0)
{
for(int i=0; i<s.Length();i++)
 {
 if (i==0) b[i]=a[i];
 if (i==1) b[i]=a[i];
 if (i==2) b[i]=a[i];
 if ((i>=0) && (i<3)) ss_m="A("+IntToStr(i)+ ") = B("+IntToStr(i)+")=" +
 IntToStr(a[i]);
 if ((i==3)||(i==4)) {b[i]=(a[i]^a[i-3]);
 ss_m="A("+IntToStr(i)+ ") = B("+IntToStr(i)+")" +(char)94+"A("+IntToStr(i-3)+") = "+
 IntToStr(a[i])+(char)94+IntToStr(b[i-3])+" = "+IntToStr(b[i]);}
 if (i>4) {b[i]=(a[i]^a[i-3]^a[i-5]);
 ss_m="A("+IntToStr(i)+ ") = B("+IntToStr(i)+")" +(char)94+"A("+IntToStr(i-3)+")"+(char)94+"A("+IntToStr(i-5)+") = "+
 IntToStr(a[i])+(char)94+IntToStr(b[i-3])+(char)94+IntToStr(b[i-5])+" = "+IntToStr(b[i]);}
 s_out=s_out+IntToStr(b[i]);
 RE_Out->Lines->Add(ss_m);
 }
}

if(kl==1)
{
for(int i=0; i<s.Length();i++)
 {
 if ((i>=0) && (i<6)) {b[i]=a[i];
 ss_m="A("+IntToStr(i)+ ") = B("+IntToStr(i)+")=" + IntToStr(a[i]);}
 if (i==6) {b[i]=(a[i]^a[i-6]);
 ss_m="A("+IntToStr(i)+ ") = B("+IntToStr(i)+")" +(char)94+"A("+IntToStr(i-6)+") = "+
 IntToStr(a[i])+(char)94+IntToStr(b[i-6])+" = "+IntToStr(b[i]);}
 if (i>6) {b[i]=(a[i]^a[i-6]^a[i-7]);
 ss_m="A("+IntToStr(i)+ ") = B("+IntToStr(i)+")" +(char)94+"A("+IntToStr(i-6)+")"+(char)94+"A("+IntToStr(i-7)+") = "+
 IntToStr(a[i])+(char)94+IntToStr(b[i-6])+(char)94+IntToStr(b[i-7])+" = "+IntToStr(b[i]);}
 s_out=s_out+IntToStr(b[i]);
 RE_Out->Lines->Add(ss_m);
 }
}
RE_Out->Lines->Add("\nВ итоге полученный код:");
RE_Out->Lines->Add(s_out);
delete [] a;
delete [] b;
return s_out;
}


BYTE TForm_Kod::Preobr_Chisl(AnsiString const srr)
{
AnsiString s1=srr;
BYTE chis=0;
for(int i=0;i<s1.Length();i++)
 {
  chis=chis+ StrToInt(s1[s1.Length()-i])*pow(2,i);
 }

return chis;
}
//---------------------------------------------------------------------------
extern PACKAGE TForm_Kod *Form_Kod;
//---------------------------------------------------------------------------
#endif
Соседние файлы в папке Source