<html>

<head><script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<!-- MyFirstUnitAd -->
<ins class="adsbygoogle"
     style="display:inline-block;width:970px;height:250px"
     data-ad-client="ca-pub-5778386704669218"
     data-ad-slot="1503492166"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

<meta http-equiv="Content-Language" content="zh-cn">
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 5.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>enigma</title>
</head>

<body>



<p align="left"><span lang="en-ca"><font size="6" color="#FF0000"><b>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </b></font></span>
<font size="6" color="#FF0000"><b>Enigma--Your mission is a failure!</b></font></p>

<div align="left">
  <pre><b><font color="#ff0000" size="5">A. <span lang="en-ca">First</span> Edition</font></b></pre>
</div>
<div align="left">
  <pre><b>This is a failed attempt! I posted only to let me remember my shame!</b></pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5"><span lang="en-ca">B</span>.<span lang="en-ca"><a name="problem"></a>The problem</span></font></b></pre>
</div>
<div align="left">
  <font FACE="TimesNewRomanPSMT">
  <p ALIGN="LEFT">Enigma is the encryption machine that seemed to be impossible 
  to decode before the invention of computer. I</p>
  <p ALIGN="LEFT">write a simple program to simulate it but it only brings me 
  with shame and regret. </p>
  </font>
  <p ALIGN="LEFT">　</div>
<div align="left">
  <b><font color="#ff0000" size="5"><span lang="en-ca"><a name="explain"></a>C</span>.<span lang="en-ca">The
  </span></font></b><span lang="en-ca"><font size="5" color="#FF0000"><b>idea of 
  program</b></font></span></div>
<div align="left">
  　</div>
<p><span lang="en-ca">I want to write it simple and fast because I have no time.</span></p>
<div align="left">
  <pre>

</pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5">D.<span lang="en-ca"><a name="Method"></a>The </span>major functions</font></b></pre>
</div>
<div align="left">
  <pre><span lang="en-ca"><b>There are few points to mention.</b></span></pre>
</div>
<div align="left">
  <pre>　</pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5"><span lang="en-ca">E</span>.</font></b><span lang="en-ca"><font size="5" color="#FF0000"><b>Further improvement</b></font></span></pre>
</div>
<div align="left">
  <pre>　</pre>
</div>
<div align="left">
  <pre><b><font color="#ff0000" size="5"><span lang="en-ca">F</span>.</font></b><span lang="en-ca"><font size="5" color="#FF0000"><b>File listing</b></font></span></pre>
</div>
<div align="left" style="width: 898; height: 86">
  <pre><font size="3"><b><span lang="en-ca">1. </span>rotor<span lang="en-ca">.</span>h</b></font></pre>
  <pre><font size="3"><b>2<span lang="en-ca">. </span>rotor<span lang="en-ca">.</span>cpp</b></font></pre>
  <pre><font size="3"><b>3<span lang="en-ca">. </span>enigma.h</b></font></pre>
  <pre><font size="3"><b>4<span lang="en-ca">. </span>enigma.cpp</b></font></pre>
  <pre><font size="3"><b>5<span lang="en-ca">. </span>main.cpp (main)</b></font></pre>
  <pre><span lang="en-ca"><font size="3" color="#FF0000"><b>file name: </b></font></span><font size="3" color="#FF0000"><b>rotor.h</b></font></pre>
  <pre>#ifndef ROTOR_H
#define ROTOR_H
const int RotorSize=26;
const int RotorNumber=9;//the last one is stecker

class Rotor
{
private:
	int in[RotorSize];
	int out[RotorSize];
	int shift;
	int advance;
public:
	bool rotate(bool adv);
	int left2right(int number);
	int right2left(int number);
	void set(int settingNumber, int starter);//ground setting
	void reset(){advance=0;}
};
#endif</pre>
  <pre>　</pre>
  <pre><span lang="en-ca"><font size="3" color="#FF0000"><b>file name: </span>rotor<span lang="en-ca">.cpp</span></b></font></pre>
  <pre>#include &quot;Rotor.h&quot;

//I got these settings from &quot;Russell Schwager&quot; who saves me the job of 
//&quot;random mapping&quot;
//the last one is stecker
int setting[RotorNumber][RotorSize]= 
{
	{ 
		4, 10, 12, 5, 11, 6, 3, 16, 
		21, 25, 13, 19, 14, 22, 24, 
		7, 23, 20, 18, 15, 0, 8, 1, 
		17, 2, 9 
	},
	{
		0, 9, 3, 10, 18, 8, 17, 
		20, 23, 1, 11, 7, 22, 19, 
		12, 2, 16, 6, 25, 13, 15, 
		24, 5, 21, 14, 4 
	},
	{
		1, 3, 5, 7, 9, 11, 2, 
		15, 17, 19, 23, 21, 25,
		13, 24, 4, 8, 22, 6, 0,
		10, 12, 20, 18, 16, 14 
	}, 

	{ 
		4, 18, 14, 21, 15, 25, 9, 0,
		24, 16, 20, 8, 17, 7, 23, 11,
		13, 5, 19, 6, 10, 3, 2, 12, 22, 1
	},

	{ 
		21, 25, 1, 17, 6, 8, 19, 24, 20,
		15, 18, 3, 13, 7, 11, 23, 0, 22,
		12, 9, 16, 14, 5, 4, 2, 10 
	},

	{ 
		9, 15, 6, 21, 14, 20, 12, 5,
		24, 16, 1, 4, 13, 7, 25, 17,
		3, 10, 0, 18, 23, 11, 8, 2,
		19, 22 
	},
	{ 
		13, 25, 9, 7, 6, 17, 2, 23, 
		12, 24, 18, 22, 1, 14, 20, 5,
		0, 8, 21, 11, 15, 4, 10, 16, 
		3, 19 
	},
	//this is for reflector and reflector doesn't rotate
	{ 
		5, 10, 16, 7, 19, 11, 23, 
		14, 2, 1, 9, 18, 15, 3, 
		25, 17, 0, 12, 4, 22, 13, 8,
		20, 24, 6, 21 
	},
	//this is stecker, note that it is only &quot;swap&quot; between two characters
	{ 
		9,  20,  12, 3, 18, 
		5,  16,  25, 23, 0, 
		24,  11, 2,  22, 14, 
		1,   6, 17,  4, 19, 
		15, 21,  13,  8, 10, 7 
	}

};

int Rotor::left2right(int number)
{
	int index=(number+advance+shift)%RotorSize;
	if (index&lt;0)
	{
		index+=RotorSize;
	}
	return out[index];
}

int Rotor::right2left(int number)
{
	int index=(number+advance+shift)%RotorSize;
	if (index&lt;0)
	{
		index+=RotorSize;
	}
	return in[index];
}

bool Rotor::rotate(bool adv)
{
	if (adv)
	{
		advance++;
	}
	else
	{
		advance--;
	}
	return advance%RotorSize==0;
}

void Rotor::set(int settingNumber, int starter)
{
	for (int i=0; i&lt;RotorSize; i++)
	{
		in[i]=setting[settingNumber][i];
		out[in[i]]=i;
	}
	shift=starter;
	advance=0;
}

</pre>
</div>
<p><span lang="en-ca"><font size="3" color="#FF0000"><b>file name: </b></font></span>
<font color="#FF0000"><b>enigma.h</b></font></p>
<pre>#include &quot;Rotor.h&quot;

const int RotorCount=3;

class Enigma
{
private:
	Rotor rotors[RotorCount];
	Rotor reflector;
	Rotor stecker;
	int advances[RotorCount];
	int shifts[RotorCount];
	void initialize();
	void rotate(bool adv);
	int operation(int input);
public:
	
	void run(char* text);
	Enigma();
};</pre>
<p>　</p>
<p><font size="3" color="#FF0000"><span lang="en-ca"><b>file name: </b></span><b>
enigma<span lang="en-ca">.cpp</span></b></font></p>
<pre>#include &lt;iostream&gt;
#include &quot;Enigma.h&quot;

using namespace std;

const int SteckerIndex=8;
const int ReflectorIndex=7;

int groundSetting[2][RotorCount]=
{
	{0,1,2},//rotor index
	{0,0,0} //rotor starting position
};


Enigma::Enigma()
{
	initialize();
}


void Enigma::initialize()
{
	for (int i=0; i&lt;RotorCount; i++)
	{
		rotors[i].set(groundSetting[0][i], groundSetting[1][i]);
		//just record the shifts, and it seems useless now.
		shifts[i]=groundSetting[1][i];
		advances[i]=0;
	}
	reflector.set(ReflectorIndex, 0);
	stecker.set(SteckerIndex, 0);
}

void Enigma::rotate(bool adv)
{
	int i=0;
	while (i&lt;RotorCount)
	{
		//this is where &quot;enigma&quot; bookkeeping the &quot;advances&quot;		
		if (rotors[i].rotate(adv))	
		{
			//it means this rotor rotates a cycle and 
			//it is turn for next rotor to rotate
			i++;
		}
		else
		{
			//there is no more rotating
			break;
		}
	}
}

int Enigma::operation(int input)
{	
	//here goes the steckers
	//input=stecker.right2left(input);
	for (int i=0; i&lt;RotorCount; i++)
	{
		input=rotors[i].right2left(input);
		rotate(true);
	}
	//input=reflector.right2left(input);
	//input=reflector.left2right(input);
	for (i=RotorCount-1; i&gt;=0; i--)
	{
		input=rotors[i].left2right(input);
		//input=rotors[i].right2left(input);
		rotate(true);
	}
	//input=stecker.left2right(input);
	//rotating
	/*
	while (i&lt;RotorCount)
	{
		//this is where &quot;enigma&quot; bookkeeping the &quot;advances&quot;
		advances[i]++;
		rotors[i].rotate();
		if (advances[i]%RotorSize==0)//like notch
		{
			//it means this rotor rotates a cycle and 
			//it is turn for next rotor to rotate
			i++;
		}
		else
		{
			//there is no more rotating
			break;
		}
	}
	*/
	return input;
}

	
void Enigma::run(char* text)
{
	for (int i=0; i&lt;RotorCount; i++)
	{
		rotors[i].reset();
		//advances[i]=0;
	}

	char *src=text;
	int input;
	while (*src!='\0')
	{
		if (isalpha(*src))
		{
			input=toupper(*src)-'A';
			input=operation(input);
			*src=input+'A';		
		}
		src++;
	}
}


</pre>
<div align="left">
  <pre><span lang="en-ca"><font size="3" color="#FF0000"><b>file name: main.cpp</b></font></span></pre>
</div>
<pre>#include &lt;iostream&gt;
#include &quot;Enigma.h&quot;
#include &quot;Rotor.h&quot;

using namespace std;


int main()
{
	char buffer[256];
	Enigma E;
	strcpy(buffer, &quot;abcd&quot;);
	E.run(buffer);
	cout&lt;&lt;buffer&lt;&lt;endl;

	cout&lt;&lt;&quot;now decoding\n&quot;;
	E.run(buffer);
	cout&lt;&lt;buffer&lt;&lt;endl;

	return 0;
}

</pre>
<pre>
</pre>
<pre><b><font color="#0000FF"><span lang="en-ca">The result is like following:</span></font></b></pre>

<pre>insert into customer(customer_licence, customer_name, customer_address, customer_phone)values
('L1O2183H6', 'JLIRQ IBURX', '5294,KOJJJIQIQRX', '716-2482-852'); 
insert into service_order(
order_id, customer_licence, order_issue_date) values 
(302,'L1O2183H6','05-MAY-04'); 
insert into car (car_plate_number, customer_licence, modal )values('J9UY3L', 'L1O2183H6', 'Suzuki'); 
insert into schedule(
order_id, car_plate_number, employee_sin ,
service_date, service_time, service_type ) values (
302, 'J9UY3L',567891234, '23-MAY-04', 7, 0); 
insert into schedule(
order_id, car_plate_number, employee_sin ,
service_date, service_time, service_type ) values (
302, 'J9UY3L',234567891, '04-JUN-04', 0, 2); 
insert into car (car_plate_number, customer_licence, modal )values('15D957', 'L1O2183H6', 'Ford'); 
insert into schedule(
order_id, car_plate_number, employee_sin ,
service_date, service_time, service_type ) values (
302, '15D957',567891234, '01-JUN-04', 7, 0); 
insert into schedule(
order_id, car_plate_number, employee_sin ,
service_date, service_time, service_type ) values (
302, '15D957',567891234, '17-MAY-04', 3, 2); 
insert into payment(payment_id, payment_method, order_id,
payment_amount) values(
100,'credi',
302,0.5*(select sum(service_price) from 
service_type t, schedule s where 
s.service_type=t.service_type and 
s.order_id=302));

insert into payment(payment_id, payment_method, order_id,
payment_amount) values(
101,'debit',
302,0.5*(select sum(service_price) from 
service_type t, schedule s where 
s.service_type=t.service_type and 
s.order_id=302));

insert into customer(customer_licence, customer_name, customer_address, customer_phone)values
('T5122K33K', 'MBQAX NPLQR', '6336,AOOGTDQXBQY', '056-0883-240'); 
insert into service_order(
order_id, customer_licence, order_issue_date) values 
(303,'T5122K33K','16-MAY-04'); 
insert into car (car_plate_number, customer_licence, modal )values('K1P97W', 'T5122K33K', 'Suzuki'); 
insert into schedule(
order_id, car_plate_number, employee_sin ,
service_date, service_time, service_type ) values (
303, 'K1P97W',567891234, '08-JUN-04', 3, 0); 
insert into schedule(
order_id, car_plate_number, employee_sin ,
service_date, service_time, service_type ) values (
303, 'K1P97W',678912345, '22-MAY-04', 5, 0); 
insert into car (car_plate_number, customer_licence, modal )values('9ZO3BY', 'T5122K33K', 'Toyota'); 
insert into schedule(
order_id, car_plate_number, employee_sin ,
service_date, service_time, service_type ) values (
303, '9ZO3BY',345678912, '02-JUN-04', 4, 0); 
insert into schedule(
order_id, car_plate_number, employee_sin ,
service_date, service_time, service_type ) values (
303, '9ZO3BY',234567891, '16-MAY-04', 1, 2); 
insert into payment(payment_id, payment_method, order_id,
payment_amount) values(
102,'credi',
303,0.5*(select sum(service_price) from 
service_type t, schedule s where 
s.service_type=t.service_type and 
s.order_id=303));

insert into payment(payment_id, payment_method, order_id,
payment_amount) values(
103,'credi',
303,0.5*(select sum(service_price) from 
service_type t, schedule s where 
s.service_type=t.service_type and 
s.order_id=303));
<span lang="en-ca">...</span></pre>

<pre><span lang="en-ca">...</span></pre>

<pre>　</pre>

<pre></pre>

<pre></pre>

<p>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                                   
&nbsp;&nbsp;&nbsp; <a href="game24.htm">                  







                       <img src="picture/back.gif" style="border: medium none" alt="back.gif (341 bytes)" width="32" height="35"></a>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 
<a href="index.htm">
<img src="picture/up.gif" style="border: medium none" alt="up.gif (335 bytes)" width="35" height="32"></a>       &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;                         
<img src="picture/next.gif" style="border: medium none" alt="next.gif (337 bytes)" width="32" height="35">          


</p>

</body>

</html>