平成20年 秋期 基本情報技術者 午後 問10
問10 C言語次の C プログラムの説明及びプログラムを読んで,設問1,2に答えよ。 〔プログラムの説明〕 与えられた平文(ひらぶん)を,換字(かえじ)表を用いて暗号文に変換する関数 encrypt_text である。 (1) 関数 encrypt_text の引数は,次のとおりである。ただし,ファイル名に誤りはないものとする。
(2) 平文に含まれるものは,次の 92 種類の文字である。 A 数字 0 〜 9 B 記号 ! " # % & ' ( ) * + , - . / : ; < = > ? [ \ ] ^ _ { | } ~ C 空白文字 (3) 換字表は,平文に含まれる 92 種類の文字を格納した4行 23 列の2次元文字型配列である。 換字表のすべての要素には,異なる文字が格納される。 (4) 換字による暗号化は,次のとおりに行う。ただし,換字表の最下行、(行3)の下には 最上行(行0)が,最右列(列 22 )の右には最左列(列0)があるものとして処理を行う。
A それぞれの文字について,換字表の中の位置(行と列)を求める。 B 2文字が同じ位置にある(同一の文字である)場合 それぞれの文字を,換字表の右下(1行下で1列右)にある文字に置き換える。 換字の例を図1中のBに示す。 C 2文字が同じ行にある場合 それぞれの文字を,換字表の右隣(同じ行の1列右)にある文字に置き換える。 換字の例を図1中のCに示す。 D 2文字が同じ列にある場合 それぞれの文字を,換字表の直下(1行下の同じ列)にある文字に置き換える。 換字の例を図1中のDに示す。 E それぞれの文字を,換字表の同じ行で,他方の文字と同じ列にある文字に置き換える。 換字の例を図1中のEに示す。
図1 換字の例 ![]() 図2 換字表を用いた暗号化の例 〔プログラム〕 (行番号)
1 #include <stdio.h>
2
3 #define ROWS 4 /* 換字表の行数 */
4 #define COLS 23 /* 換字表の列数 */
5
6 void encrypt_text(const char *, const char *,
7 const char[ROWS][COLS]);
8
9 void encrypt_text(const char *in_filename,
10 const char *out_filename,
11 const char ctbl[ROWS][COLS]){
12 FILE *ifp, *ofp;
13 char ch[2];
14 int col[2], row[2], flg, i, sts;
15
16 ifp = fopen(in_filename, "r");
17 ofp = fopen(out_filename, "w");
18 do {
19 sts = fgetc(ifp);
20 if(sts != EOF){
21 ch[0] = sts;
22 sts = fgetc(ifp);
23 if (
設問1 プログラム中の a に関する解答群 エ ch[0] == ch[1] オ sts != EOF カ sts == EOF ウ col[0] != col[1] エ col[0] == col[1] オ row[0] != row[1] カ row[0] == row[1] d に関する解答群 イ ctbl[col[0]+1][row[0]+1] ウ ctbl[col[0]][row[0]] エ ctbl[(row[0]+1) % ROWS][(col[0]+1) % COLS] オ ctbl[row[0]+1][col[0]+1]
設問2 次の記述中の に入れる正しい答えを,
解答群の中から選べ。
(1) 平文に含まれる文字として改行文字を追加し,換字による暗号化を次のとおりに変更する。 (新しい方法) 平文から改行文字を除いた文を従来の換字規則で暗号化し,平文と同じ位置に 改行文字を挿入したものを暗号文とする。 (2) 図2の換字表を用いた新しい方法での暗号化の例を図3に示す。
![]() 図3 新しい方法での暗号化の例 (3) これに対応するために,プログラムを表のとおりに変更する。 表 プログラムの変更内容
ウ 行番号 55 と 56 エ 行番号 56 と 57 オ 行番号 57 と 58
[←前の問題] [次の問題→] [問題一覧表] [分野別] [基本情報技術者試験TOP ]
©2004-2025 情報処理試験.jp
|
プライバシーポリシー・著作権・リンク
|
お問合わせ
| ||||||||||||||||
