Day23 ウォームアップ(10分)

広告

※10分の使い方は、「進め方(10分の使い方)」を参照
※生成AIは使いません
※全部できなくてOK
※昨日より1行多く書けたら成功です


今日の準備(ウォームアップの前に)

  1. Day23.cs を追加する(ソリューションエクスプローラーで、ソリューションの下にある プロジェクト「MiniPractice」を右クリック → 追加 → クラス → 名前を Day23.cs
  2. Program.cs を開き、Main 内の Day22.Run() を Day23.Run() に書き換える

最初に:コードの形を確認

次の形になっているか確認しましょう。

internal class Day23
{
    public static void Run()
    {
        // ここに書く
    }
}
  • 問題1〜3 の処理は必ず Run() の { } の中 に書きます
  • 発展 では、後述のとおり Run の外に メソッドを1つ 書いてもよいです(次のステップ

🔹 今日のルール

今日は Day23.cs を追加します。Day23.cs はソリューション内の 23番目のファイル(クラス) になります。

  • 問題1〜3 … Run メソッドの中だけで書きます(Run 以外のメソッドは作りません
  • 発展 … 条件判定を private static メソッド1つ にまとめます(Run の下に書きます)。メソッド名の例は問題文にあります
  • 発展以外に メソッドを増やさない(分割しすぎない)ようにします
  • 今は「形を揃える」時間です。中身より形を優先します

🔹 Day22 の振り返り(1分)

  • ||(または) と &&(かつ) … 問題文の「または」は ||、「かつ」は &&
  • 「以上」「以下」 … 以上は >=以下は <=範囲は >= と <= のペアにします(両方 >= にしない)。
  • for … 点数を数えるときは for (int i = 0; i < scores.Length; i++)配列名は問題文の scoreswords.Length で scores を回さない)。
  • 発展の合計 … sum += n;sum++ は合計の意味になりません。
  • 発展の表示順(Day22 まで) … (1) foreach で各値 (2) 合計を1回 (3) 平均を1回 (4) 最大を1回。平均の分母は list.Count合計・平均・最大を出すときに回すのは listscores 全体と取り違えない)。**今日(Day23)**は (5) 最小を1回 をこのあとに足します。最小も list だけを対象にします。
  • 最大の初期値(Day22 どおり) … int.MinValue から始めます(0 固定はデータによっては危険です)。
  • Add は1か所 … list を組み立てる for の中で list.Add(scores[i]) を重ねない(同じ条件で二重に足さない)。

🔹 今日のポイント

今日は Day22 と同じ型を、別データ・別の閾値で書きます。新しく足すのは次の1点です。

  1. 最小値(発展の最後) … 最大と同じく foreach で比較更新します。int min = int.MaxValue; から始め、n < minのとき更新します。

Day22 で学んだ次の3つも、そのまま使います。

  • 文字列(問題2) … 文字の長さの範囲に && で Contains を足す。
  • bool を返す小さなメソッド(発展) … 条件を private static bool にまとめ、Run から if (...) で呼び出す。
  • List の集約(発展) … 合計・平均・最大に続けて最小まで、list だけを対象にする。

メソッドの形 … Run の外に private static bool メソッド名(引数) を 1つ 書きます。
Run の中から if (メソッド名(scores[i])) のように呼び出します。

  • private … このクラス(Day23)の中だけで使う、という意味です(今は暗記でOKです)
  • static … Run と同じく、インスタンスを作らずに呼べる形にそろえます

進め方(10分の使い方)

  • 最初の5分:教科書・ノート・これまで自分が書いたコードも見ずに、自分の力だけで書いてみましょう。止まっても構いません。思い出そうとする時間が大事です。
  • 後半5分:教科書・ノート・これまで自分が書いたコードを見てOKです。「どこを見ればよいか」「どう直せばよいか」を考えながら、完成に近づけましょう。

1限の過ごし方(目安)

細かい指示は Slack・スライド・口頭 に従ってください(教室のホワイトボードなどに書かれた内容があれば、それも含みます)。

時間(目安)内容
0〜15分ウォームアップ(準備・今日の課題・提出・動作確認)。課題の進め方は下の**「進め方(10分の使い方)」**のとおりです。
15〜45分学習時間これまでの Day 課題(提出コードの見直し・未完成の続き)、教科書の自習・予習など。Slack・スライド・口頭の指示を最優先)
45〜50分振り返りなど(指示に従う)
  • 提出が終わったら(ウォームアップの途中でも可)… Commit/Push と Slack「Day23 完了」は提出ルールに従い、採点を待たず次の学習に進みます。結果の連絡はあとからあります。
  • 今日の課題は Day22 と同じ型で、数値とデータだけ違います。型に慣れる練習だと考えてください。

提出ルール(重要)

  • 提出A(最低ライン):問題1だけ動けばOK
  • 提出B(標準):問題1・2まで
  • 提出C(到達):問題1・2・3(余裕があれば発展)

※今日も「全部できる」より「動く形にそろえる」が目的です。

  • 提出方法:GitHub Desktop で Commit → Push してください。1問ごとでも、まとめて1回でもOKです。
  • Slack:「Day23 完了しました」と一言送ってください。

■ 問題1(基礎)

次の配列があります。

int[] nums = { 4, 8, 12, 16, 20, 24 };

この配列の要素を、foreach を使って1つずつ表示してください。


■ 問題2(文字列+範囲+&&Contains

次の配列があります。

string[] words = { "bus", "train", "car", "data", "info", "alpha", "game", "keyboard", "mouse", "screen" };

次のすべてを満たすものだけを表示してください。

  • 文字数が 5以上 かつ 8以下 である 
  • かつ、文字列に 小文字の a が1文字でも含まれるContains を使います)

ヒント:「以上」かつ「以下」 は && でつなぎます。さらに && s.Contains("a") のように、含むかどうかを足します。
例:if (s.Length >= 5 && s.Length <= 8 && s.Contains("a"))
Contains は、引数の文字列がその中に現れるかどうかを調べます。foreach の変数名は s でも word でも構いません。

※この配列の個数は 問題3の scores と同じとは限りません。問題3では scores.Length を使います。


■ 問題3(点数の「または」で個数)

次の配列があります。

int[] scores = { 40, 58, 49, 87, 89, 92, 44, 77 };

55未満 または 90以上 の点数がいくつあるかを数え、個数だけを1行で表示してください。

ヒント:int count = 0; をループのに置きます。for は for (int i = 0; i < scores.Length; i++) です。条件は
if (scores[i] < 55 || scores[i] >= 90) のとき count++;
「90以上」は >= 90 です(<= 90 と書かない)。
ループのに Console.WriteLine(count); を1回書きます。Length は scores.Length です(問題2の words と取り違えない)。


■ 発展(余裕がある人)

上の scores について、50未満 または 85以上 の値だけを Listに追加し、次の順序どおりに表示してください。

  1. 追加した各値を foreach で1行ずつ表示する
  2. それらの値の合計1回だけ表示する(ループの外で Console.WriteLine(sum);
  3. 続けて、平均1回だけ表示する(整数のままでよいです。Console.WriteLine(sum / list.Count); のように、合計 ÷ 個数 で求めます。今回のデータでは条件に合う値が1つ以上あるので、list.Count は 0 になりません)
  4. 続けて、それらの値の最大1回だけ表示する(list の中だけを対象にします)
  5. 続けて、それらの値の最小1回だけ表示する(list の中だけを対象にします)

最大の求め方(例) … int max = int.MinValue; を用意し、foreach (int n in list) で if (n > max) { max = n; } のように更新します。ループのに Console.WriteLine(max); を1回書きます。

最小の求め方(例) … int min = int.MaxValue; を用意し、foreach (int n in list) で if (n < min) { min = n; } のように更新します。ループのに Console.WriteLine(min); を1回書きます。

発展で追加するメソッド

次のような private static メソッド を Run の外Day23 クラスの中)に 1つ 書いてください。

  • メソッド名の例:IsExtensionTarget
  • 引数:int score
  • 戻り値:bool
  • 中身:score が 50未満 または 85以上 のとき true、そうでないとき false を return で返す

Run 内の for では、次のようにします(例)。

if (IsExtensionTarget(scores[i]))
{
    list.Add(scores[i]);
}

ヒント:var list = new List<int>(); で初期化し、for は i を 0 から scores.Length 未満まで合計・平均は foreach (int n in list) で sum += n;最大最小は別々の foreach (int n in list) でも、同じループにまとめても構いません(表示は「各値→合計→平均→最大→最小」の順にそろえればよいです)。Add(scores[i])(点数を入れる。添字 i を Add しない)。list を組み立てる for は1つにし、同じ条件で Add を二重に呼ばないようにします。問題3と発展を1つの for にまとめなくても別ループでOK です。


⚠️ つまずきやすい点

  • || と && … 「55未満 または 90以上」は ||。問題2は「5以上 かつ 8以下 かつ a を含む」なので、条件は &&でつなぎます。
  • 範囲の長さ … 「5以上かつ8以下」 は s.Length >= 5 && s.Length <= 8 です。両方 >= にしない(Day22 の「6以上かつ9以下」と同じ考え方です)。
  • Contains … s.Contains("a") のように書きます。別の配列と取り違えず、foreach の s に対して呼びます。
  • 90以上 … >= 90 です。<= 90 だと意味が違い、個数がずれます。
  • 85以上 … 発展のメソッド内でも >= 85 です。
  • 配列名 … 問題3・発展は scores と scores.Length。問題1の nums・問題2の words と混同しない。
  • count の表示 … ループのに Console.WriteLine(count); を必ず1回。
  • 発展 … 各値 → 合計 → 平均 → 最大 → 最小の順。合計は sum += n。最大・最小は list だけを見て更新(scores 全体と混同しない)。
  • 発展のメソッド … private static bool IsExtensionTarget(int score) の形。Run の閉じ括弧の下に書く(Run の中にネストしない。ローカル関数にしない)。
  • 発展の Add … scores[i] を Add する(i 自体を Add しない)。条件に合う処理は同じ for 内で1回だけ

🎯 今日の目的

  • Day22 と同じ型を、別のデータ・別の閾値で書ける
  • && で 文字数の範囲に加え、Contains で「含む」を書ける
  • || で点数の「または」を安定させ、>=(以上)と <=(以下) を取り違えない(90以上=>= 90
  • scores と scores.Length を、words と取り違えない
  • 発展で、条件を private static bool メソッド1つ にまとめ、Run から呼び出せる
  • list に対して 合計・平均・最大に続け、最小を foreach で比較更新できる(int.MaxValue から開始

次へ

次回のウォームアップは、講師から案内があります。

訪問数 18 回, 今日の訪問数 18回

広告

C#

Posted by hidepon