...

caesar2.c 論述へのコメントおよびアドバイス 村川 猛彦 2009 年 12 月 7 日

by user

on
Category: Documents
14

views

Report

Comments

Transcript

caesar2.c 論述へのコメントおよびアドバイス 村川 猛彦 2009 年 12 月 7 日
caesar2.c 論述へのコメントおよびアドバイス
村川
猛彦
2009 年 12 月 7 日
1. 添削例
以下の各項目は「間違った記述 ⇒ 適切な記述 // コメント」という構成になっている.
「⇒ 適切な記述」,「// コメント」がないものもある.

-1 文字ずらした ⇒ 1 文字前にずらした // ここの説明でマイナスを使うことに合理性
はない.

. / c a e s a r 2 U y i y w y k y // どこが空白か分からないのは,まずい.

/caesar2 Uyiywyky ⇒ ./caesar2 Uyiywyky // 実行ファイルを実行する際の「./」は,
カレントディレクトリにあるファイルを実行するという(シェルへの)指示である.
コンパイルの cc や,ls などのファイル操作コマンドは,カレントディレクトリに実行
ファイルがあるわけではないので,
「./」を付けない.

14~19 行目で,間違った出力を回避している ⇒ 14~19 行目で,間違った出力になる
可能性をチェックしている // if 文を説明するときの文末には,
「判定する」
「検査する」
「チェックする」などが用いられやすい.

14~19 行目の構文では ⇒ 14~19 行目の for ループでは // 「構文」は,「for の構文
は…」のように,文の組み立てを説明するときに使う.14 行目のみなら「for 文」,終
わりまで含めて一つの反復のことを言及したければ「for ループ」と書くのがよい.

14~19 行目は,alphabet の文字がアルファベット順であるかどうかを調べている //
それを調べるためのコードではない.ただし,
「『This program may produce a strange
output.』と出力するときは,文字コードがアルファベット順で連続していないか,7
行目のアルファベットを打ち間違えている」というのは妥当である.

16 行目を発動させる ⇒ 16 行目の処理を行う // プログラムの説明で「発動」という
言葉は聞いたことがない.

1 つ前の文字に出力する ⇒ 1 つ前の文字に変換する // 出力処理は別に行っている.

23 行目から 34 行目は入れ子の for ループであり ⇒ 23 行目から 34 行目までは入れ子
の for ループであり // 「…から…まで」と書く.
「23~34 行目」
「23-34 行目」でもよ
い.
「23~34 行目まで」
「23 行目~34 行目まで」
(「~」を「-」にしても同じ)は間違
い.「~」の字に,「から・まで」の意味が含まれているからである.

24 行目で「Wakayama」という出力になる ⇒ 25 行目に「24: Wakayama」を出力す
る // 出力の 1 行目は「 0: Uyiywyky」である.

24 行目の for 文では,はじめに p に text のアドレスを代入し,入力された文字列の終
了を判定している // for 文の説明では,「何を行っているループなのか」が分かるよう
な記述にしてほしい.

27-31 行目は,文字が ASCII コードでない場合でも正しく出力できるよう,剰余演算
を利用している // ASCII コードでなければ正しく出力できない可能性がある.ちなみ
にこのプログラムでは,
「'a'か」
「'a'を除く英小文字か」
「'A'か」
「'A'を除く英大文字か」
の 4 通りに場合分けをすれば,剰余演算を用いることなく,同じ出力にすることがで
きる.

27~28 行目の if 文は,参照した文字が a~z なら実行され ⇒ 27~28 行目の if 文は,
参照した文字が a~z のいずれかであるかを判定し,もしそうなら // 参照した文字が
何であっても実行される(比較判定がなされる).
「文字が a~z なら」のところは,述
語動詞を補うと「文字が a~z であるなら」となり,主語と述語の対応がとれていない.

27~31 行目の if 文で,27 行目は ⇒ 27~31 行目の if 文のうち,27 行目は // 「で」
や「は」などは,いろいろなところで使いたい助詞だが,多すぎると単調になる.意
味を考えて,他の助詞や,「のうち」といったより適切な表記がとれないか,考えると
よい.

28 行目では,a の次が z になることを書いている // 他の英字(ここでは小文字)も変
換している.
「a の次が z」は読み手を混乱させるので(今回は教員と TA の 2 名だけが
読んだが,将来,プレゼンテーションをしたり卒業論文などを書いたりするときに,
どんな人に読まれるかをイメージしてほしい)
,
「a を z に置き換える」などの表現がで
きるようになってほしい.

2 つずつずらしていく // そういうことはしていない.出力をよく見てほしい.もし実
際の出力が「2 つずつずらしていく」のなら,どこかに打ち間違いがある.

9~12 行目で入力が存在しないとき,no input.と出力する ⇒ 入力が存在しないとき,
9~12 行目の処理で no input.と出力し,プログラムを終える // 「…と出力する」と書
くと,プログラムはそこで終了することなく続くという意味になり,ここでは適切と
は言えない.

9~19 行,21~34 行で違っている ⇒ 9~19 行目,21~34 行目で異なる処理を行って
いる // 「19 行」と「19 行目」は,別のものを指す.「違う」は文法的には動詞だが,
「違う内容」のように,連体修飾として用いると効果的なことがある.
「違う処理」

Uyiywyky と入力すると,Wakayama と出力する // もっと多くの情報を出力している.

Z を A にかえす ⇒ Z を A に替える // 「返す」
「帰す」
「孵す」のいずれも不適切.
「替
える」か「変える」ならよい.「換える」はグレーゾーン(「置き換える」はよい)
.

a よりどれだけ大きいかを計算して 26 を足したものから 1 を引き,26 で割った余りを
出し,a の文字コードを足したものを新たな文字コードとし //「何をしているのか(how
ではなく what)」「なぜこんな式になっているのか」を書くべきである.

char 型の変数として,alphabet と c を定義している // char の配列として alphabet を,
char 型の変数として c を定義している // 配列(配列変数)とオブジェクト型(配列や
ポインタでない変数)は分けて記述する.

text は入力された文字列を格納し ⇒ text は入力された文字列を参照し //「格納」
は,
配列に対して使う.ポインタ変数の場合,「アドレスを格納する」なら間違いではない
が,「文字列を格納する」ではない.

『c』や『p』を変数として使っている ⇒ 変数 c, p を使用している // 変数名など,プ
ログラムコードの一部は原則としてカギカッコをつけない.変数名の単純な列挙は,
「, 」
(カンマ)で区切る(「変数 c および p」でもよい).

これは,"Uyiywyky"から始まり"Uyiywyky"で終わるようにアルファベットを並べたプ
ログラムである // 「これは何?」の答えを簡潔に説明すべきところで,例を挙げるの
はよくない.その一方で,並べ方(文字列変換の方法)の説明がほしいところ.

そのポインタを配列に置き換えている ⇒ そのポインタ変数を使って配列を参照して
いる // 配列とポインタの違いを復習してほしい.よく用いられる表現に「配列領域を
用意する」「ポインタが参照する」「ポインタが指し示す値」などがある.

もし argc が 1 以下なら ⇒ 9 行目の if 文により,もし argc が 1 以下なら,コマンド
ライン引数が指定されていないことを意味し // 判定式を日本語に置き換えるのは,
「how」である.それが何を意味するのか,すなわち「what」を書けるようになって
ほしい.

アドレス関数 text に ⇒ ポインタ変数 text に // 文章全体はたとえ良くても,このよ
うな単純ミス一つで「分かっていない」と思われるのは損なので,普段から日本語表
現を磨き,提出前によく読むようにしよう.「ポインタ text に」でもよい.「アドレス
変数 text に」は,試験では減点しないが,2 年以降や社会人になっても,この表現を
使っていると,初心者プログラマのように思われるかもしれない.

アルファベットの並びがきっちりしているか ⇒ 'a'~'z'が文字コード上で連番になっ
ているか // 「きっちり」は論述にふさわしくない.

アルファベットを一つ巻き戻して ⇒ 英字については一つ前の文字に置き換えて //
「アルファベットを巻き戻す」では,伝えたいことが表現できていない.

アルファベット以外(数字やカナなど)はそのまま表示される // カナや日本語は,今
回は考えなくてよい.

アルファベット順にならんでるか ⇒ アルファベット順に並んでいるか // 漢字を使
うようにしよう(とくに,名詞や,用言の語幹).正しい助詞・助動詞で表記しよう.

コマンドライン引数のそれぞれに対して判定を行う // argv の使われ方(参照のされ方)
を,isbn13.c と見比べること.

コマンドライン引数を,p という char *型の変数に代入し ⇒ コマンドライン引数の先
頭アドレスを,p という char *型の変数に代入し // 文字列そのものはポインタ変数に
代入できない.ただし,char *p = "abc";と宣言して「文字列 p」と書く慣習もあるの
で,正しいかどうかはケースバイケースである.

コマンドライン引数を取得. ⇒ コマンドライン引数を取得する. // 体言止めにしな
い.

コンパイルして caesar2.c を作成し ⇒ コンパイルして caesar2 を作成し // ソースフ
ァイルのファイル名は「.c」で終え,実行ファイルは,ソースファイルから「.c」を取
り除いたものが通例である.

シーザー暗号をすべて出力する ⇒ シーザー暗号による平文の候補をすべて出力する
// プログラムの説明にあたっては,
「何を」出力するのかに細心の注意を払う.

シーザー暗号化された文字列を ⇒ シーザー暗号で暗号化された文字列を // 「シーザ
ー」では通じず,「シーザー暗号」と書く.

ポインタ変数 p に文字列を代入して ⇒ ポインタ変数 p を文字列の先頭から始めて //
ポインタには,配列や文字列を代入できない.配列や文字列の先頭アドレスを代入す
るのである.文字列の走査については「先頭から順に~する」と書けばよい.

為の ⇒ ための // 「為」「時」「事」などの形式名詞はひらがなで書く.

隠されていた文字列を表示する ⇒ 元の平文を求める // 暗号の話なので,
「平文」
(
「ひ
らぶん」という.英語では plaintext)という熟語は,知っておいてほしい.

奇数番目の文字を…,偶数番目の文字を… // isbn13.c の論述例に引きずられたのかも
しれないが,今回のプログラムでは,文字列の各文字に対して(偶数奇数に関係なく)
処理をしている.

逆のぼって ⇒ 遡って // 正しい漢字を知り,使おう.

及び ⇒ および // 「及び」「又は」
「従って」などの接続詞はひらがなで書く.

後 32 つ ⇒ 後ろ 2 つ // 「3」と「ろ」は書き分けよう.

最後から 3 行目が「24: Wakayama」と出力される ⇒ 最後から 3 行目が「24:
Wakayama」となる // 主語と述語のペアを適切なものにすること.

指定された文字列がない場合 ⇒ 引数が指定されていない場合 // 「指定された文字列
がない」は,訳文調(例えば no string is specified の訳に思える)で意味が分かりに
くい.

実行方 ⇒ 実行方法 // 「…の方法」の省略形は「…法」であって「…方」ではない.
ただし「実行法」は,プログラミングの分野ではまず見られない.

処理の本体は 14-18 行目の for ループである // 違う.

処理の本体は,23 行目の for ループからである // どこまでかを明記すること.

処理の本体は,9 行目から 32 行目である // 対象とする行が広すぎる.

正しくなければ「This program may produce a strange output.¥n」と出力する ⇒ 正
しくなければ「This program may produce a strange output.」と出力する // 日本語
で説明する際には「¥n と出力する」とは言わない.1 文字出力のときに「¥n を出力す
る」は一応問題ない.「改行文字を出力する」「…を出力して改行する」といった表現
でもよい.

対象はアルファベットの大文字あるいは小文字である ⇒ 対象は英字の大小文字であ
る // 和集合に「あるいは」はおかしい(条件文として書くのなら,OR 条件なので「あ
るいは」「または」となる).意味としては「大文字および小文字」であるが,ここは
合成して,字数を減らすべきである.

中心部は 27~32 行目. ⇒ 処理の中心部は,27~32 行目の for ループである. // 体
言止めにしない.少し修飾語を加えることで,
「自分だけのメモのような情報」が,
「論
述に欠かせないキーセンテンス」に変身する.

途中で p と c が一致しないとき ⇒ 途中で*p と c が一致しないとき // 比較する二つの
値の型を合わせる.式の中の「*p」は,ポインタ変数 p が指し示す値を意味する.

入力がなかったりすると ⇒ 入力がないときには // 「X したりする」と書くと,
「X の
ほかにもすることがある」という意味を暗に含む.

入力した文字列それぞれをアルファベット順に ⇒ 入力した文字列の各文字をアルフ
ァベット順に // 「文字列それぞれ」は,文字列が複数あって,その一つ一つという意
味になる.ここでは一つの文字列に対して,そこに含まれる一つ一つの文字を対象に
処理している.

入力した文字列を,1 つ戻した文字を表示し ⇒ 入力した文字列に対して,各アルファ
ベットを 1 つ前の文字に変換して表示し // 「文字列」は戻せない.前後関係(順序関
係)があるのは文字である.複数の「を」が連続するとき,前のほうを「について」
または「に対して」とするのが効果的なこともある(多用は禁物だが).

配列 p ⇒ ポインタ p // ポインタとして宣言された変数は,ポインタである.配列とし
て宣言された変数は,
(第 8 回授業で取り上げるが,関数の仮引数として宣言する場合
を除いて)配列である.

復合 ⇒ 復号 // 「ふくごう」の同音異義語は「復号」と「複合」の二つである.違い
は,辞書を引いて確認しておくこと.

文字を p に代入する // p はポインタ(char *型)なので,文字(char 型の値)を代入
することはできない.

文字コードが a~z を順番に登録している ⇒ 文字コードで a~z が連番になっている
// 登録は,していない.

文字例 ⇒ 文字列 // 専門用語は正しく書けるように.例年,「再帰」と書くべきとこ
ろを「再起」としてしまっているレポートの答案が見られる.

文字列に text ポインタを付ける ⇒ 文字列をポインタ変数 text で参照する // 初出の
変数名を書くときは,「ポインタ変数 text」(または「ポインタ text」)のようにする.

文字列全てを表現するプログラムである ⇒ 文字列全てを出力するプログラムである
// 「表現」とすると,必ずしも出力しないことを意味する.なお,この授業では「出
力する」を使うように努めているが,「表示する」でもよい(細かいことを言うと,表
示しているのは OS やウィンドウシステムなどである.「…が表示される」なら,全く
問題ない).
2. 心がけ
白紙またはそれに近い答案をはじめ,前項で書くのが困難なものを取り上げる.

「1」と書いてから,線を書き加えて「2」としているのは,見苦しい.消しゴムで消
して書き直す習慣をつけよう.

「Z」
「z」を書くときには,中心(右上から左下に走らせたところ)を横切るように小
さな線を入れること.これで,「2」と区別される.

プログラムの挙動を正しく理解すること.

箇条書きは,情報の整理に使う.論述をすべて箇条書きにするのは良くない.

限られた時間で必要かつ十分のことを書けるようになってほしい.授業(講義)の聞
き取り・書き取りから始めるとよい.

細かい知識を身につけても,試験で書けなかったら不合格だし,自分の作っているプ
ログラムを友人や教員に説明できなかったら,プログラミング能力は伸ばせない.こ
れからの授業をよく聴き,言葉で表せるよう練習してほしい.

試験でもこの形式で論述してもらうので,まずは授業でこちらが話す「音声」を「文
字」として記録する習慣をつけよう.

「受身からの脱皮」を心がけること.

字が汚いと,試験で解答の意図が読み取られず,減点される可能性がある.就職活動
で不利になるかもしれない.一文字一文字,丁寧に書くこと.

消し跡が汚い.必要なときにきれいに消せるような筆記具を選んで使おう.

書いてある内容は,
「論述」の前に,ノートなどで書くこと(メモ)のように思われる.
情報を組み上げること,論述にあたっては主語と述語を対応させることを,心がけて
ほしい.

全出力を書くのは,答案スペースの無駄と言わざるを得ない.試験でも報われない.
主要なところのみを書くようにしよう.

筆記体とブロック体の混在は良くない.プログラムの説明で筆記体を用いる必要はな
く,すべてブロック体のほうがよい.その際,(1)大文字・小文字の区別をつけること,
(2)どこに空白があるのかを分かりやすく書くこと,が必須となる.
11月30日の授業で見かけたもの
✕scratchバッファでCファイル作成
 間違い:Emacs起動
間違
起動
→ 起動時のメッセージを消す
起動時
ジを消す
→ Cのプログラムを書く → ファイルに保存
 正しい:Emacs起動 → Cのファイルを開く → Cのプ
「emacs Cファイル名」を
ログラムを書く → 保存
実行してEmacsを起動
 「c‐mode」にすれば,Cに合わせた するのでもよい
色付け表示,自動インデントなどをしてくれる.
デ
✕ソースファイルの名前が「caesar2」
 正しくは「caesar2.c」.ソースファイルと実行ファイ
ルを区別しよう.
赤入れの読み方
• 情報処理Ⅲの授業は,毎週月曜日の2時限
Ⅱ
誤記
• にA103A601で行われている.11月3日は,
0
不要な記述
脱字
• A601で中間テストを実施した.
?
意味不明
Fly UP