プログラミング演習Ⅲ(2023)

【課題7-02】コレクション初期化子の練習2

プロジェクトタイプC#コンソールアプリ※
プロジェクト名Prac_7_02
ソリューション名PET7
ターゲットフレームワーク.NET 6.0 (長期的なサポート)
最上位レベルのステートメントを使用しない使用しない(チェックオン)

※ 「コンソールアプリ(.NET Framework)」ではないので注意せよ!

コレクション初期化子を用いて_に示す要素はじめから含む Dictionary<string, double>型の変数namedNumbersを宣言・初期化せよ.

作成する連想配列の内容
キー
"円周率"3.1415
"ネイピア数"2.7182
"黄金数"1.6180
"重力加速度"9.8066
"絶対零度"-273.1500
注意
  • この設問ではコンソール(黒画面)への表示処理を作る必要はない.

プログラムの概形は_のようにすること(必ず以下をコピーしProgram.cs全体を上書きすること).

テンプレートコード
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
namespace Prac_7_02
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 文字列に対して数値を関連付ける連想配列の宣言
            Dictionary<string, double> namedNumbers = /**************************************************/
                                                      /*                                                */
                                                      /*                     空欄                       */
                                                      /*                                                */
                                                      /*          設問に指定されている内容を            */
                                                      /*          はじめから含む連想配列を作成する      */
                                                      /*                                                */
                                                      /**************************************************/
                                                      ;

            // 表示処理(変更してはならない)
            foreach (var nn in namedNumbers)
            {
                Console.WriteLine($"{nn.Key} .... {nn.Value:0.0000}");
            }//foreach

            #region チェック (ここは決して変更しないこと)
            const double EPSILON = 1.0 / 512;
            var aType = namedNumbers.GetType();
            var gargs = aType.GetGenericArguments();
            if (!(aType.IsGenericType && gargs != null && gargs.Length == 2
                && gargs[0] == typeof(string) && gargs[1] == typeof(double)))
                throw new Exception($"変数 {nameof(namedNumbers)} の型が設問に指定されているものと異なる.");
            if (!(namedNumbers.Count == 5))
                throw new Exception($"変数 {nameof(namedNumbers)} に登録されているエントリーの数が設問に" +
                    $"指定されているものと異なる(期待: 5, 検出: {namedNumbers.Count})");
            if (!namedNumbers.Any(e => e.Key == "円周率" && Math.Abs(e.Value - 3.1415) < EPSILON))
                throw new Exception($"変数 {nameof(namedNumbers)}に「円周率」に対応するエントリーが" +
                    $"存在しないか,値が設問に指定されているものと異なる.");
            if (!namedNumbers.Any(e => e.Key == "ネイピア数" && Math.Abs(e.Value - 2.7182) < EPSILON))
                throw new Exception($"変数 {nameof(namedNumbers)}に「ネイピア数」に対応するエントリーが" +
                    $"存在しないか,値が設問に指定されているものと異なる.");
            if (!namedNumbers.Any(e => e.Key == "黄金数" && Math.Abs(e.Value - 1.6180) < EPSILON))
                throw new Exception($"変数 {nameof(namedNumbers)}に「黄金数」に対応するエントリーが" +
                    $"存在しないか,値が設問に指定されているものと異なる.");
            if (!namedNumbers.Any(e => e.Key == "重力加速度" && Math.Abs(e.Value - 9.8066) < EPSILON))
                throw new Exception($"変数 {nameof(namedNumbers)}に「重力加速度」に対応するエントリーが" +
                    $"存在しないか,値が設問に指定されているものと異なる.");
            if (!namedNumbers.Any(e => e.Key == "絶対零度" && Math.Abs(e.Value - -273.1500) < EPSILON))
                throw new Exception($"変数 {nameof(namedNumbers)}に「絶対零度」に対応するエントリーが" +
                    $"存在しないか,値が設問に指定されているものと異なる.");
            #endregion

        }// end of Main()

    }// end of class Program

}// end of namespace

正しく実装できた場合,実行結果は_のようになる.

円周率 .... 3.1415
ネイピア数 .... 2.7182
黄金数 .... 1.6180
重力加速度 .... 9.8066
絶対零度 .... -273.1500
実行結果

ヒント

なし

Last updated on 2023-11-22
Published on 2023-11-22

Powered by Hugo. Theme by TechDoc. Designed by Thingsym.