1% ファイル先頭から\begin{document}までの内容(プレアンブル)については,
2% 基本的に { } の中を書き換えるだけでよい.
3\documentclass[autodetect-engine,dvi=dvipdfmx,ja=standard,
4 a4j,11pt]{bxjsarticle}
5
6%%======== プレアンブル ============================================%%
7% 用紙設定:指示があれば,適切な余白に設定しなおす
8\RequirePackage{geometry}
9\geometry{reset,paperwidth=210truemm,paperheight=297truemm}
10\geometry{hmargin=25truemm,top=20truemm,bottom=25truemm,footskip=10truemm,headheight=0mm}
11%\geometry{showframe} % 本文の"枠"を確認したければ,コメントアウト
12
13% 設定:図の挿入
14% http://edu2024.sp.cs.okayama-u.ac.jp/info/tool_guide/tex.html#latex_figure
15\usepackage{graphicx}
16
17% 設定:ソースコードの挿入
18% http://edu2024.sp.cs.okayama-u.ac.jp/info/tool_guide/tex.html#latex_fvextra
19\usepackage{fvextra}
20\renewcommand{\theFancyVerbLine}{\texttt{\footnotesize{\arabic{FancyVerbLine}:}}}
21\fvset{breaklines=true, breakanywhere=true} % fvextraが必要.fancyvrbではエラーになる.
22
23% 設定:ソースコードをfloat扱いするための環境の定義
24% 図1, 図2, ... のように,Listing 1, Listing 2, ... とすることができる.
25\usepackage{newfloat}
26\DeclareFloatingEnvironment[name=Listing, fileext=lol]{eopcode}
27
28%%======== レポートタイトル等 ======================================%%
29% ToDo: 提出要領に従って,適切なタイトル・サブタイトルを設定する
30\title{プログラミング演習1 レポートB\\ % タイトル
31 |\Large{適切なサブタイトルを付ける}|} % サブタイトル
32
33% ToDo: 自分自身の氏名と学生番号に書き換える
34\author{氏名: 原 直 (HARA, Sunao) \\
35 学生番号: 0941xxxx}
36
37% ToDo: レポート課題等の指示に従って適切に書き換える
38\date{出題日: 20xx年xx月xx日 \\
39 提出日: 20xx年xx月xx日 \\
40 締切日: 20xx年xx月xx日 \\} % 注:最後の\\は不要に見えるが必要.
41
42
43%%======== 本文 ====================================================%%
44\begin{document}
45\maketitle
46% 目次つきの表紙ページにする場合はコメントを外す
47%{\footnotesize \tableofcontents \newpage}
48
49%% 本文は以下に書く.課題に応じて適切な章立てを構成すること.
50%% 章=\section,節=\subsection,項=\subsubsection である.
51
52 \textbf{\small※執筆上の注意:本書は空想上の課題に対するレポートの
53 執筆例である.章の構成と書くべき内容の参考として提示するもの
54 であるため,課題内容やプログラムの仕様などは,
55 実際の演習課題の指示に従って適切にまとめ直す必要がある.
56 文や文の一部を「・・・」や「??」によって省略している箇所があるが,
57 これに穴埋めをするだけで,レポートが完成するわけではない.
58 なお,サンプルと同じ書き出しで文章を書く必要もない.
59 (この注意書きは提出用のレポートでは必ず消すか,コメントアウトすること)※}
60
61%--------------------------------------------------------------------%
62\section{概要} \label{sec:abstract}
63 \textbf{\small※執筆上の注意:
64 演習課題説明書を読み,本レポートとして実施した課題が分かるように書く.
65 (この注意書きは提出用のレポートでは必ず消すか,コメントアウトすること)※}
66
67% 繰り返す.以下は,架空の課題である.
68本演習では,名簿管理機能を有するプログラムを,C言語で作成する.
69このプログラムは,標準入力から「ID, 氏名, 誕生日, 住所, 備考」からなる
70コンマ区切り形式(CSV形式)の名簿データを受け付けて,
71それらをメモリ中に登録する機能を持つ.
72ただし,\%で始まる入力行はコマンド入力と解釈し,
73登録してあるデータを表示したり整列したりする機能も持つ.
74
75本レポートでは,演習中に取り組んだ課題として,
76以下の課題??から課題??についての内容を報告する.
77
78\begin{description}
79 \item[課題4] ・・・
80 \item[課題5] ・・・
81 %本文の記述と矛盾しないように注意すること.
82 %・・・は「サンプルのため省略」の意味で書いている.各自で適切に書き直すこと.
83\end{description}
84
85% 以下は,レポートB以降で必須の考察についての書き方の例.
86また,考察課題として,以下の観点での考察をおこない,\ref{}章にまとめた.
87
88\begin{description}
89 \item[考察1] xxxxxxx (\ref{}節)
90 \item[考察2] xxxxxxx (\ref{}節)
91 %本文の記述と矛盾しないように注意すること.
92\end{description}
93
94
95%--------------------------------------------------------------------%
96\section{プログラムの作成方針} \label{sec:plan-of-programming}
97 \textbf{\small※執筆上の注意:課題の理解を深めるため,課題説明書を見ながら
98 書き写そう.コピペは非推奨.なお,追加仕様も,書いているほうが望ましいが,
99 レポートの要件として必須とはしない.追加仕様を書く場合は,次節以降の説明や
100 考察などを通して,その追加仕様の意義を説明するとより良い.
101 (この注意書きは提出用のレポートでは必ず消すか,コメントアウトすること)※}
102
103本演習で作成したプログラムが満たすべき要件と仕様として,
104「(1) 基本要件」と「(2) 基本仕様」を示す.
105% 追加仕様も書くなら,書き変えを忘れずに
106
107\subsection*{(1) 基本要件}
108% ...ction* と,アスタリスクを入れている点に注意.数字無しの節や項目が作られる.
109
110\begin{enumerate}
111 \item プログラムは,その実行中,・・・
112 \item 名簿データは,・・・・
113 \item プログラムとしての動作や名簿データの管理のために,・・・
114 \begin{enumerate}
115 \item プログラムの正常な終了
116 \item 登録された・・・
117 % サンプルのため省略.
118 % レポートBでは,レポートBの時点で必要な機能だけ書いてあればよい
119 \end{enumerate}
120 \item 標準入力からのユーザ入力を通して,,, % サンプルのため省略
121\end{enumerate}
122% Tips: enumerateの行間を調整するなら,以下の様に調整用のコマンドを入れる.
123% \begin{enumerate}
124% \setlength{\parskip}{0em} \setlength{\itemsep}{0.25em} % <--
125% \item ...
126% \item
127
128\subsection*{(2) 基本仕様}
129
130\begin{enumerate}
131 \item 名簿データは,コンマ区切りの文字列(\textbf{CSV入力}と呼ぶ)で表されるものとし,%
132 Listing~\ref{lst:csvdata}に示したようなテキストデータを処理できるようにする.%
133 %CSV入力の詳細は,\ref{sec:sepc_csv}節に示す. % <-- この1文は,レポートでは不要
134 \item コマンドは,\%で始まる文字列(\textbf{コマンド入力}と呼ぶ)とし,表\ref{tab:commands}にあげたコマンドをすべて実装する
135 \item 1つの名簿データは,C言語の構造体 (\texttt{struct}) を用いて,・・・ % サンプルのため省略
136 % サンプルのため省略.仕様書の footnote は書かなくてよい.
137\end{enumerate}
138
139% 追加仕様も書くなら,書き変えを忘れずに
140%\subsubsection*{(3) 追加仕様}
141% \begin{enumerate}
142% \item
143% \end{enumerate}
144
145%========================= EXAMPLE CSV ================================%
146\begin{eopcode}[b]
147\centering % この1行はbegin~endの中を中央寄せにする,というコマンド
148% Verbatim environment
149% プリアンブルで \usepackage{fvextra} か \usepackage{fancyvrb} が必要.
150% - frame 枠の設定.single 四角で囲う.none 囲わない.
151% - xleftmargin 枠の左の余白.行番号表示用の余白も考慮が必要.
152% - xrightmargin 枠の右の余白
153% - numbersep 行番号と枠の間隙 (gap).デフォルトは 12 pt.
154% - gobble 先頭n文字を無視.インデントを無視したい場合に利用する.
155% - fontsize フォントサイズ指定.\normalsize, \small, ...
156% - numbers 行番号を表示.none 非表示.left 左に表示.
157% - firstnumber 最初の行番号を指定.途中の行番号から指定したいなら数字を入れる.
158\begin{Verbatim}[frame=single, xleftmargin=3mm, xrightmargin=3mm, numbersep=6pt,
159 gobble=0, fontsize=\small, numbers=left, firstnumber=1]
1605100046,The Bridge,1845-11-2,14 Seafield Road Longman Inverness,SEN Unit 2.0 Open
1615100127,Bower Primary School,1908-1-19,Bowermadden Bower Caithness,01955 641225 ...
1625100224,Canisbay Primary School,1928-7-5,Canisbay Wick,01955 611337 Primary 56 3...
1635100321,Castletown Primary School,1913-11-4,Castletown Thurso,01847 821256 01847...
164\end{Verbatim}
165 \caption{名簿データのCSV入力形式の例.1行におさまらないデータは...で省略した.}
166 \label{lst:csvdata}
167\end{eopcode}
168%========================= EXAMPLE CSV ================================%
169
170%========================= COMMAND LIST ================================%
171\begin{table}[t] %表の位置は原則として t または b.h や H は使わない.
172\centering % この1行はbegin~endの中を中央寄せにする,というコマンド
173 \caption{実装するコマンド}
174 \label{tab:commands}
175 \begin{tabular}{|l|ll|l|}
176 \hline
177 \textbf{コマンド} & \textbf{意味} & & \textbf{備考} \\
178 \hline\hline
179 \verb|%Q| & 終了 & (Quit) & \\
180 \hline
181 \verb|%P n| & 先頭から$n$件表示 & (Print) & $n$が$0$ $\to$ 全件表示, \\
182 & & & $n$が負 $\to$ 後ろから$-n$件表示 \\
183 \hline
184 ***** &(サンプルのため & 省略) & \\
185 \hline
186 \end{tabular}
187\end{table}
188%========================= COMMAND LIST ================================%
189
190% 以下の2行は提出用のレポートでは必ず消すこと
191\textbf{\small※執筆上の注意:繰り返すが,本書は空想上の課題に対するレポートの
192 執筆例である.書くべき内容としては,課題書等を読んだうえで適切に執筆すること.
193 (この注意書きは提出用のレポートでは必ず消すか,コメントアウトすること)※}
194
195%--------------------------------------------------------------------%
196\section{プログラムの説明} \label{xxxx} % ToDo: 適切なラベルを付けておく.
197% およそ,以下のような内容が記載されていることが期待されている.
198% - プログラムの全体像の説明
199% - 課題4に関するプログラムの説明(3.1節)
200% - 課題5に関するプログラムの説明(3.2節)
201% - 課題6に関するプログラムの説明(3.3節)
202% - 課題7に関するプログラムの説明(3.4節)
203% LaTeXの機能(subsection, subsubsection, 他)を活用し,レポートとしての構成を考えること.
204% \verv, $ $, \textttなど,適切な書体を利用することも忘れずに.
205% Tips:
206% - section, subsectionなどの中では verbが使えない.texttt を使うとよい.
207
208
209本課題で作成するプログラムは,・・・をするプログラムである.
210プログラムリストは・・・節に添付している.
211
212プログラムは全部で267行からなる.
213課題4「テーマ名を書く」に関する機能は,主に10--100行目に記載されている.
214課題5「テーマ名を書く」に関する機能は,主に10--20, ならびに,101-200行目に記載されている.
215課題6・・・
216
217以下,課題4, 5, 6, 7のプログラムの詳細な説明を,
218それぞれ\ref{}節,\ref{}節,\ref{}節,\ref{}節に分けて,記載する.
219
220\subsection{????} % 適切な見出しを考えること.空欄にして,数字のみ示すのもダメ.
221
222yyyy,zzzzという関数を作成した.
223yyyyは,xxxxxのための関数である.
224zzzzは,yyyyを利用しながらxxxxのための関数である.
225aaaa, bbbb, cccc 関数は,eeeee 関数から呼び出される関数である.
226
227yyyyの詳細について説明する.
228yyyyは,・・・
229
230zzzzの詳細について説明する.
231zzzzは,・・・
232
233aaa, bbbb, cccc, は,それぞれ,AAAA, BBBB, CCC のための関数である.
234これは,\ref{}章の仕様で述べた機能を将来的に実装するために用意している.
235ただし,今回のレポートBでは未実装である.
236
237\subsection{????} % 適切な見出しを考えること.空欄にして,数字のみ示すのもダメ.
238
239(※サンプルのため,いろいろと省略)
240
241%--------------------------------------------------------------------%
242\section{プログラムの使用方法と実行結果} \label{xxxx} % ToDo: 適切なラベルを付けておく.
243\textbf{\small ※執筆上の注意:変数や数値は$\backslash$verbや\$\$
244で囲って,適切な書体で記述することを忘れずに.また,章・節番号や
245図表番号の引用も,数字を直接書くのではなく,\LaTeX{} の機能を使うこと.
246なお,このサンプルでは``わざと''一部の処理を省略している.
247見た目の違いを確認して,自分のレポートでは処理を忘れないようにしよう.
248(この注意書きは提出用のレポートでは必ず消すか,コメントアウトすること)※}
249
250% およそ,以下の内容が記載されていることが期待されている.
251% - gccによるコンパイルとプログラムの実行方法(レポートAの2章の一部相当)
252% - 課題4に関する,使用方法,実行結果(入力と出力がわかるように),結果に対する妥当性
253% - 課題5に関する,使用方法,実行結果(入力と出力がわかるように),結果に対する妥当性
254% - 課題6に関する,使用方法,実行結果(入力と出力がわかるように),結果に対する妥当性
255% - 課題7に関する,使用方法,実行結果(入力と出力がわかるように),結果に対する妥当性
256% LaTeXの機能(subsection, subsubsection, 他)を活用し,レポートとしての構成を考えること.
257% \verv, $ $, \textttなど,適切な書体を利用することも忘れずに.
258% Tips:
259% - section, subsectionなどの中では verbが使えない.texttt を使うとよい.
260
261本レポート課題の実施にあたって,Linux環境におけるC言語プログラミングをおこなう.
262まずは,・・・についてまとめる.
263
264以降のプログラムは,いずれも Red Hat Linux 3.2.2-5 で動作を確認しているが,
265一般的な UNIX で動作することを意図して作成している.
266なお,以降の実行例における,行頭の \verb|$| 記号は,
267Red Hat Linux 3.2.2-5におけるターミナルのプロンプトである.
268% 注:以降の課題において,実行結果を得るために利用した,実行環境のOS,
269% ならびに,その環境におけるプロンプトを必ず書くこと.
270
271C言語で書かれたソースコードは,\verb|gcc|でコンパイルすることで,
272プログラムの実行ファイルを生成する.
273今回作成したプログラムのソースコードは,\verb|xxxx.c|という名前で作成している.
274このソースコードは,
275
276% Verbatim environment
277% - プリアンブルで \usepackage{fvextra} か \usepackage{fancyvrb} が必要.
278% - オプションの説明は,冒頭のCSVの挿入例を参照
279\begin{Verbatim}[numbers=none, xleftmargin=8mm, numbersep=6pt,
280 fontsize=\normalsize, baselinestretch=0.8]
281$ gcc -Wall ・・・
282\end{Verbatim}
283%
284のようにコンパイルする.
285この時,生成されるプログラムの実行ファイルは・・・という名前になる.
286
287% Tips: Verbatim の後に空行を入れると,段落が変わってしまう.
288% 段落は変えたくないが,texソースでは隙間を空けて読みやすくしたいなら,
289% 上記例のように,%のみの行を置くとよい.
290
291ここで,\verb|-Wall|とは...するためのオプションであり,
292\verb|-o|とは・・・を指定するオプションである.
293これらのオプションをつけることで,・・・(略)
294
295生成されたプログラム \verb|xxxxx| を実行するには,以下のようにターミナルで入力する.
296
297% Verbatim environment
298% - プリアンブルで \usepackage{fvextra} か \usepackage{fancyvrb} が必要.
299% - オプションの説明は,冒頭のCSVの挿入例を参照
300\begin{Verbatim}[numbers=none, xleftmargin=8mm, numbersep=6pt,
301 fontsize=\normalsize, baselinestretch=0.8]
302$ xxxxx
303\end{Verbatim}
304
305% 上記は,ダメな説明の例である.正しく動かすことができるよう,書き直すこと.
306%
307% !もう一歩上へ!
308% 何が問題か理解しているならば,その旨をレポートに書くこともできよう.
309% 例えば,上記の実行例の後に,「ここで,xxxとしている点に注意が必要である.
310% xxxとすると,xxxになってしまう.そのため,xxxが必要なのである.」
311% といったことが書けると,レポートらしくなる.講義中に感じたちょっとした疑問は,
312% レポートを書くために,重要な気づきを与えてくれる.ただし,その疑問が「xxxは
313% 不思議だと思った.」で止まってしまうと,レポートではなく感想文になってしまう.
314% 「感想」は,最後の感想の章以外に書いてはいけない.
315
316以下,各課題に応じて・・・(※サンプルのため,いろいろと省略)
317
318% 以下は書くべき内容の流れをざっくり書いているだけで,穴埋めしろという意味ではない.
319% 主体をもってレポートを書いてほしい.
320課題xxxxについて述べる.
321xxxというファイルを作る.
322・・・・の様に実行する.
323これにより・・・という結果となる.
324この結果は,・・・・ということである.
325これは・・・の仕様を満たした動作といえる.
326ただし,・・・・という追加仕様を必要としている点に注意が必要である.
327
328課題xxxxについて述べる.
329xxxという入力により,動作例を示す.
330・・・・の様に実行する.
331これにより・・・という結果となる.
332この結果は,・・・・ということである.
333これは・・・の仕様を満たした動作といえる.
334ただし,・・・・という追加仕様を必要としている点に注意が必要である.
335
336課題xxxxについて述べる.
337xxxという入力ファイルを作り,動作例を示す.
338・・・・の様に実行する.
339これにより・・・という結果となる.
340この結果は,・・・・ということである.
341これは・・・の仕様を満たした動作といえる.
342ただし,・・・・という追加仕様を必要としている点に注意が必要である.
343
344% いくつかの注意点を再掲する.
345% - レポートとして読みやすくすることもよく考えること.
346% 適切な節(subsection)や項(subsubsection)の利用は,読みやすさを向上させる.
347% - Web資料では改行をこまめに入れることで読みやすくする習慣があるが,
348% 印刷を前提としたレポートでは,意味のない箇所で改行をしてはならない.
349% (意味のない改行は,LaTeXでは明示的に \\ を使わないと入れられない.)
350% - 適切な段落分け(LaTeXなら空行を入れる)は,話題を整理する意味がある.
351% 改行の件と合わせれば,意味のある個所で段落を分けるべき,ということである.
352% 全く段落を分けないで,レポートとしての長い文章を書くことは無い.
353
354%--------------------------------------------------------------------%
355\section{プログラム全体の考察} \label{xxxx} % ToDo: 適切なラベルを付けておく.
356% 以下の通り,少なくとも2つの節に分けて,各考察を述べる.
357
358概要で述べたように,本レポートでは・・・・について述べる.
359
360%--------------------------------------------------------------------%
361\subsection{考察1: xxxxxxx} \label{xxxx} % ToDo: 適切なラベルを付けておく.
362% 「感想」は,最後の感想の章以外に書いてはいけない.
363
364(※サンプルのため,いろいろと省略)
365
366(※以下,ソースコードを図表の様に掲載する場合の例)
367
368ここで,\ref{}のソースコードの 100--200 行目については,
369Listing~\ref{lst:program-8}の様に書くことも考えられる.
370この書き変えにより,・・・(※サンプルのため,いろいろと省略)
371
372\begin{eopcode}[tbp] % eopcode はプレアンブルで定義した独自の環境
373% Verbatim environment
374% - プリアンブルで \usepackage{fvextra} か \usepackage{fancyvrb} が必要.
375% - オプションの説明は,冒頭のCSVの挿入例を参照
376\begin{Verbatim}[frame=single,numbers=left, xleftmargin=10mm, numbersep=6pt,
377 gobble=8, fontsize=\small, baselinestretch=0.8]
378 char str = {'A', 'B', 'C', '\0'};
379 char c1 = 'B';
380\end{Verbatim}
381% Tips:上記のようにソースコードの一部をコピペすると,レポートではインデントが
382% 気になるときがある.例の様に,gobble オプションで取り除くのも手である.
383\caption{xxxxxのソースコードの例}
384\end{eopcode}
385
386
387%--------------------------------------------------------------------%
388\subsection{考察2: xxxxxxx} \label{xxxx} % ToDo: 適切なラベルを付けておく.
389% 「感想」は,最後の感想の章以外に書いてはいけない.
390
391(※サンプルのため,いろいろと省略)
392
393
394%--------------------------------------------------------------------%
395\section{感想}
396% 感想を書かないならコメントアウトしておくこと.
397% なお,感想に書かれた"感想と思われる内容"は,評価の対象外である.
398
399(※サンプルのため,いろいろと省略)
400
401%--------------------------------------------------------------------%
402\section{作成したプログラムのソースコード}
403 \textbf{\small ※執筆上の注意:余白にはみ出さないように注意.
404 ソースコードは,1行あたり80文字以内に収めるのが無難.
405 また,??章のような状態でレポートを提出しないように注意すること.
406 (この注意書きは提出用のレポートでは必ず消すか,コメントアウトすること)※}
407
408本レポートのために作成したプログラムを以下に添付する.
409なお,\ref{sec:abstract}章に示した課題については,
410\ref{xxxx}章で示したようにすべて正常に動作したことを付記しておく.
411
412% Verbatim environment
413% プリアンブルで \usepackage{fvextra} か \usepackage{fancyvrb} が必要.
414% - numbers 行番号を表示.left なら左に表示.
415% - xleftmargin 枠の左の余白.行番号表示用に余白を与えたい.
416% - numbersep 行番号と枠の間隙 (gap).デフォルトは 12 pt.
417% - fontsize フォントサイズ指定
418% - baselinestretch 行間の大きさを比率で指定.デフォルトは 1.0.
419\begin{Verbatim}[numbers=left, xleftmargin=8mm, numbersep=6pt,
420 fontsize=\small, baselinestretch=0.8]
421#include <stdio.h>
422
423int main()
424{
425 char s[4] = {'A', 'B', 'C', '\0'};
426 printf("s = %s\n", s);
427 return 0;
428}
429// 以下は,はみ出し文字数を確認するためのダミーコメントです.
430//00000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999
431\end{Verbatim}
432
433% 参考:
434% - 以下の様に Verbatim ではなく,VerbatimInput を利用すると,
435% 外部ファイル (例では subst_test.c) を,自動的に取り込むことができる.
436% - はみ出しが起こらないよう,ソースコードの1行あたりの文字数に注意しよう.
437% - PDF作成後に,正しいファイルを取り込んだか,よく確認すること.
438% 誤ったソースコードが記載されたレポートであったとしても,そのソースコードが,
439% 課題実施にあたって書かれたソースコードとみなして,成績評価される.
440% (最悪の場合,課題未達成とみなされる場合もあり得る.)
441%
442%\begin{VerbatimInput}[numbers=left, xleftmargin=10mm, numbersep=6pt,
443% fontsize=\small, baselinestretch=0.8]
444%{subst_test.c}
445%\end{VerbatimInput}
446
447%--------------------------------------------------------------------%
448% 参考文献
449% 以下は,書き方の例である.実際に,参考にした書籍等を見て書くこと.
450% 本文で引用する際は,\cite{book:algodata}などとすればよい.
451\begin{thebibliography}{99}
452 \bibitem{book:algodata} 平田富雄,アルゴリズムとデータ構造,森北出版,1990.
453 \bibitem{book:label2} 著者名,書名,出版社,発行年.
454 \bibitem{www:label3} WWWページタイトル,URL,アクセス日.
455\end{thebibliography}
456%以下の注意書きは提出レポートでは不要なため消すこと.
457\textbf{\small ※執筆上の注意:
458 これらは書き方の例である.実際に,参考にした書籍等を見て書くこと.
459 読んでもいない本や存在しないウェブページを掲載してはならない.\\}
460
461%--------------------------------------------------------------------%
462%% 本文はここより上に書く(\begin{document}~\end{document}が本文である)
463\end{document}