% ファイル先頭から\begin{document}までの内容（プレアンブル）については，
% 基本的に { } の中を書き換えるだけでよい．
\documentclass[autodetect-engine,dvi=dvipdfmx,ja=standard,
               a4j,11pt]{bxjsarticle}

%%======== プレアンブル ============================================%%
% 用紙設定：指示があれば，適切な余白に設定しなおす
\RequirePackage{geometry}
\geometry{reset,paperwidth=210truemm,paperheight=297truemm}
\geometry{hmargin=25truemm,top=20truemm,bottom=25truemm,footskip=10truemm,headheight=0mm}
%\geometry{showframe} % 本文の"枠"を確認したければ，コメントアウト

% 設定：図の挿入
% http://www.edu.cs.okayama-u.ac.jp/info/tool_guide/tex.html#latex_figure
\usepackage{graphicx}

% 設定：ソースコードの挿入
% http://www.edu.cs.okayama-u.ac.jp/info/tool_guide/tex.html#latex_fvextra
\usepackage{fvextra}
\renewcommand{\theFancyVerbLine}{\texttt{\footnotesize{\arabic{FancyVerbLine}:}}}
\fvset{breaklines=true, breakanywhere=true}  % fvextraが必要．fancyvrbではエラーになる．

% 設定：ソースコードをfloat扱いするための環境の定義
%       図1, 図2, ... のように，Listing 1, Listing 2, ... とすることができる．
\usepackage{newfloat}
\DeclareFloatingEnvironment[name=Listing, fileext=lol]{eopcode}

%%======== レポートタイトル等 ======================================%%
% ToDo: 提出要領に従って，適切なタイトル・サブタイトルを設定する
\title{プログラミング演習1 レポートB\\         % タイトル
       |\Large{適切なサブタイトルを付ける}|}   % サブタイトル

% ToDo: 自分自身の氏名と学生番号に書き換える
\author{氏名: 原 直 (HARA, Sunao) \\
        学生番号: 0941xxxx}

% ToDo: レポート課題等の指示に従って適切に書き換える
\date{出題日: 20xx年xx月xx日 \\
      提出日: 20xx年xx月xx日 \\
      締切日: 20xx年xx月xx日 \\}  % 注：最後の\\は不要に見えるが必要．


%%======== 本文 ====================================================%%
\begin{document}
\maketitle
% 目次つきの表紙ページにする場合はコメントを外す
%{\footnotesize \tableofcontents \newpage}

%% 本文は以下に書く．課題に応じて適切な章立てを構成すること．
%% 章＝\section，節＝\subsection，項＝\subsubsection である．

    \textbf{\small※執筆上の注意：本書は空想上の課題に対するレポートの
    執筆例である．章の構成と書くべき内容の参考として提示するもの
    であるため，課題内容やプログラムの仕様などは，
    実際の演習課題の指示に従って適切にまとめ直す必要がある．
    文や文の一部を「・・・」や「??」によって省略している箇所があるが，
    これに穴埋めをするだけで，レポートが完成するわけではない．
    なお，サンプルと同じ書き出しで文章を書く必要もない．
    （この注意書きは提出用のレポートでは必ず消すか，コメントアウトすること）※}

%--------------------------------------------------------------------%
\section{概要} \label{sec:abstract}
    \textbf{\small※執筆上の注意：
    演習課題説明書を読み，本レポートとして実施した課題が分かるように書く．
    （この注意書きは提出用のレポートでは必ず消すか，コメントアウトすること）※}

% 繰り返す．以下は，架空の課題である．
本演習では，名簿管理機能を有するプログラムを，C言語で作成する．
このプログラムは，標準入力から「ID, 氏名, 誕生日, 住所, 備考」からなる
コンマ区切り形式（CSV形式）の名簿データを受け付けて，
それらをメモリ中に登録する機能を持つ．
ただし，\%で始まる入力行はコマンド入力と解釈し，
登録してあるデータを表示したり整列したりする機能も持つ．

本レポートでは，演習中に取り組んだ課題として，
以下の課題??から課題??についての内容を報告する．

\begin{description}
  \item[課題4] ・・・
  \item[課題5] ・・・
  %本文の記述と矛盾しないように注意すること．
  %・・・は「サンプルのため省略」の意味で書いている．各自で適切に書き直すこと．
\end{description}

% 以下は，レポートB以降で必須の考察についての書き方の例．
また，考察課題として，以下の観点での考察をおこない，\ref{}章にまとめた．

\begin{description}
  \item[考察1] xxxxxxx （\ref{}節）
  \item[考察2] xxxxxxx （\ref{}節）
  %本文の記述と矛盾しないように注意すること．
\end{description}


%--------------------------------------------------------------------%
\section{プログラムの作成方針} \label{sec:plan-of-programming}
    \textbf{\small※執筆上の注意：課題の理解を深めるため，課題説明書を見ながら
    書き写そう．コピペは非推奨．なお，追加仕様も，書いているほうが望ましいが，
    レポートの要件として必須とはしない．追加仕様を書く場合は，次節以降の説明や
    考察などを通して，その追加仕様の意義を説明するとより良い．
    （この注意書きは提出用のレポートでは必ず消すか，コメントアウトすること）※}

本演習で作成したプログラムが満たすべき要件と仕様として，
「(1) 基本要件」と「(2) 基本仕様」を示す．
% 追加仕様も書くなら，書き変えを忘れずに

\subsection*{(1) 基本要件}
% ...ction* と，アスタリスクを入れている点に注意．数字無しの節や項目が作られる．

\begin{enumerate}
  \item プログラムは，その実行中，・・・
  \item 名簿データは，・・・・
  \item プログラムとしての動作や名簿データの管理のために，・・・
  \begin{enumerate}
    \item プログラムの正常な終了
    \item 登録された・・・
    % サンプルのため省略．
    % レポートBでは，レポートBの時点で必要な機能だけ書いてあればよい
  \end{enumerate}
  \item 標準入力からのユーザ入力を通して，，，      % サンプルのため省略
\end{enumerate}
% Tips: enumerateの行間を調整するなら，以下の様に調整用のコマンドを入れる．
% \begin{enumerate}
%   \setlength{\parskip}{0em} \setlength{\itemsep}{0.25em}   % <--
%   \item ...
%   \item

\subsection*{(2) 基本仕様}

\begin{enumerate}
  \item 名簿データは，コンマ区切りの文字列（\textbf{CSV入力}と呼ぶ）で表されるものとし，%
        Listing~\ref{lst:csvdata}に示したようなテキストデータを処理できるようにする．%
        %CSV入力の詳細は，\ref{sec:sepc_csv}節に示す．  % <-- この1文は，レポートでは不要
  \item コマンドは，\%で始まる文字列（\textbf{コマンド入力}と呼ぶ）とし，表\ref{tab:commands}にあげたコマンドをすべて実装する
  \item 1つの名簿データは，C言語の構造体 (\texttt{struct}) を用いて，・・・   % サンプルのため省略
  % サンプルのため省略．仕様書の footnote は書かなくてよい．
\end{enumerate}

% 追加仕様も書くなら，書き変えを忘れずに
%\subsubsection*{(3) 追加仕様}
% \begin{enumerate}
%   \item 
% \end{enumerate}

%========================= EXAMPLE CSV ================================%
\begin{eopcode}[b]
\centering % この1行はbegin～endの中を中央寄せにする，というコマンド
% Verbatim environment
% プリアンブルで \usepackage{fvextra} か \usepackage{fancyvrb} が必要．
%   - frame         枠の設定．single 四角で囲う．none 囲わない．
%   - xleftmargin   枠の左の余白．行番号表示用の余白も考慮が必要．
%   - xrightmargin  枠の右の余白
%   - numbersep     行番号と枠の間隙 (gap)．デフォルトは 12 pt．
%   - gobble        先頭n文字を無視．インデントを無視したい場合に利用する．
%   - fontsize      フォントサイズ指定．\normalsize, \small, ...
%   - numbers       行番号を表示．none 非表示．left 左に表示．
%   - firstnumber   最初の行番号を指定．途中の行番号から指定したいなら数字を入れる．
\begin{Verbatim}[frame=single, xleftmargin=3mm, xrightmargin=3mm, numbersep=6pt,
                gobble=0, fontsize=\small, numbers=left, firstnumber=1]
5100046,The Bridge,1845-11-2,14 Seafield Road Longman Inverness,SEN Unit 2.0 Open
5100127,Bower Primary School,1908-1-19,Bowermadden Bower Caithness,01955 641225 ...
5100224,Canisbay Primary School,1928-7-5,Canisbay Wick,01955 611337 Primary 56 3...
5100321,Castletown Primary School,1913-11-4,Castletown Thurso,01847 821256 01847...
\end{Verbatim}
  \caption{名簿データのCSV入力形式の例．1行におさまらないデータは...で省略した．}
  \label{lst:csvdata}
\end{eopcode}
%========================= EXAMPLE CSV ================================%
  
%========================= COMMAND LIST ================================%
\begin{table}[t]  %表の位置は原則として t または b．h や H は使わない．
\centering % この1行はbegin～endの中を中央寄せにする，というコマンド
  \caption{実装するコマンド}
  \label{tab:commands}
  \begin{tabular}{|l|ll|l|}
  \hline
    \textbf{コマンド} & \textbf{意味} &        & \textbf{備考} \\
  \hline\hline
    \verb|%Q|   & 終了                & (Quit)  & \\
  \hline
    \verb|%P n| & 先頭から$n$件表示   & (Print) & $n$が$0$ $\to$ 全件表示，        \\
                &                     &         & $n$が負 $\to$ 後ろから$-n$件表示 \\
  \hline
    *****       &（サンプルのため     & 省略）    & \\
  \hline
  \end{tabular}
\end{table}
%========================= COMMAND LIST ================================%
  
% 以下の2行は提出用のレポートでは必ず消すこと
\textbf{\small※執筆上の注意：繰り返すが，本書は空想上の課題に対するレポートの
    執筆例である．書くべき内容としては，課題書等を読んだうえで適切に執筆すること．
    （この注意書きは提出用のレポートでは必ず消すか，コメントアウトすること）※}

%--------------------------------------------------------------------%
\section{プログラムの説明} \label{xxxx}   % ToDo: 適切なラベルを付けておく．
% およそ，以下のような内容が記載されていることが期待されている．
% - プログラムの全体像の説明
% - 課題4に関するプログラムの説明（3.1節）
% - 課題5に関するプログラムの説明（3.2節）
% - 課題6に関するプログラムの説明（3.3節）
% - 課題7に関するプログラムの説明（3.4節）
% LaTeXの機能(subsection, subsubsection, 他)を活用し，レポートとしての構成を考えること．
% \verv, $ $, \textttなど，適切な書体を利用することも忘れずに．
%   Tips:
%   - section, subsectionなどの中では verbが使えない．texttt を使うとよい．


本課題で作成するプログラムは，・・・をするプログラムである．
プログラムリストは・・・節に添付している．

プログラムは全部で267行からなる．
課題4「テーマ名を書く」に関する機能は，主に10--100行目に記載されている．
課題5「テーマ名を書く」に関する機能は，主に10--20, ならびに，101-200行目に記載されている．
課題6・・・

以下，課題4, 5, 6, 7のプログラムの詳細な説明を，
それぞれ\ref{}節，\ref{}節，\ref{}節，\ref{}節に分けて，記載する．

\subsection{????}   % 適切な見出しを考えること．空欄にして，数字のみ示すのもダメ．

ｙｙｙｙ，ｚｚｚｚという関数を作成した．
ｙｙｙｙは，ｘｘｘｘｘのための関数である．
ｚｚｚｚは，ｙｙｙｙを利用しながらｘｘｘｘのための関数である．
aaaa, bbbb, cccc 関数は，eeeee 関数から呼び出される関数である．

ｙｙｙｙの詳細について説明する．
ｙｙｙｙは，・・・

ｚｚｚｚの詳細について説明する．
ｚｚｚｚは，・・・

aaa, bbbb, cccc, は，それぞれ，AAAA, BBBB, CCC のための関数である．
これは，\ref{}章の仕様で述べた機能を将来的に実装するために用意している．
ただし，今回のレポートBでは未実装である．

\subsection{????}   % 適切な見出しを考えること．空欄にして，数字のみ示すのもダメ．

（※サンプルのため，いろいろと省略）

%--------------------------------------------------------------------%
\section{プログラムの使用方法と実行結果} \label{xxxx}   % ToDo: 適切なラベルを付けておく．
\textbf{\small ※執筆上の注意：変数や数値は$\backslash$verbや\$\$
で囲って，適切な書体で記述することを忘れずに．また，章・節番号や
図表番号の引用も，数字を直接書くのではなく，\LaTeX{} の機能を使うこと．
なお，このサンプルでは``わざと''一部の処理を省略している．
見た目の違いを確認して，自分のレポートでは処理を忘れないようにしよう．
（この注意書きは提出用のレポートでは必ず消すか，コメントアウトすること）※}

% およそ，以下の内容が記載されていることが期待されている．
% - gccによるコンパイルとプログラムの実行方法（レポートAの2章の一部相当）
% - 課題4に関する，使用方法，実行結果（入力と出力がわかるように），結果に対する妥当性
% - 課題5に関する，使用方法，実行結果（入力と出力がわかるように），結果に対する妥当性
% - 課題6に関する，使用方法，実行結果（入力と出力がわかるように），結果に対する妥当性
% - 課題7に関する，使用方法，実行結果（入力と出力がわかるように），結果に対する妥当性
% LaTeXの機能(subsection, subsubsection, 他)を活用し，レポートとしての構成を考えること．
% \verv, $ $, \textttなど，適切な書体を利用することも忘れずに．
%   Tips:
%   - section, subsectionなどの中では verbが使えない．texttt を使うとよい．

本レポート課題の実施にあたって，Linux環境におけるC言語プログラミングをおこなう．
まずは，・・・についてまとめる．

以降のプログラムは，いずれも Red Hat Linux 3.2.2-5 で動作を確認しているが，
一般的な UNIX で動作することを意図して作成している．
なお，以降の実行例における，行頭の \verb|$| 記号は，
Red Hat Linux 3.2.2-5におけるターミナルのプロンプトである．
% 注：以降の課題において，実行結果を得るために利用した，実行環境のOS，
%     ならびに，その環境におけるプロンプトを必ず書くこと．

C言語で書かれたソースコードは，\verb|gcc|でコンパイルすることで，
プログラムの実行ファイルを生成する．
今回作成したプログラムのソースコードは，\verb|xxxx.c|という名前で作成している．
このソースコードは，

% Verbatim environment
% - プリアンブルで \usepackage{fvextra} か \usepackage{fancyvrb} が必要．
% - オプションの説明は，冒頭のCSVの挿入例を参照
\begin{Verbatim}[numbers=none, xleftmargin=8mm, numbersep=6pt,
  fontsize=\normalsize, baselinestretch=0.8]
$ gcc -Wall ・・・
\end{Verbatim}
%
のようにコンパイルする．
この時，生成されるプログラムの実行ファイルは・・・という名前になる．

% Tips: Verbatim の後に空行を入れると，段落が変わってしまう．
% 段落は変えたくないが，texソースでは隙間を空けて読みやすくしたいなら，
% 上記例のように，%のみの行を置くとよい．

ここで，\verb|-Wall|とは．．．するためのオプションであり，
\verb|-o|とは・・・を指定するオプションである．
これらのオプションをつけることで，・・・（略）

生成されたプログラム \verb|xxxxx| を実行するには，以下のようにターミナルで入力する．

% Verbatim environment
% - プリアンブルで \usepackage{fvextra} か \usepackage{fancyvrb} が必要．
% - オプションの説明は，冒頭のCSVの挿入例を参照
\begin{Verbatim}[numbers=none, xleftmargin=8mm, numbersep=6pt,
  fontsize=\normalsize, baselinestretch=0.8]
$ xxxxx
\end{Verbatim}

% 上記は，ダメな説明の例である．正しく動かすことができるよう，書き直すこと．
%
% ！もう一歩上へ！
% 何が問題か理解しているならば，その旨をレポートに書くこともできよう．
% 例えば，上記の実行例の後に，「ここで，ｘｘｘとしている点に注意が必要である．
% ｘｘｘとすると，ｘｘｘになってしまう．そのため，ｘｘｘが必要なのである．」
% といったことが書けると，レポートらしくなる．講義中に感じたちょっとした疑問は，
% レポートを書くために，重要な気づきを与えてくれる．ただし，その疑問が「ｘｘｘは
% 不思議だと思った．」で止まってしまうと，レポートではなく感想文になってしまう．
% 「感想」は，最後の感想の章以外に書いてはいけない．

以下，各課題に応じて・・・（※サンプルのため，いろいろと省略）

% 以下は書くべき内容の流れをざっくり書いているだけで，穴埋めしろという意味ではない．
% 主体をもってレポートを書いてほしい．
課題ｘｘｘｘについて述べる．
ｘｘｘというファイルを作る．
・・・・の様に実行する．
これにより・・・という結果となる．
この結果は，・・・・ということである．
これは・・・の仕様を満たした動作といえる．
ただし，・・・・という追加仕様を必要としている点に注意が必要である．

課題ｘｘｘｘについて述べる．
ｘｘｘという入力により，動作例を示す．
・・・・の様に実行する．
これにより・・・という結果となる．
この結果は，・・・・ということである．
これは・・・の仕様を満たした動作といえる．
ただし，・・・・という追加仕様を必要としている点に注意が必要である．

課題ｘｘｘｘについて述べる．
ｘｘｘという入力ファイルを作り，動作例を示す．
・・・・の様に実行する．
これにより・・・という結果となる．
この結果は，・・・・ということである．
これは・・・の仕様を満たした動作といえる．
ただし，・・・・という追加仕様を必要としている点に注意が必要である．

% いくつかの注意点を再掲する．
% - レポートとして読みやすくすることもよく考えること．
%   適切な節(subsection)や項(subsubsection)の利用は，読みやすさを向上させる．
% - Web資料では改行をこまめに入れることで読みやすくする習慣があるが，
%   印刷を前提としたレポートでは，意味のない箇所で改行をしてはならない．
%   （意味のない改行は，LaTeXでは明示的に \\ を使わないと入れられない．）
% - 適切な段落分け（LaTeXなら空行を入れる）は，話題を整理する意味がある．
%   改行の件と合わせれば，意味のある個所で段落を分けるべき，ということである．
%   全く段落を分けないで，レポートとしての長い文章を書くことは無い．

%--------------------------------------------------------------------%
\section{プログラム全体の考察} \label{xxxx}   % ToDo: 適切なラベルを付けておく．
% 以下の通り，少なくとも2つの節に分けて，各考察を述べる．

概要で述べたように，本レポートでは・・・・について述べる．

%--------------------------------------------------------------------%
\subsection{考察1: xxxxxxx} \label{xxxx}   % ToDo: 適切なラベルを付けておく．
% 「感想」は，最後の感想の章以外に書いてはいけない．

（※サンプルのため，いろいろと省略）

（※以下，ソースコードを図表の様に掲載する場合の例）

ここで，\ref{}のソースコードの 100--200 行目については，
Listing~\ref{lst:program-8}の様に書くことも考えられる．
この書き変えにより，・・・（※サンプルのため，いろいろと省略）

\begin{eopcode}[tbp] % eopcode はプレアンブルで定義した独自の環境
% Verbatim environment
% - プリアンブルで \usepackage{fvextra} か \usepackage{fancyvrb} が必要．
% - オプションの説明は，冒頭のCSVの挿入例を参照
\begin{Verbatim}[frame=single,numbers=left, xleftmargin=10mm, numbersep=6pt,
    gobble=8, fontsize=\small, baselinestretch=0.8]
        char str = {'A', 'B', 'C', '\0'};
        char c1 = 'B';
\end{Verbatim}
% Tips:上記のようにソースコードの一部をコピペすると，レポートではインデントが
% 気になるときがある．例の様に，gobble オプションで取り除くのも手である．
\caption{xxxxxのソースコードの例}
\end{eopcode}
  

%--------------------------------------------------------------------%
\subsection{考察2: xxxxxxx} \label{xxxx}   % ToDo: 適切なラベルを付けておく．
% 「感想」は，最後の感想の章以外に書いてはいけない．

（※サンプルのため，いろいろと省略）


%--------------------------------------------------------------------%
\section{感想}
% 感想を書かないならコメントアウトしておくこと．
% なお，感想に書かれた"感想と思われる内容"は，評価の対象外である．

（※サンプルのため，いろいろと省略）

%--------------------------------------------------------------------%
\section{作成したプログラムのソースコード}
    \textbf{\small ※執筆上の注意：余白にはみ出さないように注意．
    ソースコードは，1行あたり80文字以内に収めるのが無難．
    また，??章のような状態でレポートを提出しないように注意すること．
    （この注意書きは提出用のレポートでは必ず消すか，コメントアウトすること）※}

本レポートのために作成したプログラムを以下に添付する．
なお，\ref{sec:abstract}章に示した課題については，
\ref{xxxx}章で示したようにすべて正常に動作したことを付記しておく．

% Verbatim environment
% プリアンブルで \usepackage{fvextra} か \usepackage{fancyvrb} が必要．
%   - numbers           行番号を表示．left なら左に表示．
%   - xleftmargin       枠の左の余白．行番号表示用に余白を与えたい．
%   - numbersep         行番号と枠の間隙 (gap)．デフォルトは 12 pt．
%   - fontsize          フォントサイズ指定
%   - baselinestretch   行間の大きさを比率で指定．デフォルトは 1.0．
\begin{Verbatim}[numbers=left, xleftmargin=8mm, numbersep=6pt,
  fontsize=\small, baselinestretch=0.8]
#include <stdio.h>

int main()
{
    char s[4] = {'A', 'B', 'C', '\0'};
    printf("s = %s\n", s);
    return 0;
}
// 以下は，はみ出し文字数を確認するためのダミーコメントです．
//00000000111111111122222222223333333333444444444455555555556666666666777777777788888888889999999999
\end{Verbatim}

% 参考:
% - 以下の様に Verbatim ではなく，VerbatimInput を利用すると，
%   外部ファイル (例では subst_test.c) を，自動的に取り込むことができる．
% - はみ出しが起こらないよう，ソースコードの1行あたりの文字数に注意しよう．
% - PDF作成後に，正しいファイルを取り込んだか，よく確認すること．
%   誤ったソースコードが記載されたレポートであったとしても，そのソースコードが，
%   課題実施にあたって書かれたソースコードとみなして，成績評価される．
%   （最悪の場合，課題未達成とみなされる場合もあり得る．）
%
%\begin{VerbatimInput}[numbers=left, xleftmargin=10mm, numbersep=6pt,
%  fontsize=\small, baselinestretch=0.8]
%{subst_test.c}
%\end{VerbatimInput}

%--------------------------------------------------------------------%
% 参考文献
%   以下は，書き方の例である．実際に，参考にした書籍等を見て書くこと．
%   本文で引用する際は，\cite{book:algodata}などとすればよい．
\begin{thebibliography}{99}
  \bibitem{book:algodata} 平田富雄，アルゴリズムとデータ構造，森北出版，1990.
  \bibitem{book:label2} 著者名，書名，出版社，発行年.
  \bibitem{www:label3} WWWページタイトル，URL，アクセス日.
\end{thebibliography}
%以下の注意書きは提出レポートでは不要なため消すこと．
\textbf{\small ※執筆上の注意：
      これらは書き方の例である．実際に，参考にした書籍等を見て書くこと．
      読んでもいない本や存在しないウェブページを掲載してはならない．\\}

%--------------------------------------------------------------------%
%% 本文はここより上に書く（\begin{document}～\end{document}が本文である）
\end{document}
