《情報基礎論演習》 第3回
【関数・スコープ その1】

注意: 大域変数は使用しないこと

------------------------------------------------------------------
▼ Basic 1 (宿題となっていたもの)
繰り返しを使って 1, 2, ..., n の 2 乗和 1^2 + 2^2 + ... + n^2 を計算し
なさい.ただし,n の値は、scanf() で入力し、n = 10 の場合を提出すること.
2 乗和を求める部分は関数にし、引数 n を与えると 1^2 + 2^2 + ... + n^2 
を戻り値として返すようにしなさい。
------------------------------------------------------------------
▼ Basic 2
上記 Basic 1 のプログラムを次のように改変しなさい。

main()においては、
・負の値が入力されるまで、入力された値 n に対し,1^2 + 2^2 + ... + n^2 を
 計算するようループを形成する

関数においては、
・最後に呼ばれた際の引数と戻り値を記憶しておく(static 宣言を利用する)
・新たに呼び出されたとき、直前の呼び出しと引数の値が同じ場合、計算をせずに記憶
 しておいた値を戻り値とする
------------------------------------------------------------------
▼ Basic 3
第1回 Basic5 の演習で定義した3次元ベクトルの構造体を用い、2つのベクト
ルのなす角度φを求めなさい。
その際、構造体を引数としてベクトルの大きさを求める関数内積を求める関数
をそれぞれ作成し用いなさい。

cos(φ)は、cos(φ)=内積(A,B)/(べクトルの大きさ(A)*ベクトルの大きさ(B))
で計算でき、この値のアークコサインをとるこによりφを求めることができる。
標準数学関数のアークコサイン関数acos()は、ラジアンで値を返してくるので、
ラジアンを度(degree)に変換する関数を作成し、求める角度φを度(degree)で出力しなさい。

πの値は、math.hでマクロ定義されている M_PI を使うことができる。
------------------------------------------------------------------
▼ Basic 4(第2回 Advanced)
第2回(前回)の ▽ Advanced を完成していない人は、もう一度
チャレンジしましょう。

次の式を満たすa,b,cの組を1組求めなさい。ただし、a,b,cは正の整数、n=2とする。
a^n + b^n = c^n
解が存在することを前提として無限ループをつくっても構わない。
なお、a と b は可換なので、b <= a としても一般性は失わない。また、c は a+bを越
えることはない。