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

【課題6-02】連想配列の練習 - その1

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

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

文字列に対して実数を対応付ける連想配列を作成し,後述するエントリーを追加せよ.

注意
  • この設問ではコンソール(黒画面)への表示処理を作る必要はない.

_にはnamedNumbersという名前の,連想配列型の変数が宣言されている. この連想配列は文字列(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
56
57
namespace Prac_6_02
{
    internal class Program
    {
        static void Main(string[] args)
        {
            // 連想配列の宣言
            Dictionary</*** 空欄1 ***/, /*** 空欄2 ***/> namedNumbers = /*** 空欄3 ***/;

            /************************************************************/
            /*                                                          */
            /*                         空欄4                            */
            /*                                                          */
            /*              設問に指定されたエントリーを                */
            /*          連想配列の変数 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-14
Published on 2023-11-14

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