• 検索結果がありません。

練習問題 1-1 ヒント 解答方針 label1 の値を 10 増やすためには 次のように記述します label1.text = Convert.ToString(Convert.ToInt32(label1.Text) + 10); フォームのデザイン例 button2 button1 label

N/A
N/A
Protected

Academic year: 2021

シェア "練習問題 1-1 ヒント 解答方針 label1 の値を 10 増やすためには 次のように記述します label1.text = Convert.ToString(Convert.ToInt32(label1.Text) + 10); フォームのデザイン例 button2 button1 label"

Copied!
40
0
0

読み込み中.... (全文を見る)

全文

(1)

1 【練習問題 1-1】 ヒント・解答方針 label1 の値を 10 増やすためには、次のように記述します。 label1.Text = Convert.ToString(Convert.ToInt32(label1.Text) + 10); フォームのデザイン例 プログラムコード

private void button1_Click(object sender, EventArgs e) {

label1.Text = Convert.ToString(Convert.ToInt32(label1.Text) + 1); }

private void button2_Click(object sender, EventArgs e) {

label1.Text = Convert.ToString(Convert.ToInt32(label1.Text) + 10); }

button2 button1

(2)

2

左のボタンには左のラベルの値を1増やすプログラムを記述します。また、右のボタンには右のラ ベルの値を1増やすプログラムを記述します。

フォームのデザイン例

プログラムコード

private void button1_Click(object sender, EventArgs e) {

label1.Text = Convert.ToString(Convert.ToInt32(label1.Text) + 1); }

private void button2_Click(object sender, EventArgs e) {

label2.Text = Convert.ToString(Convert.ToInt32(label2.Text) + 1); }

button2 button1

(3)

3 【練習問題 1-3】 ヒント・解答方針 左上のボタンには左のラベルの値を1増やすプログラムを、右上のボタンには右のラベルの値を1 増やすプログラムを記述します。また、左下のボタンには左のラベルの値を1減らすプログラムを、右 下のボタンには右のラベルの値を 1 減らすプログラムを記述します。 フォームのデザイン例 プログラムコード

private void button1_Click(object sender, EventArgs e) {

label1.Text = Convert.ToString(Convert.ToInt32(label1.Text) + 1); }

private void button2_Click(object sender, EventArgs e) {

label2.Text = Convert.ToString(Convert.ToInt32(label2.Text) + 1); }

private void button3_Click(object sender, EventArgs e) {

label1.Text = Convert.ToString(Convert.ToInt32(label1.Text) - 1); }

private void button4_Click(object sender, EventArgs e) { label2.Text = Convert.ToString(Convert.ToInt32(label2.Text) - 1); } button1 button3 button2 button4 label2 label1

(4)

4 2 個のテキストボックスの値を、Convert.ToDouble を用いて倍精度浮動小数点型に変換し、それ ぞれ倍精度浮動小数点型の変数に代入します。三角形の面積は、「底辺×高さ÷2」で求めることがで きます。C#では、乗算演算子は「*」、除算演算子は「/」です。 フォームのデザイン例 プログラムコード

private void button1_Click(object sender, EventArgs e) { double a = Convert.ToDouble(textBox1.Text); double h = Convert.ToDouble(textBox2.Text); double s = a * h / 2; textBox3.Text = Convert.ToString(s); } button1 textBox1 textBox2 textBox3

(5)

5 【練習問題 2-2】 ヒント・解答方針 3 個のテキストボックスの値を、Convert.ToDouble を用いて倍精度浮動小数点型に変換し、それ ぞれ倍精度浮動小数点型の変数に代入します。台形の面積は、「(上底+下底)×高さ÷2」で求める ことができます。 フォームのデザイン例 プログラムコード

private void button1_Click(object sender, EventArgs e) { double a = Convert.ToDouble(textBox1.Text); double b = Convert.ToDouble(textBox2.Text); double h = Convert.ToDouble(textBox3.Text); double s = (a + b) * h / 2; textBox4.Text = Convert.ToString(s); } button1 textBox1 textBox2 textBox3 textBox4

(6)

6 テキストボックスに入力した半径の値を、Convert.ToDouble を用いて倍精度浮動小数点型に変 換し、倍精度浮動小数点型の変数に代入します。表面積と体積を求める計算にべき乗が必要です。べき 乗はMath.Pow 関数を用いてもよいのですが、2 乗は 2 回、3 乗は 3 回、同じ数を掛け合わせること でも計算できます。 フォームのデザイン例 プログラムコード

private void button1_Click(object sender, EventArgs e) { double r = Convert.ToDouble(textBox1.Text); double s = 4 * Math.PI * r * r; double v = 4 * Math.PI * r * r * r / 3; textBox2.Text = Convert.ToString(s); textBox3.Text = Convert.ToString(v); } button1 textBox1 textBox2 textBox3

(7)

7 【練習問題 3-1】 ヒント・解答方針 if 文を用います。入力した数を2 で割ったときの余りが、0 ならば偶数、違えば奇数です。なお、 割り算の余りを求める演算子は「%」です。 フォームのデザイン例 プログラムコード

private void button1_Click(object sender, EventArgs e) { int a = Convert.ToInt32(textBox1.Text); int b = a % 2; if (b == 0) textBox2.Text = "偶数"; else textBox2.Text = "奇数"; } button1 textBox1 textBox2

(8)

8 if 文による2 条件分岐(3.3 節)の練習問題です。入力した身長から 100 を引き、これに 0.9 を乗 じて理想体重を計算します。実際の体重が理想体重に 1.1 を乗じたものより重ければ、「太りすぎで す」と表示します。実際の体重が理想体重に0.9 を乗じたものより軽ければ、「痩せすぎです」と表示 します。また、いずれの条件も成立しないとき、「ちょうどよい体重です」と表示します。 フォームのデザイン例 プログラムコード

private void button1_Click(object sender, EventArgs e) { double a = Convert.ToDouble(textBox1.Text); double b = Convert.ToDouble(textBox2.Text); double c = (a - 100) * 0.9; if (b > c * 1.1) textBox3.Text = "太りすぎです"; else if (b < c * 0.9) textBox3.Text = "やせすぎです"; else textBox3.Text = "ちょうどよい体重です"; } button1 textBox1 textBox2 textBox3

(9)

9 【練習問題 3-3】 ヒント・解答方針 𝑎𝑥2+ 𝑏𝑥 + 𝑐 = 0(𝑎 ≠ 0)の解は𝑥 =−𝑏±√𝑏2−4𝑎𝑐 2𝑎 ですが、判別式𝐷 = 𝑏 2− 4𝑎𝑐の値に応じて分けて考 えなければなりません。𝐷 = 0の場合、解は1 個です。また、𝐷 > 0の場合は、実数解なので、その ままの計算により求められます。𝐷 < 0の場合は、ルート記号の中の符号が負で、複素解になるた め、注意が必要です。実部は−𝑏 2𝑎、虚部は虚数単位記号(𝑖)を用いて± √4𝑎𝑐−𝑏2 2𝑎 𝑖となります。 フォームのデザイン例 プログラムコード

private void button1_Click(object sender, EventArgs e) { double a = Convert.ToDouble(textBox1.Text); double b = Convert.ToDouble(textBox2.Text); double c = Convert.ToDouble(textBox3.Text); double d = b * b - 4 * a * c; double xa, xb; if (d == 0) { xa = -b / (2 * a); textBox4.Text = Convert.ToString(xa); textBox5.Text = "解は上の一個だけです"; } else if (d > 0) { xa = (-b + Math.Sqrt(d)) / (2 * a); xb = (-b - Math.Sqrt(d)) / (2 * a); textBox4.Text = Convert.ToString(xa); textBox5.Text = Convert.ToString(xb); } else { xa = -b / (2 * a); xb = Math.Sqrt(-d) / (2 * Math.Abs(a)); textBox4.Text = xa + " + " + xb + " i"; textBox5.Text = xa + " - " + xb + " i"; } } button1 textBox1 textBox2 textBox3 textBox4 textBox5

(10)

10 for 文による繰り返しの練習問題です。使用する変数ですが、今回は計算結果が大きな値になるた め、64 ビット整数型(long 型)を使うことをお勧めします。例題 4.1 に類似しています。例題 4.1 で は、1 から入力した数までを足し合わせていますが、この練習問題では、1 から入力した数までを掛け 合わせます。なお、計算結果を記憶しておく変数の初期値が0 だと何を掛け合わせても結果が 0 にな ってしまうので、変数の初期値は1 にする必要があります。 フォームのデザイン例 プログラムコード

private void button1_Click(object sender, EventArgs e) {

long n = Convert.ToInt64(textBox1.Text); long s = 1;

for (int i = 1; i <= n; i++) { s = s * i; } textBox2.Text = Convert.ToString(s); } button1 textBox1 textBox2

(11)

11 【練習問題 4-2】 ヒント・解答方針 while 文による繰り返しの練習問題です。𝑛の初期値を 0 として、𝑛 × (𝑛 + 1) × (𝑛 + 2)の値が Limit より小さい間、𝑛の値を1増加させながら繰り返します。ループを抜けたのち、𝑛、𝑛 + 1、𝑛 + 2、𝑛 × (𝑛 + 1) × (𝑛 + 2)を表示します。 フォームのデザイン例 プログラムコード

private void button1_Click(object sender, EventArgs e) {

int limit = Convert.ToInt32(textBox1.Text); int n = 0; while (n * (n + 1) * (n + 2) < limit) { n = n + 1; } textBox2.Text = Convert.ToString(n); textBox3.Text = Convert.ToString(n + 1); textBox4.Text = Convert.ToString(n + 2); textBox5.Text = Convert.ToString(n * (n + 1) * (n + 2)); } button1 textBox1 textBox2 textBox3 textBox4 textBox5

(12)

12 2 重ループの練習問題です。外側のループで「変数 1」の値を𝑛から𝑚まで 1 増加させながら繰り返 し、内側のループで「変数2」の値を 1 から 9 まで 1 増加させながら繰り返します。そして、「変数 1」と「変数 2」を掛けた値を足し合わせていきます。 フォームのデザイン例 プログラムコード

private void button1_Click(object sender, EventArgs e) {

int n = Convert.ToInt32(textBox1.Text); int m = Convert.ToInt32(textBox2.Text); int s = 0;

for (int i = n; i <= m; i++) for (int j = 1; j <= 9; j++) s = s + i * j; textBox3.Text = Convert.ToString(s); } button1 textBox1 textBox2 textBox3

(13)

13 【練習問題 5-1】 ヒント・解答方針 整数型の配列を宣言し、Multiline 指定のテキストボックスからデータを配列に読み込みます。この 部分のプログラムは、例題5.4 を参考にしてください。次に、配列に記憶されているデータの最小値を 探し出します。この部分のプログラムは、例題5.2 を参考にしてください。 フォームのデザイン例 プログラムコード

private void button1_Click(object sender, EventArgs e) {

int n = textBox1.Lines.Length; int[] a = new int[n];

for (int i = 0; i <= n - 1; i++)

a[i] = Convert.ToInt32(textBox1.Lines[i]); int min = a[0];

for (int i = 1; i <= n - 1; i++) if (min > a[i]) min = a[i]; textBox2.Text = Convert.ToString(min); } button1 textBox1 textBox2

(14)

14 例題5.4 のプログラムは、小さい順(昇順)に並び替えるプログラムです。大きい順(降順)に並び 替えるプログラムは、小さい順(昇順)に並び替えるプログラムにおける if 文の条件を変更するだけ です。 フォームのデザイン例 button2 button1 textBox1 textBox2

(15)

15 プログラムコード

private void button1_Click(object sender, EventArgs e) {

int work;

int n = textBox1.Lines.Length; int[] a = new int[n];

for (int i = 0; i <= n - 1; i++) {

a[i] = Convert.ToInt32(textBox1.Lines[i]); }

for (int i = 0; i <= n - 2; i++) { for (int j = i + 1; j <= n - 1; j++) { if (a[i] > a[j]) { work = a[i]; a[i] = a[j]; a[j] = work; } } } textBox2.Text = "";

for (int i = 0; i <= n - 1; i++) {

textBox2.Text += a[i] + "¥r¥n"; }

}

private void button2_Click(object sender, EventArgs e) {

int work;

int n = textBox1.Lines.Length; int[] a = new int[n];

for (int i = 0; i <= n - 1; i++) {

a[i] = Convert.ToInt32(textBox1.Lines[i]); }

for (int i = 0; i <= n - 2; i++) { for (int j = i + 1; j <= n - 1; j++) { if (a[i] < a[j]) { work = a[i]; a[i] = a[j]; a[j] = work; } } } textBox2.Text = "";

for (int i = 0; i <= n - 1; i++) {

textBox2.Text += a[i] + "¥r¥n"; }

(16)

16

例題 5.7 のプログラムにおいて、2 次元配列 data[i,j]に点数が入ります。i 番目の人の国語の点 数がdata[i,0]、数学の点数が data[i,1]、合計点数が data[i,2]に保存されています。国語の点数 の合計は、i を0 から 5 まで 1 増加させながら data[i,0]を加算していけば求められます。同様に、 数学の点数の合計は、i を0 から 5 まで 1 増加させながら data[i,1]を加算していけば求められ、各 科目の合計点の合計は、i を0 から 5 まで 1 増加させながら data[i,2]を加算していけば求められま す。平均点は、これらの点数を人数6 で割って求められます。 フォームのデザイン例 button1 textBox1 textBox2 textBox3 textBox4 textBox5 textBox6 textBox7

(17)

17 プログラムコード

private void button1_Click(object sender, EventArgs e) {

string[] simei = new string[6]; int[,] data = new int[6, 3]; double[] heikin = new double[3]; string worksimei;

int work;

for (int i = 0; i <= 5; i++) {

simei[i] = textBox1.Lines[i];

data[i, 0] = Convert.ToInt32(textBox2.Lines[i]); data[i, 1] = Convert.ToInt32(textBox3.Lines[i]); }

for (int i = 0; i <= 5; i++) {

data[i, 2] = data[i, 0] + data[i, 1]; }

for (int i = 0; i <= 2; i++) {

for (int j = 0; j <= 5; j++) {

heikin[i] = heikin[i] + data[j, i]; } heikin[i] = heikin[i] / 6; } textBox5.Text = Convert.ToString(heikin[0]); textBox6.Text = Convert.ToString(heikin[1]); textBox7.Text = Convert.ToString(heikin[2]); for (int i = 0; i <= 4; i++)

{ for (int j = i + 1; j <= 5; j++) { if (data[i, 2] < data[j, 2]) { worksimei = simei[i]; simei[i] = simei[j]; simei[j] = worksimei; for (int k = 0; k <= 2; k++) { work = data[i, k]; data[i, k] = data[j, k]; data[j, k] = work; } } } } textBox1.Text = ""; textBox2.Text = ""; textBox3.Text = ""; textBox4.Text = "";

for (int i = 0; i <= 5; i++) { textBox1.Text += simei[i] + "¥r¥n"; textBox2.Text += data[i, 0] + "¥r¥n"; textBox3.Text += data[i, 1] + "¥r¥n"; textBox4.Text += data[i, 2] + "¥r¥n"; } }

(18)

18 練習問題4-1 のプログラムと同じ機能のプログラムですが、階乗を計算するメソッドを作り、 これを利用してプログラムを作ります。階乗計算の結果が大きな値になるため、メソッドの戻り 値を64 ビット整数型(long 型)にすることをお勧めします。 フォームのデザイン例 プログラムコード

long kaijo(int n) {

long s = 1;

for (int i = 1; i <=n ; i++) {

s = s * i; }

return s; }

private void button1_Click(object sender, EventArgs e) { int n = Convert.ToInt32(textBox1.Text); long a = kaijo(n); textBox2.Text = Convert.ToString(a); } button1 textBox1 textBox2

(19)

19 【練習問題 6-2】 ヒント・解答方針 例題 4.1 のプログラムと同じ機能のプログラムですが、成績判定を行うメソッドを作り、これを利 用してプログラムを作ります。成績判定のメソッドは、整数型の点数のデータをもらい、文字列型の判 定結果を返します。 フォームのデザイン例 プログラムコード

string hantei(int a) { string h = ""; if (a >= 80) h = "A"; else if (a >= 70) h = "B"; else if (a >= 60) h = "C"; else h = "D"; return h; }

private void button1_Click(object sender, EventArgs e) { int a = Convert.ToInt32(textBox1.Text); textBox2.Text = hantei(a); } button1 textBox1 textBox2

(20)

20 複利計算を行うメソッドは、整数型の元金のデータ、倍精度浮動小数点型の利率のデータ、整数型の 何年後かのデータをもらい、整数型の元利合計を返します。𝑛年後の元利合計は、for 文を用いて、元 金に(1+利率)を𝑛回かけることで求めることができます。このとき、利率を%で入力させているの で、100 で割ることを忘れないでください。また、浮動小数点型の値を整数型に変換して代入する場 合、キャスト演算子(int) を用います(72 ページを参照)。 フォームのデザイン例 プログラムコード

int fukuri(int a, double k, int n) {

for (int i = 1; i <= n; i++) {

a = (int)(a * (1 + k / 100)); }

return a; }

private void button1_Click(object sender, EventArgs e) { int a = Convert.ToInt32(textBox1.Text); double k = Convert.ToDouble(textBox2.Text); int n = Convert.ToInt32(textBox3.Text); textBox4.Text = Convert.ToString(fukuri(a, k, n)); } button1 textBox1 textBox3 textBox2 textBox4

(21)

21 【練習問題 7-1】 ヒント・解答方針 1 行に 1 個の整数データが書かれているので、ReadLine()を用います。ReadLine()によりファイ ルからデータを1 行ずつ読みながら、これを整数型に変換して足し合わせていきます。この操作を for 文により6 回繰り返せば合計が求められ、合計を 6 で割れば平均が求められます。最後にストリーム リーダーオブジェクトを閉じることを忘れないでください。 フォームのデザイン例 プログラムコード usingSystem.IO; //usingが書かれているところにこの一行を追加してください

private void button1_Click(object sender, EventArgs e) {

int s = 0;

StreamReader sa = new StreamReader("data.txt"); for (int i = 0; i <= 5; i++)

{ string a = sa.ReadLine(); s = s + Convert.ToInt32(a); } textBox1.Text = Convert.ToString(s / 6); sa.Close(); } button1 textBox1

(22)

22 6 個の要素をもつ整数型配列を宣言します。ReadLine()によりファイルからデータを 1 行ずつ読 みながら、整数型に変換して配列に代入します。配列に記憶したデータの中で最大値を見つけるプロ グラムは、例題5.2 を参考にしてください。なお、例題 5.2 の場合、データ数が 5 個ですが、今回はデ ータ数が6 個なので気を付けてください。 フォームのデザイン例 プログラムコード usingSystem.IO; //usingが書かれているところにこの一行を追加してください private void button1_Click(object sender, EventArgs e)

{

int[] a = new int[6];

StreamReader sa = new StreamReader("data.txt"); for (int i = 0; i <= 5; i++)

a[i] = Convert.ToInt32(sa.ReadLine()); int max = a[0];

for (int i = 0; i <= 5; i++) if (a[i] > max) max = a[i]; textBox1.Text = Convert.ToString(max); sa.Close(); } button1 textBox1

(23)

23 【練習問題 7-3】 ヒント・解答方針 6 個の要素を持つ文字列型の配列と整数型の配列を宣言します。ReadLine()によりファイルから データを 1 行ずつ読みながら、Split(',')により分割します。分割したデータの、最初の要素を文 字列型の配列に記憶し、次の要素を整数型に変換して整数型の配列に記憶していきます。すべてのデ ータを配列に読み終えたら、最高得点のデータを探します。その際に、氏名も記憶しておきます。 フォームのデザイン例 プログラムコード usingSystem.IO; //usingが書かれているところにこの一行を追加してください private void button1_Click(object sender, EventArgs e)

{

string[] namae = new string[6]; int[] ten = new int[6];

StreamReader sa = new StreamReader("data.txt"); for (int i = 0; i <= 5; i++)

{ string a = sa.ReadLine(); string[] b = a.Split(','); namae[i] = b[0]; ten[i] = Convert.ToInt32(b[1]); }

string maxname = namae[0]; int max = ten[0];

for (int i = 1; i <= 5; i++) if (ten[i] > max) { maxname = namae[i]; max = ten[i]; } textBox1.Text = maxname; textBox2.Text = Convert.ToString(max); sa.Close(); } button1 textBox1 textBox2

(24)

24

メソッドの外で時間計測用の変数を宣言します。タイマーのInterval を 100 にして、100 ミリ秒毎 にこの変数の値を1 増加させます。[Start]が押されると、この変数の値を 0 にした後、タイマーの Enabled を true にして時間の計測をはじめます。[Stop]が押されると、タイマーの Enabled を false にして時間の計測を停止し、得点を計算し表示します。

フォームのデザイン例

プログラムコード int i;

private void timer1_Tick(object sender, EventArgs e) {

i = i + 1; }

private void button1_Click(object sender, EventArgs e) {

i = 0;

timer1.Enabled = true; textBox1.Text = ""; }

private void button2_Click(object sender, EventArgs e) {

timer1.Enabled = false;

textBox1.Text = Convert.ToString(100 - Math.Abs(i - 100)); } button1 button2 textBox1 timer1 Enabel を False Interval を 100

(25)

25 【練習問題 8-2】 ヒント・解答方針 例題8.5 を参考にプログラムを作成してください。if 文において、上の行、中の行、下の行、左上 から右下への斜め、右上から左下への斜めの 5 パターンのいずれかがそろっていれば、コインが 100 増えるようにします。このような複数の条件からなる複雑な条件の作成には、条件演算子(表3.2)を 使用します。 フォームのデザイン例 プログラムコード

System.Random r = new System.Random(); int f1, f2, f3;

private void button2_Click(object sender, EventArgs e) { if (f1 == 1) { f1 = 0; hantei(); } }

private void button3_Click(object sender, EventArgs e) { if (f2 == 1) { f2 = 0; hantei(); } } textBox1 textBox2 textBox4 textBox5 textBox7

button1 button2 button3 textBox8 textBox3 textBox6 textBox9 label1 timer1 Enable を True Interval を 700 button4

(26)

26 { f3 = 0; hantei(); } }

private void timer1_Tick(object sender, EventArgs e) { if (f1 == 1) { textBox1.Text = Convert.ToString(r.Next(1, 10)); textBox4.Text = Convert.ToString(r.Next(1, 10)); textBox7.Text = Convert.ToString(r.Next(1, 10)); } if (f2 == 1) { textBox2.Text = Convert.ToString(r.Next(1, 10)); textBox5.Text = Convert.ToString(r.Next(1, 10)); textBox8.Text = Convert.ToString(r.Next(1, 10)); } if (f3 == 1) { textBox3.Text = Convert.ToString(r.Next(1, 10)); textBox6.Text = Convert.ToString(r.Next(1, 10)); textBox9.Text = Convert.ToString(r.Next(1, 10)); } } void hantei() { if (f1 == 0 && f2 == 0 && f3 == 0) {

if (textBox1.Text == textBox2.Text && textBox1.Text == textBox3.Text || textBox4.Text == textBox5.Text && textBox4.Text == textBox6.Text || textBox7.Text == textBox8.Text && textBox7.Text == textBox9.Text || textBox1.Text == textBox5.Text && textBox1.Text == textBox9.Text || textBox3.Text == textBox5.Text && textBox3.Text == textBox7.Text) {

label1.Text = Convert.ToString(Convert.ToInt32(label1.Text) + 100); }

} }

private void button1_Click(object sender, EventArgs e) { label1.Text = Convert.ToString(Convert.ToInt32(label1.Text) - 1); f1 = 1; f2 = 1; f3 = 1; }

(27)

27 【練習問題 8-3】

ヒント・解答方針

描画ソフト(Windows に付属のペイントなど)により、穴の絵と、穴からモグラが顔を出している 絵の二つを描きます。ピクチャーボックスを12 個配置し、pictureBox1 から pictureBox6 には穴の絵 を、pictureBox7 から pictureBox12 にモグラの絵を Image に設定します。穴の絵の上にモグラの絵 を重ねます。pictureBox7 から pictureBox12 のピクチャーボックスをランダムに表示させ、これらを

クリックすると得点が増えるようにします。プログラム記述は、例題8.6 を参考にしてください。

フォームのデザイン例

pictureBox1 pictureBox2 pictureBox3 pictureBox7 pictureBox8 pictureBox9

pictureBox4 pictureBox5 pictureBox6 pictureBox10 pictureBox11 pictureBox12 label1 timer1 Enable を True Interval を 700 pictureBox1 から pictureBox6 の上に pictureBox7 から pictureBox12 を重ねる

(28)

28 int ten = 0;

public Form1() {

InitializeComponent();

a = new Control[] { pictureBox7, pictureBox8, pictureBox9, pictureBox10, pictureBox11, pictureBox12 }; }

//他のモグラの絵のピクチャーボックスをクリックしたときにもこのプログラムコードが //呼び出されるように119ページの要領で設定してください。

private void pictureBox7_Click(object sender, EventArgs e) {

label1.Text = Convert.ToString(Convert.ToInt32(label1.Text) + 1); }

private void timer1_Tick(object sender, EventArgs e) {

for (int i = 0; i <= 5; i++) a[i].Visible = false; int rr = r.Next(0, 6); a[rr].Visible = true; }

(29)

29 【練習問題 9-1】 ヒント・解答方針 例題 9.4 を参考にして、タイマーにより 4 個のピクチャーボックスが動くようにします。コントロ ール配列を用いると、プログラムの記述量を減らすことができます。また、ピクチャーボックスをクリ ックした際のプログラムコードは同一であるため、1 個のプログラムコードのみ記述して、ほかのピク チャーボックスがクリックされた際に呼び出すように設定すると、プログラムの記述量を減らすこと ができます。残り時間については、タイマーをもう一つ追加し、新たに追加したタイマーにより 1 秒 ごとに値を 1 減少させます。残り時間がなくなったら、ピクチャーボックスの Enabled を false に して非表示にします。 フォームのデザイン例 label1 label2 pictureBox4 pictureBox3 pictureBox1 pictureBox2 timer1 Enable を True Interval を 100 timer2 Enable を True Interval を 1000

(30)

30 int ten = 0, t = 60;

public Form1() {

InitializeComponent();

a = new Control[] { pictureBox1, pictureBox2, pictureBox3, pictureBox4 }; }

private void timer1_Tick(object sender, EventArgs e) {

for (int i = 0; i <= 3; i++) if (a[i].Top < this.Height) {

a[i].Top = a[i].Top + 10;

a[i].Left = a[i].Left + r.Next(-10, 10); }

else {

a[i].Top = -a[i].Height;

a[i].Left = r.Next(0, this.Width - pictureBox1.Width); }

}

private void timer2_Tick(object sender, EventArgs e) { if (t > 0) { t = t - 1; label2.Text = Convert.ToString(t); } else

for (int i = 0; i <= 3; i++) a[i].Visible = false; }

private void pictureBox1_Click(object sender, EventArgs e) {

ten = ten + 1;

label1.Text = Convert.ToString(ten); }

(31)

31 【練習問題 9-2】 ヒント・解答方針 練習問題 9-1 と同様に、タイマーにより 4 個のピクチャーボックスが動くようにします。また、制 限時間の機能も付けます。天使の絵の移動と矢の発射のプログラムについては、例題 9.5 を参考にし てください。 フォームのデザイン例 pictureBox3 pictureBox1 pictureBox2 pictureBox4 pictureBox5 pictureBox6 timer1 Enable を True Interval を 100 timer3 Enable を True Interval を 1000 label1 label2 timer2 Enable を True Interval を 100

(32)

32 int t = 60; public Form1() { InitializeComponent(); pictureBox2.Left = -pictureBox2.Width;

a = new Control[] { pictureBox3, pictureBox4, pictureBox5, pictureBox6 }; }

private void Form1_KeyDown(object sender, KeyEventArgs e) {

if (e.KeyCode == Keys.Left) pictureBox1.Left = pictureBox1.Left - 10; if (e.KeyCode == Keys.Right) pictureBox1.Left = pictureBox1.Left + 10; if (e.KeyCode == Keys.Up) pictureBox1.Top = pictureBox1.Top - 10; if (e.KeyCode == Keys.Down) pictureBox1.Top = pictureBox1.Top + 10; if (e.KeyCode == Keys.Space)

{

pictureBox2.Left = pictureBox1.Left;

pictureBox2.Top = pictureBox1.Top + pictureBox1.Height / 2; }

}

private void timer1_Tick(object sender, EventArgs e) {

pictureBox2.Left = pictureBox2.Left - 10; }

private void timer2_Tick(object sender, EventArgs e) {

for (int i = 0; i <= 3; i++) {

if (a[i].Top < this.Height) {

a[i].Top = a[i].Top + 10;

a[i].Left = a[i].Left + r.Next(-10, 10); }

else {

a[i].Top = -a[i].Height;

a[i].Left = r.Next(0, (this.Width - a[i].Width)); }

if (pictureBox2.Left < a[i].Left + a[i].Width && pictureBox2.Left > a[i].Left

&& pictureBox2.Top > a[i].Top

&& pictureBox2.Top < a[i].Top + a[i].Height - pictureBox2.Height) { label1.Text = Convert.ToString(Convert.ToInt32(label1.Text) + 1); a[i].Top = -a[i].Height; pictureBox2.Left = -300; } } }

private void timer3_Tick(object sender, EventArgs e) { if (t > 0) { t = t - 1; label2.Text = Convert.ToString(t); } else {

for (int i = 0; i <= 3; i++) a[i].Visible = false; }

(33)

33 【練習問題 9-3】 ヒント・解答方針 2 個のタイマーを使用します。一つのタイマーでワニを動かし、もう一つのタイマーで残り時間を表 示させます。コントロール配列を用いると、プログラムの記述量を減らすことができます。 フォームのデザイン例 プログラムコード Control[] wani ;

Random r = new Random();

int ten = 0, t = 60; public Form1()

{

InitializeComponent();

wani = new Control[] { pictureBox1, pictureBox2, pictureBox3, pictureBox4, pictureBox5 };

}

private void timer1_Tick(object sender, EventArgs e) {

for (int i = 0; i <= 4; i++) {

if (wani[i].Top <= this.Height - 150)

wani[i].Top = wani[i].Top + r.Next(1, 20); else { ten = ten - 10; label1.Text = Convert.ToString(ten ); wani[i].Top = 150; timer1 Enable を True Interval を 500 timer2 Enable を True Interval を 1000 pictureBox1 pictureBox2 pictureBox3 pictureBox4 pictureBox5 label2 label1

(34)

34

private void timer2_Tick(object sender, EventArgs e) { if (t > 0) { t = t - 1; label2.Text = Convert.ToString(t); } else { timer1.Enabled = false; timer2.Enabled = false; for (int i = 0; i <= 4; i++) wani[i].Visible = false; }

}

private void pictureBox1_Click(object sender, EventArgs e) {

ten = ten + 1;

label1.Text = Convert.ToString(ten); wani[0].Top = 150;

}

private void pictureBox2_Click(object sender, EventArgs e) {

ten = ten + 1;

label1.Text = Convert.ToString(ten); wani[1].Top = 150;

}

private void pictureBox3_Click(object sender, EventArgs e) {

ten = ten + 1;

label1.Text = Convert.ToString(ten); wani[2].Top = 150;

}

private void pictureBox4_Click(object sender, EventArgs e) {

ten = ten + 1;

label1.Text = Convert.ToString(ten); wani[3].Top = 150;

}

private void pictureBox5_Click(object sender, EventArgs e) {

ten = ten + 1;

label1.Text = Convert.ToString(ten); wani[4].Top = 150;

(35)

35 【練習問題 10-1】 ヒント・解答方針 例題10.2 のKeisanというクラスの中には、値を設定するメソッドと合計点を計算するメソッドし かありませんでした。この中に、平均を計算するメソッドを追加します。 フォームのデザイン例 textBox1 textBox2 textBox3 textBox4 textBox5 button1 textBox6 textBox7

(36)

36 {

public partial class Form1 : Form {

public Form1() {

InitializeComponent(); }

private void button1_Click(object sender, EventArgs e) {

int[] a = new int[5];

a[0] = Convert.ToInt32(textBox1.Text); a[1] = Convert.ToInt32(textBox2.Text); a[2] = Convert.ToInt32(textBox3.Text); a[3] = Convert.ToInt32(textBox4.Text); a[4] = Convert.ToInt32(textBox5.Text); Keisan1 ss = new Keisan1();

ss.Atai(a); textBox6.Text = Convert.ToString(ss.Goukei()); textBox7.Text = Convert.ToString(ss.Heikin()); } } class Keisan1 {

int[] a = new int[5]; public void Atai(int[] aa) {

for (int i = 0; i < 5; i++) a[i] = aa[i];

}

public int Goukei() {

int s = 0;

for (int i = 0; i < 5; i++) s = s + a[i];

return s; }

public double Heikin() {

int s = 0;

for (int i = 0; i < 5; i++) s = s + a[i];

return (double)s / 5; }

} }

(37)

37 【練習問題 10-2】 ヒント・解答方針 練習問題10-1 でメソッドを追加したクラス(Keisan1)を基底クラスとして、派生クラスを作りま す。この派生クラスの中に、最大値と最小値を求めるメソッドを記述します。派生クラスを使用する場 合、基底クラスのフィールド定義のところに、アクセス修飾子として protected を付けることを忘 れないでください。 フォームのデザイン例 プログラムコード namespace 練習問題10_2 {

public partial class Form1 : Form {

public Form1() {

InitializeComponent(); }

private void button1_Click(object sender, EventArgs e) {

int[] a = new int[5];

a[0] = Convert.ToInt32(textBox1.Text); a[1] = Convert.ToInt32(textBox2.Text); a[2] = Convert.ToInt32(textBox3.Text); a[3] = Convert.ToInt32(textBox4.Text); a[4] = Convert.ToInt32(textBox5.Text); Keisan2 ss = new Keisan2();

ss.Atai(a); textBox6.Text = Convert.ToString(ss.Goukei()); textBox7.Text = Convert.ToString(ss.Heikin()); textBox8.Text = Convert.ToString(ss.Max()); textBox9.Text = Convert.ToString(ss.Min()); } } class Keisan1 {

protected int[] a = new int[5]; textBox1 textBox2 textBox3 textBox4 textBox5 button1 textBox6 textBox7 textBox8 textBox9

(38)

38 a[i] = aa[i];

}

public int Goukei() {

int s = 0;

for (int i = 0; i < 5; i++) s = s + a[i];

return s; }

public double Heikin() {

int s = 0;

for (int i = 0; i < 5; i++) s = s + a[i];

return (double)s / 5; }

}

class Keisan2: Keisan1 {

public int Max() {

int M = a[0];

for (int i = 1; i < 5; i++) if (a[i] > M)

M = a[i]; return M;

}

public int Min() {

int M = a[0];

for (int i = 1; i < 5; i++) if (a[i] < M) M = a[i]; return M; } } }

(39)

39 【練習問題 10-3】 ヒント・解答方針 複素数のクラスは、実部と虚部を記憶する 2 個の倍精度浮動小数点型変数をメンバー変数としても ちます。クラス内に、値を設定するメソッド、ベクトルの大きさを計算するメソッド、偏角を計算する メソッドの3 個のメソッドを作成します。ベクトルの大きさは、三平方の定理により、実部の 2 乗と 虚部の2 乗を足して平方根をとることで求めることができます。また、偏角は、tan−1(アークタンジ ェント)という関数を用い、tan−1(虚部÷実部)で求めることができます。C#には、tan−1の計算用に Math.Atan という関数があるので、これを用います。 フォームのデザイン例 textBox1 textBox3 textBox2 button1 textBox4

(40)

40 {

public partial class Form1 : Form {

public Form1() {

InitializeComponent(); }

private void button1_Click(object sender, EventArgs e) {

double r, i;

r = Convert.ToDouble(textBox1.Text); i = Convert.ToDouble(textBox2.Text); Complex comp = new Complex();

comp.Fukusosu(r, i); textBox3.Text = Convert.ToString(comp.Mag()); textBox4.Text = Convert.ToString(comp.Arg()); } } class Complex { double R, I;

public void Fukusosu(double rr, double ii) {

R = rr; I = ii; }

public double Mag() {

double m = Math.Sqrt(R * R + I * I); return m;

}

public double Arg() {

double a = Math.Atan(I / R) * 180 / Math.PI; return a;

} } }

参照

関連したドキュメント

うことが出来ると思う。それは解釈問題は,文の前後の文脈から判浙して何んとか解決出 来るが,

(質問者 1) 同じく視覚の問題ですけど我々は脳の約 3 分の 1

災害に対する自宅での備えでは、4割弱の方が特に備えをしていないと回答していま

この問題をふまえ、インド政府は、以下に定める表に記載のように、29 の連邦労働法をまとめて四つ の連邦法、具体的には、①2020 年労使関係法(Industrial

 このフェスティバルを成功させようと、まずは小学校5年生から50 代まで 53

その問いとは逆に、価格が 30%値下がりした場合、消費量を増やすと回答した人(図

⑤  日常生活・社会生活を習得するための社会参加適応訓練 4. 

ヒット数が 10 以上の場合は、ヒットした中からシステムがランダムに 10 問抽出して 出題します。8.