「基礎プログラミングおよび演習」のための問題集
概要
本記事は電気通信大学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点について,点が三角形の内部にあれば
問題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次元配列は画像とみなすことができる.
問題9
問題7で作成した構造体を要素とする2次元配列は画像とみなすことができる.を