情報理論 第 13 回 暗号(1) 2015/1/13 練習問題 1 鍵を 0~25 として暗号文" aopz pz h wlu"を復号した結果を表示する Processing のプログラムを 完成させよ。 void setup(){ size(250, 350); } void draw(){ background(255); fill(0); for (int i=0;i<26;i++){ text(i+":"+shiftedString("aopz pz h wlu", i), 20+(i/13)*100, (i%13+1)*25); } } String shiftedString(String str, int key){ char s[]=str.toCharArray(); // 文字列を文字の配列に変換 for (int j=0;j<s.length;j++){ for (int i=0;i<key;i++){ if (s[j]>='a' && s[j]<='z'){ s[j]++; if (s[j]>'z') s[j]='a'; } } } return new String(s); // s を文字列に変換して返す } 実行結果 1 情報理論 第 13 回 暗号(1) 2015/1/13 練習問題 2 暗号文の書かれたテキストファイルから文字を読み込んで、その出現頻度を表示する Processing のプ ログラムを完成させよ。 float ratio[]=new float[26]; void setup(){ size(250, 350); calcRatio("text.txt"); } void draw(){ background(255); fill(0); for (int i=0;i<ratio.length;i++){ text((char)('A'+i)+":"+ratio[i]*100, 20+(i/13)*100, (i%13+1)*25); } } void calcRatio(String filename){ for (int i=0;i<ratio.length;i++){ ratio[i]=0; } BufferedReader br=createReader(filename); try{ int n=0; String temp; while((temp=br.readLine())!=null){ println(n); char s[]=temp.toCharArray(); for (int i=0;i<s.length;i++){ if (s[i]>='a' && s[i]<='z'){ ratio[s[i]-'a']++; n++; } if (s[i]>='A' && s[i]<='Z'){ ratio[s[i]-'A']++; n++; } } } br.close(); for (int i=0;i<ratio.length;i++){ ratio[i]/=n; } }catch(Exception e){ println("file not found"); } } 2 情報理論 第 13 回 暗号(1) 2015/1/13 実行結果 3
© Copyright 2024 ExpyDoc