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