\documentclass{jsarticle}
\usepackage{amsmath}		%for \cfrac

\newcounter{練習}
\newenvironment{練習}{%
  \refstepcounter{練習}%
  \noindent%
  \textbf{練習~\thesection.\the練習}~}
  {}

% ref. http://d.hatena.ne.jp/mallowlabs/20061226/1167137637
\usepackage{ascmac}
\usepackage{here}
% \usepackage{txfonts}
\usepackage{listings, jlisting}
\renewcommand{\lstlistingname}{リスト}
\lstset{language=c,
  basicstyle=\ttfamily\scriptsize,
  commentstyle=\textit,
  classoffset=1,
  keywordstyle=\bfseries,
  frame=tRBl,
  framesep=5pt,
  showstringspaces=false,
  numbers=left,
  stepnumber=1,
  numberstyle=\tiny,
  tabsize=2
}

\title{情報科学入門〜Rubyを使って学ぶ〜の練習の解答}
\begin{document}
\maketitle
\section{数の計算と関数}

\begin{練習}[数式の計算]
\renewcommand{\labelenumi}{\alph{enumi})}
\begin{enumerate}
 \item
       Rubyの式: \verb#56+97+33#,
       結果: 186
 \item 
       Rubyの式: \verb#47-38#,
       結果: 9
 \item 
       Rubyの式: \verb#35*22#,
       結果: 770
 \item 
       Rubyの式: \verb#34/22#,
       結果: 1
 \item 
       Rubyの式: \verb#34%22#,
       結果: 12
 \item 
       Rubyの式: \verb#34.0/15.0# または \verb#34.to_f/15.to_f#,
       結果: 2.2666666666666666
 \item 
       Rubyの式: \verb#56**16#,
       結果: 9354238358105289311446368256
 \item 
       Rubyの式: \verb#56*56*56*56*56*56*56*56*56*56*56*56*56*56*56*56#,\\
       結果: 9354238358105289311446368256
 \item Rubyの式: \verb#104/(188.0/100)**2#,
       結果: 29.425079221367138
\end{enumerate}
\end{練習}

\begin{練習}[関数の定義]
\begin{lstlisting}[caption=distance]
irb(main):001:0> include(Math)
=> Object
irb(main):002:0>
irb(main):003:0* def distance(x,y,u,v)
irb(main):004:1>   sqrt((x-u)**2 + (y-v)**2)
irb(main):005:1> end
=> :distance
irb(main):006:0> distance(0,0,1,1)
=> 1.4142135623730951
irb(main):007:0> distance(1,2,2,4)
=> 2.23606797749979
\end{lstlisting}
\begin{lstlisting}[caption=feet\_to\_cm]
irb(main):001:0> def feet_to_cm(f,i)
irb(main):002:1>   f * 30.48 + i * 30.48 / 12
irb(main):003:1> end
=> :feet_to_cm
irb(main):004:0> feet_to_cm(0,1)
=> 2.54
irb(main):005:0> feet_to_cm(1,0)
=> 30.48
irb(main):006:0> feet_to_cm(1,3)
=> 38.1
\end{lstlisting}
\begin{lstlisting}[caption=pound\_to\_kg]
irb(main):001:0> def pound_to_kg(p,o)
irb(main):002:1>   p * 0.4536 + o * 0.4536 / 16
irb(main):003:1> end
=> :pound_to_kg
irb(main):004:0> pound_to_kg(0,1)
=> 0.02835
irb(main):005:0> pound_to_kg(1,0)
=> 0.4536
irb(main):006:0> pound_to_kg(1,1)
=> 0.48195
\end{lstlisting}
\end{練習}

\begin{練習}[ファイルからの読み込み]
\lstinputlisting[caption=distance.rb]{Chap01/distance.rb}
\begin{lstlisting}
def feet_to_cm(feet, inch)
  feet * 30.48 + inch * 30.48 / 12
end

def pound_to_kg(pound,ounce)
  pound * 0.4536 + ounce * 0.4536 / 16
end
\end{lstlisting}
\end{練習}

\begin{練習}[もっと数式の計算]
\renewcommand{\labelenumi}{\alph{enumi})}
\begin{enumerate}
 \item bmi.rbを読み込んで関数bmiで計算する．以下のセッションより，BMIは男で約21.25, 女で約20.96である．
\begin{lstlisting}[caption=BMIの計算]
irb(main):001:0> load("./bmi.rb")
=> true
irb(main):002:0> bmi(171.5,62.5)
=> 21.249649380785215
irb(main):003:0> bmi(159.0,53.0)
=> 20.964360587002094
\end{lstlisting}
 \item 次のセッションから71.6度．
\begin{lstlisting}[caption=セ氏22度を華氏温度に変換した値を求めるセッション]
irb(main):001:0> 9.0/5*22+32
=> 71.6
 \end{lstlisting}
 \item $F=\cfrac{9}{5}C+32$を$C$について解くと，$C=\cfrac{5}{9}(F-32)$である．したがって，次のセッションから10.0度。
\begin{lstlisting}[caption=華氏50度をセ氏温度に変換した値を求めるセッション]
irb(main):001:0> 5.0/9*(50-32)
=> 10.0
\end{lstlisting}
 \item 次のセッションから約5705米ドル．
\begin{lstlisting}[caption=米ドル換算値を求めるセッション]
irb(main):001:0> 535_800 / 93.91
=> 5705.462677031201
\end{lstlisting}
 \item 次のセッションから1,211,439円．
\begin{lstlisting}[caption=円換算値を求めるセッション]
irb(main):001:0> 12_900 * 93.91
=> 1211439.0
\end{lstlisting}
 \item まず米ドル換算を求めて円換算を求める．次のセッションから約151円．
\begin{lstlisting}[caption=円換算値を求めるセッション]
irb(main):001:0> 11 / 6.825 * 93.91
=> 151.35677655677657
\end{lstlisting}
 \item 次のセッションから281,575毎秒メートル．
\begin{lstlisting}[caption=メートル換算値を求めるセッション]
irb(main):001:0> 175*1609
=> 281575
\end{lstlisting}
 \item 次のセッションから約494万円．
\begin{lstlisting}[caption=額を求めるセッション]
irb(main):001:0> 5_459_356 * ((100 + 1.40) / 100)**10 / 1.27
=> 4939889.612496997
\end{lstlisting}
\end{enumerate}
\end{練習}
\begin{練習}[数学関数]
命令\verb#include(Math)#を実行した後に以下の式を計算したものとする．
\renewcommand{\labelenumi}{\alph{enumi})}
\begin{enumerate}
 \item $\sqrt[12]{2}$は$2$の$1/12$乗で計算する．\\
       Rubyの式: \verb#sqrt(10)#, \verb#sqrt(2)*sqrt(5)#, \verb#sqrt(sqrt(5))#, \verb#2**(1/12.0)#,\\
       結果: 3.1622776601683795, 3.1622776601683795, 1.4953487812212205, 1.0594630943592953
 \item 
       Rubyの式: \verb|sin(PI/6)|, \verb|cos(PI/6)|, \verb|tan(PI/6)|,\\
       結果: 0.49999999999999994, 0.8660254037844387, 0.5773502691896257
 \item 
       $\log_a b = \log b / \log a$であることを利用する．\\
       Rubyの式: \verb|log(1000)|, \verb|log(100)/log(100)|, \verb|log(100)/log(2)|,\\
       結果: 6.907755278982137, 1.0, 6.643856189774725
 \item 
       Rubyの式: \verb|2.7*2.7*2.7*2.7*2.7*2.7*2.7*2.7*2.7*2.7|,\\
       結果: 20589.113209464915
 \item 半減期が$x$秒後だとすると，$(1-0.0000320362394891)^x=0.5$が成り立つ．$x$について解くと，$x=\log 0.5/\log(1-0.0000320362394891)$である．したがって半減期は約6時間である．
       Rubyの式: \verb|log(0.5) / log(1-0.0000320362394891)|,\\
       結果: 21635.999999993015
\end{enumerate}
\end{練習}
\begin{練習}[変数の利用]
\renewcommand{\labelenumi}{\alph{enumi})}
 \begin{enumerate}
  \item \verb|weight / (height / 100.0) ** 2|
  \item \verb|9.0/5*c+32|
  \item \verb|5.0/9*(f-32)|
  \item \verb|jpy / usdjpy|
  \item \verb|usd * usdjpy|
  \item \verb|cny / usdcny * usdjpy|
  \item \verb|meter * 1609|
  \item \verb|zandaka * ((100 + riritsu) / 100) ** nen / jinko|
 \end{enumerate}
\end{練習}
\begin{練習}[代入]
\renewcommand{\labelenumi}{\alph{enumi})}
 \begin{enumerate}
  \item 以下の通り．最後は展開した場合である．
\begin{lstlisting}[caption=代入を用いて式の値を求めるセッション]
irb(main):001:0> x = 10
=> 10
irb(main):002:0> y = x * (x-3)
=> 70
irb(main):003:0> z = y * (y-3)
=> 4690
irb(main):004:0> z*(z-3)
=> 21982030
irb(main):005:0> ((10*(10-3)) * ((10*(10-3)) - 3)) * (((10*(10-3)) * ((10*(10-3)) - 3)) - 3)
=> 21982030
\end{lstlisting}
  \item 以下の通り．
\begin{lstlisting}[caption=代入を用いて式の値を求めるセッション]
irb(main):001:0> a = 3
=> 3
irb(main):002:0> b = 5
=> 5
irb(main):003:0> c = -7
=> -7
irb(main):004:0> d = b ** 2 - 4 * a * c
=> 109
irb(main):005:0> p = (- b + Math.sqrt(d)) / (2 * a)
=> 0.9067177514850918
irb(main):006:0> q = (- b - Math.sqrt(d)) / (2 * a)
=> -2.5733844181517584
irb(main):007:0> a * p**2 + b * p + c
=> 1.7763568394002505e-15
irb(main):008:0> a * q**2 + b * q + c
=> 0.0
\end{lstlisting}
  \item 以下の通り．
\begin{lstlisting}
irb(main):001:0> h = 5 * 30.48 + 9.4 * 30.48 / 12
=> 176.276
irb(main):002:0> w = 194.7 * 0.4536
=> 88.31591999999999
irb(main):003:0> w / (h / 100.0) ** 2
=> 28.42186833623307
irb(main):004:0> h = 5 * 30.48 + 4 * 30.48 / 12
=> 162.56
irb(main):005:0> w = 164.7 * 0.4536
=> 74.70792
irb(main):006:0> w / (h / 100.0) ** 2
=> 28.270875877689257
\end{lstlisting}
 \end{enumerate}
\end{練習}
以下略．

\section{配列による画像の表示}
省略．

\section{条件分岐と繰り返し}
\setcounter{練習}{9}
\begin{練習}[いろいろな図形$^*$]
\lstinputlisting[caption=図形を作成する関数]{Chap03/ex0310.rb}
\end{練習}

\end{document}