【課題6-04】連想配列の練習 - その3
プロジェクトタイプ | C#コンソールアプリ※ |
---|
プロジェクト名 | Prac_6_04 |
---|
ソリューション名 | PET6 |
---|
ターゲットフレームワーク | .NET 6.0 (長期的なサポート) |
---|
最上位レベルのステートメントを使用しない | 使用しない(チェックオン) |
---|
_のテンプレートコードでは,あらかじめDateTime
型の
変数targetDate
が宣言・初期化されている(中身は秘密).
【課題6-03】で作成した連想配列holyDays
のなかに,変数targetDate
に
格納された日付データに対応する エントリーが存在するかどうかをチェック するプログラム作成せよ.
存在する場合は,その日付に加えて対応付けられた文字列を表示せよ .
注意
- この設問を解くには先に以下の課題を完了する必要がある.
- 後述の空欄は前提課題の回答と 全く同じ にすること(変えてはならない).
表示の際は,出力結果のように_の形式で表示すること.
その日付に対応するエントリーが存在する場合
targetDate
(←に対応する文字列
)
- 凡例
targetDate
- 変数
targetDate
の値.「年4桁
-
月2桁
-
日2桁
」のフォーマットで表示すること.
(
←に対応する文字列
- 連想配列
holyDays
に含まれている,targetDate
に対応する文字列.
)
- 改行
それ以外の場合
targetDate
(なし)
- 凡例
targetDate
- 変数
targetDate
の値.「年4桁
-
月2桁
-
日2桁
」のフォーマットで表示すること.
(なし)
- 文言.半角開き丸カッコ + "なし" + 半角閉じ丸カッコ
- 改行
出力フォーマットなお,仮に変数の内容が変更されたとしても正しく動作するようにすること.
プログラムの概形は_のようにすること(必ず以下をコピーし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
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
| namespace Prac_6_04
{
class Program
{
static void Main(string[] args)
{
// 連想配列の宣言(【課題6-03】と同じ)
Dictionary</*** 空欄1 ***/, /*** 空欄2 ***/> holyDays = /*** 空欄3 ***/;
/************************************************************/
/* */
/* 空欄4 */
/* */
/* 設問に指定されたエントリーを */
/* 連想配列の変数 holyDays に登録する. */
/* 【課題6-03】と同じ */
/* */
/************************************************************/
// チェック対象の DateTime 型の変数
DateTime targetDate = GetRandomDate();
/************************************************************/
/* */
/* 空欄5 */
/* */
/* 連想配列の変数 holyDays に */
/* 変数 targetDate に格納された日付に */
/* 対応するエントリーがあるかどうかをチェックし, */
/* 設問に指定されたフォーマットで表示を行う. */
/* */
/************************************************************/
#region チェック (ここは決して変更しないこと)
var aType = holyDays.GetType();
var gargs = aType.GetGenericArguments();
if (!(aType.IsGenericType && gargs != null && gargs.Length == 2
&& gargs[0] == typeof(DateTime) && gargs[1] == typeof(string)))
throw new Exception($"変数 {nameof(holyDays)} の型が設問に指定されているものと異なる.");
if (!(holyDays.Count == 5))
throw new Exception($"変数 {nameof(holyDays)} に登録されているエントリーの数が" +
$"設問に指定されているものと異なる(期待: 5, 検出: {holyDays.Count})");
if (!holyDays.Any(e => e.Key.Ticks == 638345664000000000 && e.Value == "文化の日"))
throw new Exception($"変数 holyDaysに「文化の日」に対応するエントリーが" +
$"存在しないか,値が設問に指定されているものと異なる.");
if (!holyDays.Any(e => e.Key.Ticks == 638183232000000000 && e.Value == "昭和の日"))
throw new Exception($"変数 holyDaysに「昭和の日」に対応するエントリーが" +
$"存在しないか,値が設問に指定されているものと異なる.");
if (!holyDays.Any(e => e.Key.Ticks == 638188416000000000 && e.Value == "こどもの日"))
throw new Exception($"変数 holyDaysに「こどもの日」に対応するエントリーが" +
$"存在しないか,値が設問に指定されているものと異なる.");
if (!holyDays.Any(e => e.Key.Ticks == 638362944000000000 && e.Value == "勤労感謝の日"))
throw new Exception($"変数 holyDaysに「勤労感謝の日」に対応するエントリーが" +
$"存在しないか,値が設問に指定されているものと異なる.");
if (!holyDays.Any(e => e.Key.Ticks == 638186688000000000 && e.Value == "憲法記念日"))
throw new Exception($"変数 holyDaysに「憲法記念日」に対応するエントリーが" +
$"存在しないか,値が設問に指定されているものと異なる.");
#endregion
}// end of Main()
#region ここは決して変更しないこと
static Random sRandom = new Random(245);
static long NextLong(long max)
{
var bin = new byte[7];
sRandom.NextBytes(bin);
return (((long)bin[0]) | ((long)bin[1] << 8) | ((long)bin[2] << 16) | ((long)bin[3] << 24)
| ((long)bin[4] << 32) | ((long)bin[5] << 40) | ((long)bin[6] << 48)) % max;
}
static DateTime GetRandomDate() => new DateTime(638291664000000000 + NextLong(86400000000000)).Date;
#endregion
}// end of class Program
}// end of namespace
|
正しく実装できた場合,実行結果は_のようになる.
2023-11-23(勤労感謝の日)
実行結果ヒント
Last updated on 2023-11-14
Published on 2023-11-14