久久久久久久999_99精品久久精品一区二区爱城_成人欧美一区二区三区在线播放_国产精品日本一区二区不卡视频_国产午夜视频_欧美精品在线观看免费

 找回密碼
 立即注冊

QQ登錄

只需一步,快速開始

搜索
查看: 3305|回復: 0
收起左側

C程序模擬3轉子的恩格瑪機

[復制鏈接]
ID:102014 發表于 2016-1-6 02:13 | 顯示全部樓層 |閱讀模式

  1. #include "stdafx.h"
  2. #include "egm1.h"

  3. zz zz_1;//定義3個轉子
  4. zz zz_2;
  5. zz zz_3;
  6. int fs[13][2];//定義反射板
  7. ////////////////////////////////////////////////////////////////////////////////////////////////////////////
  8. void ege1_init()
  9. {
  10.   //初始化恩格瑪機
  11.   zz_1.d=0;
  12.   zz_2.d=0;
  13.   zz_3.d=0;

  14.   //定義1號轉子的接線盤
  15.   zz_1.lj[0][0]=0;
  16.   zz_1.lj[0][1]=2;

  17.   zz_1.lj[1][0]=1;
  18.   zz_1.lj[1][1]=4;
  19.   zz_1.lj[2][0]=2;
  20.   zz_1.lj[2][1]=6;
  21.   zz_1.lj[3][0]=3;
  22.   zz_1.lj[3][1]=8;
  23.   zz_1.lj[4][0]=4;
  24.   zz_1.lj[4][1]=10;
  25.   zz_1.lj[5][0]=5;
  26.   zz_1.lj[5][1]=12;
  27.   zz_1.lj[6][0]=6;
  28.   zz_1.lj[6][1]=14;
  29.   zz_1.lj[7][0]=7;
  30.   zz_1.lj[7][1]=16;
  31.   zz_1.lj[8][0]=8;
  32.   zz_1.lj[8][1]=18;
  33.   zz_1.lj[9][0]=9;
  34.   zz_1.lj[9][1]=20;
  35.   zz_1.lj[10][0]=10;
  36.   zz_1.lj[10][1]=22;
  37.   zz_1.lj[11][0]=11;
  38.   zz_1.lj[11][1]=24;
  39.   zz_1.lj[12][0]=12;
  40.   zz_1.lj[12][1]=25;
  41.   zz_1.lj[13][0]=13;
  42.   zz_1.lj[13][1]=1;
  43.   zz_1.lj[14][0]=14;
  44.   zz_1.lj[14][1]=3;
  45.   zz_1.lj[15][0]=15;
  46.   zz_1.lj[15][1]=5;
  47.   zz_1.lj[16][0]=16;
  48.   zz_1.lj[16][1]=7;
  49.   zz_1.lj[17][0]=17;
  50.   zz_1.lj[17][1]=9;
  51.   zz_1.lj[18][0]=18;
  52.   zz_1.lj[18][1]=11;
  53.   zz_1.lj[19][0]=19;
  54.   zz_1.lj[19][1]=13;
  55.   zz_1.lj[20][0]=20;
  56.   zz_1.lj[20][1]=15;
  57.   zz_1.lj[21][0]=21;
  58.   zz_1.lj[21][1]=17;
  59.   zz_1.lj[22][0]=22;
  60.   zz_1.lj[22][1]=19;
  61.   zz_1.lj[23][0]=23;
  62.   zz_1.lj[23][1]=21;
  63.   zz_1.lj[24][0]=24;
  64.   zz_1.lj[24][1]=23;
  65.   zz_1.lj[25][0]=25;
  66.   zz_1.lj[25][1]=0;
  67.   //定義2號轉子的接線盤
  68.   zz_2.lj[0][0]=0;
  69.   zz_2.lj[0][1]=2;

  70.   zz_2.lj[1][0]=1;
  71.   zz_2.lj[1][1]=4;
  72.   zz_2.lj[2][0]=2;
  73.   zz_2.lj[2][1]=6;
  74.   zz_2.lj[3][0]=3;
  75.   zz_2.lj[3][1]=8;
  76.   zz_2.lj[4][0]=4;
  77.   zz_2.lj[4][1]=10;
  78.   zz_2.lj[5][0]=5;
  79.   zz_2.lj[5][1]=12;
  80.   zz_2.lj[6][0]=6;
  81.   zz_2.lj[6][1]=14;
  82.   zz_2.lj[7][0]=7;
  83.   zz_2.lj[7][1]=16;
  84.   zz_2.lj[8][0]=8;
  85.   zz_2.lj[8][1]=18;
  86.   zz_2.lj[9][0]=9;
  87.   zz_2.lj[9][1]=20;
  88.   zz_2.lj[10][0]=10;
  89.   zz_2.lj[10][1]=22;
  90.   zz_2.lj[11][0]=11;
  91.   zz_2.lj[11][1]=24;
  92.   zz_2.lj[12][0]=12;
  93.   zz_2.lj[12][1]=25;
  94.   zz_2.lj[13][0]=13;
  95.   zz_2.lj[13][1]=1;
  96.   zz_2.lj[14][0]=14;
  97.   zz_2.lj[14][1]=3;
  98.   zz_2.lj[15][0]=15;
  99.   zz_2.lj[15][1]=5;
  100.   zz_2.lj[16][0]=16;
  101.   zz_2.lj[16][1]=7;
  102.   zz_2.lj[17][0]=17;
  103.   zz_2.lj[17][1]=9;
  104.   zz_2.lj[18][0]=18;
  105.   zz_2.lj[18][1]=11;
  106.   zz_2.lj[19][0]=19;
  107.   zz_2.lj[19][1]=13;
  108.   zz_2.lj[20][0]=20;
  109.   zz_2.lj[20][1]=15;
  110.   zz_2.lj[21][0]=21;
  111.   zz_2.lj[21][1]=17;
  112.   zz_2.lj[22][0]=22;
  113.   zz_2.lj[22][1]=19;
  114.   zz_2.lj[23][0]=23;
  115.   zz_2.lj[23][1]=21;
  116.   zz_2.lj[24][0]=24;
  117.   zz_2.lj[24][1]=23;
  118.   zz_2.lj[25][0]=25;
  119.   zz_2.lj[25][1]=0;
  120.   //定義3號轉子的接線盤
  121.   zz_3.lj[0][0]=0;
  122.   zz_3.lj[0][1]=2;

  123.   zz_3.lj[1][0]=1;
  124.   zz_3.lj[1][1]=4;
  125.   zz_3.lj[2][0]=2;
  126.   zz_3.lj[2][1]=6;
  127.   zz_3.lj[3][0]=3;
  128.   zz_3.lj[3][1]=8;
  129.   zz_3.lj[4][0]=4;
  130.   zz_3.lj[4][1]=10;
  131.   zz_3.lj[5][0]=5;
  132.   zz_3.lj[5][1]=12;
  133.   zz_3.lj[6][0]=6;
  134.   zz_3.lj[6][1]=14;
  135.   zz_3.lj[7][0]=7;
  136.   zz_3.lj[7][1]=16;
  137.   zz_3.lj[8][0]=8;
  138.   zz_3.lj[8][1]=18;
  139.   zz_3.lj[9][0]=9;
  140.   zz_3.lj[9][1]=20;
  141.   zz_3.lj[10][0]=10;
  142.   zz_3.lj[10][1]=22;
  143.   zz_3.lj[11][0]=11;
  144.   zz_3.lj[11][1]=24;
  145.   zz_3.lj[12][0]=12;
  146.   zz_3.lj[12][1]=25;
  147.   zz_3.lj[13][0]=13;
  148.   zz_3.lj[13][1]=1;
  149.   zz_3.lj[14][0]=14;
  150.   zz_3.lj[14][1]=3;
  151.   zz_3.lj[15][0]=15;
  152.   zz_3.lj[15][1]=5;
  153.   zz_3.lj[16][0]=16;
  154.   zz_3.lj[16][1]=7;
  155.   zz_3.lj[17][0]=17;
  156.   zz_3.lj[17][1]=9;
  157.   zz_3.lj[18][0]=18;
  158.   zz_3.lj[18][1]=11;
  159.   zz_3.lj[19][0]=19;
  160.   zz_3.lj[19][1]=13;
  161.   zz_3.lj[20][0]=20;
  162.   zz_3.lj[20][1]=15;
  163.   zz_3.lj[21][0]=21;
  164.   zz_3.lj[21][1]=17;
  165.   zz_3.lj[22][0]=22;
  166.   zz_3.lj[22][1]=19;
  167.   zz_3.lj[23][0]=23;
  168.   zz_3.lj[23][1]=21;
  169.   zz_3.lj[24][0]=24;
  170.   zz_3.lj[24][1]=23;
  171.   zz_3.lj[25][0]=25;
  172.   zz_3.lj[25][1]=0;
  173.   //定義反射板接線盤
  174.   fs[0][0]=0;
  175.   fs[0][1]=1;
  176.   fs[1][0]=2;
  177.   fs[1][1]=3;
  178.   fs[2][0]=4;
  179.   fs[2][1]=5;
  180.   fs[3][0]=6;
  181.   fs[3][1]=7;
  182.   fs[4][0]=8;
  183.   fs[4][1]=9;
  184.   fs[5][0]=10;
  185.   fs[5][1]=11;
  186.   fs[6][0]=12;
  187.   fs[6][1]=13;
  188.   fs[7][0]=14;
  189.   fs[7][1]=15;
  190.   fs[8][0]=16;
  191.   fs[8][1]=17;
  192.   fs[9][0]=18;
  193.   fs[9][1]=19;
  194.   fs[10][0]=20;
  195.   fs[10][1]=21;
  196.   fs[11][0]=22;
  197.   fs[11][1]=23;
  198.   fs[12][0]=24;
  199.   fs[12][1]=25;
  200. }
  201. ////////////////////////////////////////////////////////////////////////////////////////////////////////////
  202. int getfs(int data)
  203. {
  204.     //用反射板進行一次數據轉換
  205. int i;
  206. for(i=0;i<=12;i++)
  207. {
  208.      if(fs[i][0]==data) return fs[i][1];
  209. }
  210.     for(i=0;i<=12;i++)
  211. {
  212.      if(fs[i][1]==data) return fs[i][0];
  213. }
  214. return 88;//錯誤
  215. }
  216. ////////////////////////////////////////////////////////////////////////////////////////////////////////////
  217. int getzz_R( zz ZZ,int data)
  218. {
  219. //用轉子進行一次數據轉換 從右往左
  220.     int i;
  221. for(i=0;i<=25;i++)
  222. {
  223.       if(ZZ.lj[i][0]==data) return ZZ.lj[i][1];
  224. }
  225. return 88;//錯誤
  226. }
  227. ////////////////////////////////////////////////////////////////////////////////////////////////////////////
  228. int getzz_L( zz ZZ,int data)
  229. {
  230. //用轉子進行一次數據轉換  從左往右
  231. int i;
  232. for(i=0;i<=25;i++)
  233. {
  234.       if(ZZ.lj[i][1]==data) return ZZ.lj[i][0];
  235. }
  236. return 88;//錯誤
  237. }
  238. ////////////////////////////////////////////////////////////////////////////////////////////////////////////
  239. int getzz1_R(int data)
  240. {
  241. return getzz_R(zz_1,data);
  242. }
  243. int getzz1_L(int data)
  244. {
  245. return getzz_L(zz_1,data);
  246. }
  247. int getzz2_R(int data)
  248. {
  249. return getzz_R(zz_2,data);
  250. }
  251. int getzz2_L(int data)
  252. {
  253. return getzz_L(zz_2,data);
  254. }
  255. int getzz3_R(int data)
  256. {
  257. return getzz_R(zz_3,data);
  258. }
  259. int getzz3_L(int data)
  260. {
  261. return getzz_L(zz_3,data);
  262. }
  263. ////////////////////////////////////////////////////////////////////////////////////////////////////////////
  264. void setkey(int zz1,int zz2,int zz3)
  265. {
  266.   //設置密鑰
  267.   zz_1.d=zz1;
  268.   zz_2.d=zz2;
  269.   zz_3.d=zz3;
  270. }
  271. int jiami(int data)
  272. {
  273. //對一個字符進行加密
  274. data=data+zz_1.d;
  275. if(data>25) data-=26; //修正并定位轉動后的1號轉子的觸點位置
  276. data=getzz1_R(data);  //經過第一個轉子的處理

  277.     if(zz_1.d<zz_2.d)
  278. {
  279.   //2號轉動次數比1號多
  280.   data=data+(zz_2.d-zz_1.d);
  281.   if(data>25) data-=26; //修正并定位轉動后的2號轉子的觸點位置
  282. }
  283. if(zz_1.d>zz_2.d)
  284.     {  
  285.   //2號轉動次數比1號少
  286.   data=data-(zz_1.d-zz_2.d);
  287.   if(data<0) data+=26;  //修正并定位轉動后的2號轉子的觸點位置
  288. }
  289. data=getzz2_R(data);  //經過第2個轉子的處理
  290.    
  291.   if(zz_2.d<zz_3.d)
  292. {
  293.   //3號轉動次數比2號多
  294.   data=data+(zz_3.d-zz_2.d);
  295.   if(data>25) data-=26; //修正并定位轉動后的2號轉子的觸點位置
  296. }
  297. if(zz_2.d>zz_3.d)
  298.     {  
  299.   //3號轉動次數比2號少
  300.   data=data-(zz_2.d-zz_3.d);
  301.   if(data<0) data+=26;  //修正并定位轉動后的2號轉子的觸點位置
  302. }
  303.     data=getzz3_R(data);  //經過第3個轉子的處理
  304. ////////////////////////////////////////////////////////////////////////////////////
  305. //反射后處理
  306.     data=data-zz_3.d;
  307. if(data<0) data+=26;
  308.     data=getfs(data);  //經過反射板的處理
  309.     data=data+zz_3.d;
  310.     if(data>25) data-=26; //修正并定位反射后的3號轉子的觸點位置
  311.     data=getzz3_L(data);  //經過第3個轉子的處理
  312.     if(zz_3.d<zz_2.d)
  313. {
  314.   //2號轉動次數比3號多
  315.   data=data+(zz_2.d-zz_3.d);
  316.   if(data>25) data-=26; //修正并定位轉動后的2號轉子的觸點位置
  317. }
  318. if(zz_3.d>zz_2.d)
  319.     {  
  320.   //2號轉動次數比3號少
  321.   data=data-(zz_3.d-zz_2.d);
  322.   if(data<0) data+=26;  //修正并定位轉動后的2號轉子的觸點位置
  323. }
  324.     data=getzz2_L(data);  //經過第2個轉子的處理
  325.    
  326.    if(zz_2.d<zz_1.d)
  327. {
  328.   //2號轉動次數比3號多
  329.   data=data+(zz_1.d-zz_2.d);
  330.   if(data>25) data-=26; //修正并定位轉動后的2號轉子的觸點位置
  331. }
  332. if(zz_2.d>zz_1.d)
  333.     {  
  334.   //2號轉動次數比3號少
  335.   data=data-(zz_2.d-zz_1.d);
  336.   if(data<0) data+=26;  //修正并定位轉動后的2號轉子的觸點位置
  337. }
  338.     data=getzz1_L(data);  //經過第1個轉子的處理
  339. data=data-zz_1.d;
  340. if(data<0) data+=26;//最后返回的數據
  341.     /////////////
  342. //轉子轉動
  343.     if(zz_1.d<25) zz_1.d++;else zz_1.d=0;
  344. if(zz_2.d<25) {if((zz_1.d%2)==0) zz_2.d++;} else zz_2.d=0;
  345.     if(zz_3.d<25) {if((zz_1.d%3)==0) zz_3.d++;} else zz_3.d=0;
  346. /////////////
  347. return data;
  348. }
  349. ////////////////////////////////////////////////////////////////////////////////////////////////////////////
復制代碼


回復

使用道具 舉報

您需要登錄后才可以回帖 登錄 | 立即注冊

本版積分規則

手機版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術交流QQ群281945664

Powered by 單片機教程網

快速回復 返回頂部 返回列表
主站蜘蛛池模板: 亚洲精品成人在线 | 国外成人免费视频 | 亚洲少妇综合网 | 午夜爽爽爽男女免费观看影院 | 色天堂影院 | 亚洲精品一区二区三区蜜桃久 | 99久久精品一区二区成人 | 国产成人精品网站 | 一级无毛片| 性在线 | 国产精品一区二区视频 | 久日精品| 91久久国产综合久久 | 日韩精品一区二区三区在线观看 | 日韩美女一区二区三区在线观看 | 91精品国产一区二区三区 | 九九综合 | 91视频在线看 | 国产在线观 | 久久亚洲一区二区 | 国产欧美一区二区三区日本久久久 | 欧美日韩在线视频一区 | 麻豆视频在线免费观看 | 欧美综合一区 | 久久久亚洲精品视频 | 天天草狠狠干 | 日韩一区二区三区在线播放 | 国产精品日产欧美久久久久 | 亚洲精品视频在线播放 | 在线一区视频 | 中文字幕在线网 | 99久久免费精品国产男女高不卡 | 欧美精品网站 | 99热欧美 | 久久久久久久久久久一区二区 | 精品亚洲一区二区三区四区五区高 | 国产综合久久 | 麻豆国产一区二区三区四区 | 日韩中文视频 | 成人国产精品久久 | 国产成视频在线观看 |