この問題を解くためには…
 → 応用編第2日目参照

問題2:静的メンバ

prob2-1.(難易度:★)

以下のプログラムは、コンソール画面でキーボードから整数値を入力させ、その和を求めるものである。このとき、このプログラムを以下のように改造しなさい。

プロジェクトProblemex2_1/Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Problemex2_1
{
    class Program
    {
        static int Add(int a,int b)
        {
            return a + b;
        }
        static void Main(string[] args)
        {
            //  キーボードから整数の値を入力
            Console.Write("a=");
            int a = int.Parse(Console.ReadLine());
            Console.Write("b=");
            int b = int.Parse(Console.ReadLine());
            Console.WriteLine("a + b = {0}",Add(a,b));
        }
    }
}
実行結果の例
a=5   ← キーボードから値を入力
b=2   ← キーボードから値を入力
a + b = 7

同様に、二つの数の差を求める静的メソッド、Sub()を追加し、最後に、その結果も表示するようにしなさい。

期待される実行結果の例
a=5   ← キーボードから値を入力
b=2   ← キーボードから値を入力
a + b = 7
a - b = 3

prob2-2.(難易度:★)

以下のプログラムは、1から10の2つ乱数を発生させ、その積を求めるものである。

プロジェクトProblemex2_2/Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Problemex2_2
{
    class Program
    {
        static int Mul(int a, int b)
        {
            return a * b;
        }
        static void Main(string[] args)
        {
            Random r = new Random();
            int a = r.Next(1, 11);  //  aに1から10の乱数を代入
            int b = r.Next(1, 11);  //  bに1から10の乱数を代入
            int result = Mul(a,b);  //  二つの数の積を求める
            Console.WriteLine("a = " + a);
            Console.WriteLine("b = " + b);
            Console.WriteLine("a * b = {0}",result);
        }

    }
}

これを実行すると、以下のようになる。

実行結果の例
a=5   ← 発生した乱数を表示
b=2   ← 発生した乱数を表示
a * b = 10

このプログラムを以下のように改造しなさい。

① 三つ目の整数型変数cを用意し、a,b,に続き、"c="と画面に表示して、キーボードから値を代入させる。
② 関数Mul()を、3つの整数の積を求める関数に書き換える。

期待される実行結果の例
a=5   ← 発生した乱数を表示
b=2   ← 発生した乱数を表示
c=3   ← 発生した乱数を表示
a * b * c = 30

prob2-3.(難易度:★)

実行例にならい、1から10の2つ乱数を発生させ、以下に示し他静的メソッドを用いてそれぞれの数をたて、よこの■の数として、四角形を表示させるプログラムを作りなさい。

実行結果の例
たて:3   ← 発生した乱数を表示
よこ:5   ← 発生した乱数を表示

■■■■■
■■■■■
■■■■■   ← 縦3個、横5個の■マークを表示

ただし、静的メソッドの概要は以下のようにすること。

関数名Square
処理内容縦、横に指定された数の■マークを表示する。ただし、どちらかの値が0以下の場合は、何も表示しない。
引数整数の値×2(縦、横の値)
戻り値なし

prob2-4.(難易度:★★)

以下のプログラムは、カウンタークラスCounterを使用したプログラムである。このプログラムを、指定されたように変更しなさい。

プロジェクトProblemex2_4/Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Problemex2_4
{
    class Program
    {
        static void Main(string[] args)
        {
            Counter c1,c2;
            c1 = new Counter();
            c2 = new Counter();
            c1.Increment();
            c2.Increment();
            c2.Increment();
            c2.Reset();
            c1.Increment();
            c1.Increment();
            c2.Increment();
            Console.WriteLine("c1のカウント数:" + c1.Count);
            Console.WriteLine("c2のカウント数:" + c2.Count);
            Console.WriteLine("トータルのカウント数:" + (c1.Count + c2.Count));
        }
    }
}
Counter.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Problemex2_4
{
    class Counter
    {
        //  カウント
        private int count = 0;
        //  コンストラクタ
        public void Reset()
        {
            count = 0;
        }
        //  カウントのインクリメント
        public void Increment()
        {
            count++;
        }
        //  回数のプロパティ
        public int Count
        {
            get
            {
                return count;
            }
        }
    }
}
実行結果
c1のカウント数:3
c2のカウント数:1
トータルのカウント数:4

Program.csの25行目に出ている、c1.Count + c2.Countを、クラスCounterの静的プロパティによって出力できるようにプログラムを改造しなさい。その際、以下のようにクラスCounterを変更すること。

Counterクラスの変更ポイント
  1. 作成する静的プロパティの名前は、TotalCountとする。(戻り値はint)
  2. このメソッド内では、トータルのカウント回数を記録した静的フィールドを、totalCountとする。