Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Laboratornaya_rabota_1_KMZI.docx
Скачиваний:
3
Добавлен:
05.09.2019
Размер:
44.22 Кб
Скачать

In.Close();

Out.close();

switch (message)

{

case WM_COMMAND:

switch (wParam)

{

case IDOK:

EndDialog(hDlg,TRUE);

break;

default:

return FALSE;

}

break;

default:

return FALSE;

}

return FALSE;

}

LRESULT CALLBACK DESHIFR_PLEYFER(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)

{

int i=0, j=0, dlina=0, K1=0, K2=0, x=0 ;

char A[100]= "HARPSICODBEFGKLMNQTUVWXYZ", *S="X", Z[5], Z1[5],Z2[5], TEXT[100] ;

char file2[20]="D:\\shifr2.txt";

char file1[20]="D:\\deshifr.txt";

Ifstream In;

ofstream Out;

In.Open(file1);

Out.open(file2);

while(!In.eof())

{

In>>TEXT[i];

i++;

}

TEXT[i-1]='\0';

dlina=strlen(TEXT);

i=0;

while(i!=dlina)

{

Z[0]=TEXT[i];

Z[1]='\0';

K1=INDEX(Z,A) ;

Z[0]=TEXT[i+1];

Z[1]='\0';

K2=INDEX(Z,A) ;

//Находится в одной строке

if(K1/10==K2/10)

{ if((K1%10)==0)

{

TEXT[i]=A[(K1/10)*5+4];

TEXT[i+1]=A[(K2/10)*5+(K2%10)-1];

}

else

{ if((K2%10)==0)

{ TEXT[i]=A[(K1/10)*5+(K1%10)-1];

TEXT[i+1]=A[(K2/10)*5+4];

}

else

{ TEXT[i]=A[(K1/10)*5+(K1%10)-1];

TEXT[i+1]=A[(K2/10)*5+(K2%10)-1];

}

}

}

else

{ //Находится в одном столбце

if(K1%10==K2%10)

{ if((K1/10)==0)

{

TEXT[i]=A[(K1%10)+20];

TEXT[i+1]=A[(K2%10)+(K2/10)*5-5];

}

else

{ if((K2/10)==0)

{

TEXT[i]=A[(K1/10)*5+(K1%10)-5];

TEXT[i+1]=A[(K2%10)+20];

}

else

{

TEXT[i]=A[(K1%10)+(K1/10)*5-5];

TEXT[i+1]=A[(K2%10)+(K2/10)*5-5];

}

}

}

else

{ if((K1/10)<(K2/10))

{ TEXT[i]=A[(K1/10)*5+(K2%10)];

TEXT[i+1]=A[(K2/10)*5+(K1%10)];

}

else

{ TEXT[i+1]=A[(K2/10)*5+(K1%10)];

TEXT[i]=A[(K1/10)*5+(K2%10)];

}

}

}

i=i+2;

}

dlina=strlen(TEXT);

Z[0]=TEXT[dlina];

Z[1]='\0';

if(strcmp(Z,S)==0)

TEXT[dlina]='\0';

dlina=strlen(TEXT);

for(i=1;i<dlina;i++)

{

Z[0]=TEXT[i];

Z[1]='\0';

Z1[0]=TEXT[i];

Z1[1]='\0';

Z2[0]=TEXT[i];

Z2[1]='\0';

if((strcmp(Z,S)==0)&&(strcmp(Z1,Z2)==0))

{ for(j=i;j<dlina;j++)

TEXT[j]=TEXT[j+1];

TEXT[dlina]='\0';

dlina=strlen(TEXT);

}

}

for(i=0;i<dlina;i++)

Out<<TEXT[i];

In.Close();

Out.close();

switch (message)

{

case WM_COMMAND:

switch (wParam)

{

case IDOK:

EndDialog(hDlg,TRUE);

break;

default:

return FALSE;

}

break;

default:

return FALSE;

}

return FALSE;

}

void fun( vector<Simbol> &general, vector<Simbol> &right )

{

int max=0;

vector<Simbol>::iterator iter = right.begin();

for(int i=0; i<right.size(); i++)

{

if(right[i].kol > max)

{

max = right[i].kol;

iter += i;

}

}

vector <Simbol> left(1);

left[0].c = (*iter).c;

left[0].kol = (*iter).kol;

right.erase(iter);

int min_raz, sum_l, sum_r, raz;

do

{

sum_l = 0; sum_r =0;

for( i = 0; i < right.size(); i++)

sum_r += right[i].kol;

for( i = 0; i < left.size(); i++)

sum_l += left[i].kol;

min_raz = abs(sum_r - sum_l - 2 * right[0].kol );

iter = right.begin();

for( i = 1; i< right.size(); i++)

{

raz = abs(sum_r - sum_l - 2 * right[i].kol );

if( raz < min_raz)

{

min_raz = raz;

iter = right.begin();

iter+=i;

}

}

if(min_raz < abs(sum_l - sum_r) )

{

left.push_back(*iter);

right.erase(iter);

}

}while( abs(sum_l - sum_r) > min_raz );

for( i = 0; i < right.size(); i++ )

{

for( int j = 0; j < general.size(); j++ )

{

if( right[i].c == general[j].c )

general[j].code.push_back(0);

}

}

for( i = 0; i < left.size(); i++ )

{

for( int j = 0; j < general.size(); j++ )

{

if( left[i].c == general[j].c )

general[j].code.push_back(1);

}

}

if( 1< right.size() )

fun(general, right);

if( 1 < left.size() )

fun(general, left);

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]