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

Дев’ята сигнатура

0000000000000000000000000000000000000000000000000011001100110011

(register, signature, z, input, iteration number)

0000000000000001 | 1000 || 1 || 1 || 0

0000000000000011 | 3000 || 1 || 1 || 1

0000000000000110 | 6000 || 0 || 0 || 2

0000000000001100 | F000 || 0 || 0 || 3

0000000000011001 | 9100 || 1 || 1 || 4

0000000000110011 | 3300 || 1 || 1 || 5

0000000001100110 | 6600 || 0 || 0 || 6

0000000011001101 | HF00 || 1 || 0 || 7

0000000110011010 | A910 || 0 || 1 || 8

0000001100110100 | 4330 || 0 || 1 || 9

0000011001101001 | 9660 || 1 || 0 || 10

0000110011010011 | 3HF0 || 1 || 0 || 11

0001100110100111 | 7A91 || 1 || 1 || 12

0011001101001111 | U433 || 1 || 1 || 13

0110011010011110 | P966 || 0 || 0 || 14

1100110100111100 | F3HF || 0 || 0 || 15

1001101001111001 | 97A9 || 1 || 0 || 16

0011010011110011 | 3U43 || 1 || 0 || 17

0110100111100111 | 7P96 || 1 || 0 || 18

1101001111001111 | UF3H || 1 || 0 || 19

1010011110011111 | U97A || 1 || 0 || 20

0100111100111110 | P3U4 || 0 || 0 || 21

1001111001111100 | F7P9 || 0 || 0 || 22

0011110011111001 | 9UF3 || 1 || 0 || 23

0111100111110010 | 2U97 || 0 || 0 || 24

1111001111100101 | 5P3U || 1 || 0 || 25

1110011111001011 | CF7P || 1 || 0 || 26

1100111110010111 | 79UF || 1 || 0 || 27

1001111100101111 | U2U9 || 1 || 0 || 28

0011111001011111 | U5P3 || 1 || 0 || 29

0111110010111110 | PCF7 || 0 || 0 || 30

1111100101111101 | H79U || 1 || 0 || 31

//////////////////////////////////////////////////////////////////////////

1111100101111101| H79U

Листинг:

getcode.cpp

// getcode.cpp : Defines the entry point for the console application.

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <stdlib.h>

#include <string>

#include <iostream>

#include <fstream>

#include <bitset>

using namespace std;

const int N = 64;

bitset<N> x1, x2, x3, x4, x5, x6;

bitset<N> o1, o2, o3, o4, o5, o6, o7, o8, o9;

ofstream fout;

void WriteInFile();

void GetOutputs();

void GenInputs();

void GenerateX(int _frenq, bitset<N> &input);

int _tmain(int argc, _TCHAR* argv[])

{

fout.open("out.txt");

GenInputs();

GetOutputs();

WriteInFile();

return 0;

}

void GenerateX(int freq, bitset<N> &input)

{

bool curbit=0;

for (register int i(0); i < N; ++i)

{

if (!(i % freq))

curbit =! curbit;

input[i] = curbit;

}

}

void GenInputs()

{

x1.reset();

x2.reset();

x3.reset();

x4.reset();

x5.reset();

x6.reset();

GenerateX(1, x1);

GenerateX(2, x2);

GenerateX(4, x3);

GenerateX(8, x4);

GenerateX(16, x5);

GenerateX(32, x6);

}

void GetOutputs()

{

for (register int i(0); i < N; ++i)

{

o1[i] = ! x2[i];

o6[i] = ! x5[i];

o2[i] = ! o1[i];

o7[i] = ! o6[i];

o3[i] = x1[i] & o6[i] & o1[i];

o5[i] = o6[i] & o1[i] & x3[i];

o8[i] = x4[i] & o2[i] & o7[i];

o9[i] = o2[i] & o7[i] & x6[i];

o4[i] = o3[i] | o5[i] | o8[i] | o9[i];

}

}

void WriteInFile()

{

fout<<"\t(input signals, output signals):\n";

for (register int i(0); i < N; ++i)

{

fout << x1[i] << " " << x2[i] << " " << x3[i] << " " << x4[i] <<" " << x5[i] << " " << x6[i] <<

"\t" << o1[i] << " " << o2[i] << " " << o3[i] << " " << o4[i] << " " << o5[i] << " " << o6[i] <<

" " << o7[i] << " " << o8[i] << " " << o9[i] << " " << endl;

}

fout << "//////////////////////////////////////////////////////////////////////////\n";

fout << "\tOutput signals(for copy into program text):\n";

fout << "g_str=\"" << o1.to_string() << "\";\n";

fout << "//g_str=\"" << o2.to_string() << "\";\n";

fout << "//g_str=\"" << o3.to_string() << "\";\n";

fout << "//g_str=\"" << o4.to_string() << "\";\n";

fout << "//g_str=\"" << o5.to_string() << "\";\n";

fout << "//g_str=\"" << o6.to_string() << "\";\n";

fout << "//g_str=\"" << o7.to_string() << "\";\n";

fout << "//g_str=\"" << o8.to_string() << "\";\n";

fout << "//g_str=\"" << o9.to_string() << "\";\n";

}

getcode.cpp

// KIDS_6.cpp : Defines the entry point for the console application.

//

#include "stdafx.h"

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <stdlib.h>

#include <string>

#include <fstream>

#include <iostream>

#include <bitset>

using namespace std;

const int N = 64;

const int R = 16; //register length

const int Ti = 32; //window

ofstream fout;

bitset<N> g_data;

bitset<N> g_curdata;

string g_str;

void SetData();

bitset<R> GetReg(bitset<N> m_input);

string GetIdicator(bitset<R> input);

int _tmain(int argc, _TCHAR* argv[])

{

fout.open("out_.txt",ios::app);

cout << "Bit number for testing is " << N << ";\n";

SetData();

bitset<R> code;

string indicator;

code = GetReg(g_data);

indicator = GetIdicator(code);

fout << "//////////////////////////////////////////////////////////////////////////\n" <<

code.to_string() << "| " << indicator << endl;

return 0;

}

void SetData()

{

while (1)

{

//g_str="1100110011001100110011001100110011001100110011001100110011001100";

//g_str="0011001100110011001100110011001100110011001100110011001100110011";

//g_str="0100010001000100000000000000000001000100010001000000000000000000";

//g_str="0100110001001100000000000011001101001100010011000011001100110011";

//g_str="0000110000001100000000000000000000001100000011000000000000000000";

//g_str="1111111111111111000000000000000011111111111111110000000000000000";

//g_str="0000000000000000111111111111111100000000000000001111111111111111";

//g_str="0000000000000000000000000011001100000000000000000000000000110011";

g_str="0000000000000000000000000000000000000000000000000011001100110011";

if (g_str.size() != N)

{

cout<<"Length of entered data is wrong. Please, enter again( "<<N<<")\n\t";

cout<<g_str.size()<<"\n\t";

}

else

{

break;

}

}

fout<<g_str<<endl;

for (register int i(0); i < N; i++)

{

if (g_str[i] == '1')

{

g_data[N-1-i] = 1;

}

else

{

g_data[N-1-i] = 0;

}

}

}

string GetIdicator(bitset<R> input)

{

string sig = "0000";

bitset<4> tmpBit;

for (register int i(0); i < 4; ++i)

{

tmpBit[0] = input[i*4+0];

tmpBit[1] = input[i*4+1];

tmpBit[2] = input[i*4+2];

tmpBit[3] = input[i*4+3];

int mySig = (int)tmpBit.to_ulong();

if (mySig > 15)

{

cout<<"GetIdicator: error\n";

exit(0);

}

switch(mySig)

{

case 0 : sig[i] = '0'; break;

case 1 : sig[i] = '1'; break;

case 2 : sig[i] = '2'; break;

case 3 : sig[i] = '3'; break;

case 4 : sig[i] = '4'; break;

case 5 : sig[i] = '5'; break;

case 6 : sig[i] = '6'; break;

case 7 : sig[i] = '7'; break;

case 8 : sig[i] = '8'; break;

case 9 : sig[i] = '9'; break;

case 10 : sig[i] = 'A'; break;

case 11 : sig[i] = 'C'; break;

case 12 : sig[i] = 'F'; break;

case 13 : sig[i] = 'H'; break;

case 14 : sig[i] = 'P'; break;

case 15 : sig[i] = 'U'; break;

}

}

return sig;

}

bitset<R> GetReg(bitset<N> m_input)

{

bitset<R> reg;

unsigned int cur_z(0);

reg.reset();

if (Ti > N)

{

cout<<"Error: you'd change window duration\n";

exit(0);

}

fout<<"(register, signature, z, input, iteration number)\n";

for (int j=0; j<Ti; j++)

{

cur_z = reg[15]^reg[11]^reg[8]^reg[6]^m_input[j];

reg <<= 1;

reg[0] = cur_z;

fout << reg.to_string()<<" | "<<GetIdicator(reg)<<" || "<<cur_z<<" || "<<m_input[j]<<" || "<<j<<"\n";

}

return reg;

}

Висновки:

В ході виконання роботи був побудований сигнатурний аналізатор, а також досліджені сигнатури для заданої схеми.