どれだけ繰り返しても飽きることが無い。
これもコンピュータの特徴です。
今までの順次、選択(条件分岐)とこの繰り返しは構造化プログラミングという最も基本的なプログラミングの要素です。
ここでは繰り返しを使ったプログラムにチャレンジします。
以下のプログラムを作成しなさい。
なお、コードテンプレートをできるだけ使用すること。
0.毎日1%の成長を続けると1年後には
新入社員のあなたは毎日1%の成長を続けたいと心に誓っています。
ふと気になって1年後の成長度合いを数値で確認することを思い立ちました。
以下のプログラムを完成させなさい。
package p05;
public class Grow {
public static void main(String[] args) {
double growthRate = 1.01;
double originalAbility = 1.0;
final int DAYS_OF_YEAR = 365;
// ここにfor文を書く
System.out.println(originalAbility);
}
}
1.継続条件式
0から100までの整数値を表示するプログラムを作成しなさい。
ただし、for文を使うこと。
(出力例)
2.初期化文
3.更新文
50から100までに含まれる偶数を表示するプログラムを作成しなさい。
4.合計の計算
1から100までに含まれる整数を全て合計するプログラムを作成しなさい。
5.計算過程の表示
上記4のプログラムを計算過程を表示するように変更しなさい。
ただし、for文を使うこと。
6.While文
上記1~5のプログラムをWhile文を使って書き換えなさい。
全てを一つのmainメソッドの中に作成してかまわない。
7.for文のネスト
System.out.print("*");
で1つのアスタリスクが表示できる。
このとき、次のような模様を出力するプログラムを2重のfor文で作りなさい。
8.継続条件式を変化させる
次のような模様を出力するプログラムを2重のfor文で作りなさい
9.インクリメントとデクリメント
次のような模様を出力するプログラムを2重のfor文で作りなさい
10.HogeHuga問題
HogeHuga問題を解きなさい。
HogeHuga問題とは、1から99まで順番に数を表示するプログラムです。
ただし、その数が3で割り切れるなら“Hoge”、5で割り切れるなら“Huga”、両方で割り切れるなら“HogeHuga”と表示します。
11.コラッツの予想
コラッツの予想(のほんの一端)を解きなさい。
コラッツの予想とは、任意の正の整数numに対して
(1) numが奇数ならば3倍して1を加える。
(2) numが偶数ならば2で割る。
という操作を繰り返して,1になったら終了とするという処理があった時、
どんな正の整数から始めても上記の操作を繰り返せば1になる、というものです。
1930年代にコラッツが予想した数学界の未解決問題の一つです。
つまり、証明はまだ誰もなしえていません。
2021年7月7日にはこの問題に1億2,000万円の懸賞金が掛けられました。
13 40 20 10 5 16 8 4 2 1 |
82 41 124 62 31 94 47 142 71 214 107 322 161 484 242 121 364 182 91 274 137 412 206 103 310 155 466 233 700 350 175 526 263 790 395 1186 593 1780 890 445 1336 668 334 167 502 251 754 377 1132 566 283 850 425 1276 638 319 958 479 1438 719 2158 1079 3238 1619 4858 2429 7288 3644 1822 911 2734 1367 4102 2051 6154 3077 9232 4616 2308 1154 577 1732 866 433 1300 650 325 976 488 244 122 61 184 92 46 23 70 35 106 53 160 80 40 20 10 5 16 8 4 2 1 |
上記の通り、1違うだけでも全く予想のつかないアウトプットになります。
本のご紹介
コラッツの予想がテーマになっている青春小説です。
12.紙を折ることによって月に到達できるか
紙を何度折ることによって月に到達できるかを計算するプログラムを作りなさい
紙の厚さは0.1㎜とする。
月までの距離は.平均で約38万キロとする。
ヒント:単位をキロメートルに合わせること。
なお、この答えの数は大変神秘的な数として有名です。
13.IPv4で表現できるIPアドレス
IPv4で表現できるIPアドレスの理論上の数を求めなさい。
※IPv4は32ビットである。よって、2の32乗を計算することで求めなさい。
※累乗(べき乗)の計算をするMathクラスのpowメソッドは使わないこと。
ヒント:桁あふれ(オーバーフロー)に注意すること
オーバーフローにはくれぐれも注意しましょう。過去にはこんな事件もありました。
14.モンテカルロ法による円周率計算
モンテカルロ法を使い円周率を計算しなさい。
なお、円周率とは円の直径に対する円周の長さの比率のことです。
(1) モンテカルロ法の名前の由来を隣の人に教えてあげなさい。
(2) プログラムで実装し、java.lang.Math.PI(3.141592653589793)にできるだけ近づけなさい
考え方:
①半径1の円を考えます。
②その円に外接する正方形(一辺は2)を考えます。
③円の中心から右上の4分の1の円と正方形を取り出して考えます。
④0~1のランダムな乱数を2つ作り、それぞれをx軸,y軸の座標値として点を打ちます。
⑤円の中心と点(x,y)を結んだ直角三角形を考え、3平方の定理により斜辺を求めます。
⑥もしも、斜辺の長さが1以下なら円の中に点が打たれたということです。
⑦上記④~⑥の試行を一定回数繰り返し、全試行回数中、円の中に点が打たれた確率を求めます。
⑧⑦で求めた確率を4倍すると求める円周率(の近似値)になります。
簡単な説明
円の面積 = 円周率 × 半径 × 半径
4分の1の円の面積 = 円周率 × (半径 × 半径) ÷ 4
4分の1の正方形の面積 = (半径 × 半径)
4分の1の円の面積 = 円周率 × (4分の1の正方形の面積) ÷ 4
円周率 = (4分の1の円の面積)÷ (4分の1の正方形の面積) × 4
ちなみに、以下のサイトでは円周率から任意の数値列の検索ができます。
あなたの誕生日や電話番号などの数値があるかどうか確かめてみましょう。
http://www.subidiom.com/pi/
円周率にはこの世のすべての情報が含まれているという説があります。
あなたはどう思いますか?
もう一つのモンテカルロ法の例「ビュフォンの針の実験」へのリンク
15.オリジナル問題作成
将来の後輩のために良い問題が出来たら教えてください。
以上。