概要
本記事は電気通信大学1年次後学期で開講されている「基礎プログラミングおよび演習」のために用意した問題集である.ここに用意されている問題がおおかた解ければ,単位を取ることもそう難しくないことだろう.以下に2019年度の講義資料が公開されている.joho.g-edu.uec.ac.jp
注意事項
- 本記事の問題は外部サイトなどを参照しながら解くことも考慮に入れて,例年の試験より難しめに作成した問題も含まれている.
- 2019年度の「基礎プログラミングおよび演習」期末試験では,試験中のコードの実行,外部サイトの参照は禁じられている.本記事では「実行せよ」「メソッドを作成せよ」などの指示があるが,実際の試験にはこれらの形式の問題は出題されないことに注意せよ.
- 本記事によって読者の被った落単などの損害については,一切の責任を負いかねる.
問題
Ruby
問題1
関数を次のように定義する.
また,の値を計算するメソッド
def f(a,b) Rational(1335,4)*b*b*b*b*b*b+a*a*(11*a*a*b*b-b*b*b*b*b*b-121*b*b*b*b-2) + Rational(11,2)*b*b*b*b*b*b*b*b + a/(2*b) end
このメソッドに以下の3種類の引数の組を与えて実行し,返値の真の値に最も近いのはどれか.
問題2
をそれぞれグレゴリオ暦におけるある日の年,月,日を表す整数とする.例えば,
は2020年1月21日に相当する.
の値を与えるとその日の曜日を文字列 (
から曜日を求める公式としてツェラーの公式を用いてもよい.
ja.wikipedia.org
問題3
以下の問いに答えよ.問題2で作成した
- 1970年1月1日から1970年1月31日までのうち,それぞれの曜日に属する日は何日ずつあるか.
- 20世紀には合わせて100日間の「1月1日」があるが,このうち日曜日は何日あるか.
- 20世紀のすべての「2月」に属する日のうち,日曜日は何日あるか.
問題6
を
個の整数要素からなる配列とする.ユークリッドの互除法によって,
個の整数
の最小公倍数を返すメソッドを以下の2種類の方針によってそれぞれ作成せよ.
問題7
を
個の浮動小数点数要素からなる配列とし,その (0-indexedにおける)
番目の要素を
と表す.実数
を引数とする次のような関数
を考える.
の導関数
に対し,配列
を
個の浮動小数点数要素からなる,次の等式を満たす配列とする.
配列に対応する配列
の値を計算するメソッド
df(A) はメソッド内で配列とは別に新たに配列
を作成し,それを返す.配列
に対して破壊的変更を行わない.
df(A) はメソッド内で配列に破壊的変更を加え,配列
の内容に置き換える.配列
を格納するための新たな領域を確保しない.
問題8
を奇数とする.
を
個の整数要素からなる配列とする.以下の2種類の設定の下,
の中央値を返すメソッド
- 配列
は昇順に整列済みである.
- 配列
は整列済みとは限らない.
ただし,メソッド内での以下の操作は禁じる.
- メソッド内で配列
に対し破壊的変更を加えること.
の要素数
に対し
の領域を新たに確保すること.
問題9
を
個の整数要素からなる配列とする.また,
は昇順に整列済みであるとする.
の要素を並べ替えてできる長さ
の順列をすべて出力するメソッド
また,の要素を並べ替えてできる互いに相異なる順列の数を返すメソッド
ja.wikipedia.org
問題10
行列
が2次元配列
として与えられる.すなわち,行列
の
成分が
に等しい
.
と要素数
を与えると,
の性質によって次のような値を返すメソッド
が対角行列であるとき
tri(A, n) = 3. が対角行列でなく,上三角行列であるとき
tri(A, n) = 2. が対角行列でなく,下三角行列であるとき
tri(A, n) = 1. が上三角行列でも下三角行列でもないとき
tri(A, n) = 0.
問題11
直交座標平面上の点を表すレコード型を作成せよ.また,作成した型の4個のレコードを引数にとり,4点
について,点
が三角形
の内部にあれば
のうちどの3点も一直線上にないとする.
問題12
問題11の直交座標平面上の点を表すレコード型をクラスとして再度定義せよ (レコードにおけるフィールドではなく,クラスにおけるインスタンス変数と
また,このクラスのスーパークラス
問題13
単連結リストのセルを表すレコード型 (すなわち,セルの値と次のセルへの参照をフィールドとして保持するレコード型) を定義せよ.
問題14
問題13で定義したセルへの参照を引数として,そのセルを単連結リストの先頭とみなし,その単連結リストのすべての要素の平均値を返すメソッドを作成せよ.
問題15
問題13で定義したセルへの参照を引数として,そのセルを単連結リストの先頭とみなし,その単連結リストの「 (0-indexedにおける) 偶数番目の要素の和」と「 (0-indexedにおける) 奇数番目の要素の和」の差を返すメソッドを,次の2種類の方針によって作成せよ.
問題16
問題13で定義した型のレコードへの参照をメンバ変数としたクラスを定義し,このクラスにリストの末尾に要素を追加するインスタンスメソッドを定義せよ.問題14,問題15のメソッドもこのクラスのインスタンスメソッドとすることで,単連結リストの構造を外部から隠蔽せよ.
さらに,このクラスのスーパークラス
問題17
松屋フーズ (https://www.matsuyafoods.co.jp/) の丸いロゴマークをおおまかに再現した画像を生成せよ.講義資料に掲載されているソースコードを流用してもよい.
C言語
問題1
整数に対し,
とする.
の値を引数として与えると
の値を返す関数
を
回掛ける方法によって.
を二進展開して
とし,
を計算する方法によって.
- ビット演算 (左シフト) を用いる方法によって.
問題2
問題1で作成した関数に対し正しい
の値が返るようにせよ.
問題3
実数に対し,
とする.
の値を浮動小数点数として与えると
の値を返す関数
問題4
モンテカルロ法によって,次に示すの値を数値的に求めよ.
問題5
2つの配列はそれぞれ長さ
の文字列 (
を与えると
の内容を入れ替える関数
問題6
2つの配列はそれぞれ文字列とする.
を与えると
を逆転した文字列と
を逆転した文字列のどちらが辞書順で小さいかを判定する関数
を逆転した文字列のほうが辞書順で小さいとき
rev_strcmp(A, B) = -1. を逆転した文字列のほうが辞書順で小さいとき
rev_strcmp(A, B) = 1. を逆転した文字列と
を逆転した文字列が等しいとき
rev_strcmp(A, B) = 0.
ただし,関数内での以下の操作は禁じる.
- メソッド内で配列
に対し破壊的変更を加えること.
- 文字列
の長さ
に対し
の領域を新たに確保すること.
問題7
RGB値 (それぞれの値は整数で,
) をフィールドとして持つことで色を扱う構造体
問題8
問題7で作成した構造体を要素とする2次元配列は画像とみなすことができる.と,それを画像としてみなしたときの幅
,高さ
を引数として,PPM形式の画像を出力する関数
問題9
問題7で作成した構造体を要素とする2次元配列は画像とみなすことができる.を
,高さを
とする.この画像に対し,左上の座標
と右下の座標
で決まる矩形領域の塗りつぶしを考える.塗る色を