講義メモ 後半

p.142 3次元以上の配列

・次元数に制限はないが、要素数が非常に多くになるので、処理効率に注意
・C#の多次元配列は要素数×要素数×要素数×…で増えるので、使わない要素が増えてしまうことがある
・以下は3次元の場合:
・宣言の書式: 型[,,] 配列名; //例: string[,,] names; 3次元配列namesの宣言
・生成の書式: 配列名 = new 型[要素数①,要素数②,要素数③]; //例: names = new string[4, 5, 6];
・宣言と生成は1文で行える 例:string[,,] names = new string[4, 5, 6];
・3次元配列の生成時にも初期値を与える(初期化する)ことが可能
・書式: 型[,,] 配列名 = {{{値,…},…},…};
 例: int[,,] n = {{{1,2,3},{4,5,6}},{{7,8,9},{10,11,12}}}; //2×2×3要素になる
・利用書式例: n[0,0,0]は1、n[1,1,2]は12
・n次元配列を用いるにはn重ループにすると良い
・2次元配列も同様だが、配列名.Lengthプロパティを用いると、次元とは無関係に全要素数が得られる。
・配列名.Rankプロパティを用いると、次元数が得られる。

p.143 array04.cs

//p.143 array04.cs
using System;
class array04 {
    public static void Main() {
        int[,,] ar = new int[2, 2, 3] {
            {{0,  1,  2}, //順に[0,0,0][0,0,1][0,0,2]
             {3,  4,  5}  //順に[0,1,0][0,1,1][0,1,2]
            },
            {{6,  7,  8}, //順に[1,0,0][1,0,1][1,0,2]
             {9, 10, 11}  //順に[1,1,0][1,1,1][1,1,2]
            }
        };
        Console.WriteLine("配列の次元 = {0}", ar.Rank); //次元数を表示
        Console.WriteLine("arの個数 = {0}", ar.Length); //要素数を表示
        for (int i = 0; i < 2; i++) { //1番目の添字
            for (int j = 0; j < 2; j++) { //2番目の添字
                for (int k = 0; k < 3; k++) { //3番目の添字
                    Console.Write("{0}, ", ar[i, j, k]); //順に表示
                }
            }
        }
        Console.WriteLine(); //改行
    }
}

p.144 ジャグ配列

・要素数の積ではなく、配列の配列によって多次元配列を表すのがジャグ配列
 ※ Javaの多次元配列はジャグ配列のみ
・型と意味が同じであれば要素数が異なる配列をまとめることができるので、使わない要素が増えてしまうことがない
 例: a[0][0],a[0][1],a[1][0],a[1][1],a[1][2],a[1][3],a[1][4]とできる
・ただし、初期化などの書式が煩雑になる
・以下は2次元の場合:
・宣言の書式: 型[][] 配列名; //例: string[][] names; ジャグ配列namesの宣言
・生成の書式: 配列名 = new 型[要素数][]; //末尾の要素数は自由なので指定不要
・宣言と生成は1文で行える 例:string[][] names = new string[4][];
・内側の配列の初期化が可能
・例: 
  int[][] n = new int[3][]; 
  n[0] = new int[1]{0}; 
  n[1] = new int[2]{1, 2}; 
  n[2] = new int[3]{1, 2, 3};
・例:上記を1行にできる
 var m = new int[3][]{ new int[1]{0}, new int[2]{1, 2}, new int[3]{1, 2, 3} };

提出:アレンジ演習:p.140 array03.cs

講義メモ

・p.133「配列とは」(つづき)で「配列の初期化」「配列のプロパティ」から

p.133 配列とは(再掲載+α)

・同じ型で同じ意味の変数を「●の■番目」としてまとめて扱える仕掛け。
・この●を配列(名)、■を添字またはインデクスという
・配列を構成するデータを要素、その数を要素数という
・配列の利用には宣言が必要で、それから、要素の数だけの領域を確保する生成を行う
・宣言の書式: 型[] 配列名; //例: string[] names; 文字列配列namesの宣言
・生成の書式: 配列名 = new 型[要素数]; //例: names = new string[100]; namesとして文字列100個分
・宣言と生成は1文で行える 例:string[] names = new string[100];
 ※ 宣言と生成は1文で行えば、宣言の型[]はvarでも良い

p.135(配列の要素の利用)(再掲載)

・配列名に続けて[添字]をつけることで、配列の要素にアクセスできる。
・添字は0からなので、要素数-1までになることに注意。
・配列名[要素数]は存在せず、アクセスすると異常終了してしまう。
・要素は変数と全く同様に利用できる。
 例: string[] names = new string[3]; names[0] = "Amuro"; names[1] = "Kai"; names[2] = "Ryu";

p.135(配列の初期化)

・変数と同様に配列の生成時に初期値を与える(初期化する)ことが可能
・この時、初期値の数を要素数できるので、要素数を省略して良い
・書式: 型[] 配列名 = {値,…};
 例: string[] ms = {"ザク","グフ","ドム"}; //3要素になる
・生成の書式の後ろに{値,…}を指定して初期化できるが、要素数と値の数が合ってないとエラー。

p.135(配列のプロパティ)

・C#の配列はクラス(第7章)と同様の「データと処理をもつオブジェクト」として実装されている
・よって、クラスの持つ処理の1種であるプロパティが利用できる
・配列のプロパティの1つがLengthで、これを用いると要素数がわかる
・これを用いると、配列の要素数が変わっても処理の記述が変わらない=変化に強いプログラムになる
・例: for (int i = 0; i < 配列.Length; i++) { 配列の全要素についての処理 }

p.136 average02.cs

 //p.136 average02.cs
using System;
class average02
{
    public static void Main()
    {
        int[] point = {70, 80, 50}; //int型の配列を3要素で初期化
        int sum = 0, no; //合計、要素数
        no = point.Length; //プロパティを用いて配列の要素数を得る(2回使うので前もって得ておく)
        for (int i = 0; i < no; i++) { //全要素no個について繰返す
            sum += point[i]; //合計に足しこむ
        }
        double average = (double)sum / no; //合計を要素数で割って実数にキャストして平均を得る
        Console.WriteLine("合計 = {0}, 平均 = {1:##.#}", sum, average);  //平均は小数点以下1桁で
    }
}

アレンジ演習:p.136 average02.cs

・要素数の変数を配列の要素数で初期化しよう
・また、平均の表示において平均値を得るようにしよう

作成例

//p.136 average02.cs
using System;
class average02
{
    public static void Main()
    {
        int[] point = {70, 80, 50}; //int型の配列を3要素で初期化
        int sum = 0, no = point.Length; //合計、要素数(プロパティを用いて得る)
        for (int i = 0; i < no; i++) { //全要素no個について繰返す
            sum += point[i]; //合計に足しこむ
        }
        Console.WriteLine("合計 = {0}, 平均 = {1:##.#}", sum, (double)sum / no);  //平均は小数点以下1桁で
    }
}

p.137 2次元配列

・C#には2種類の2次元配列があり、通常は●×■個の要素を持つのが2次元配列
・例えば階ごとの部屋数が決まっているダンジョンであれば「●階×■部屋」で表すことができる
・宣言の書式: 型[,] 配列名; //例: string[,] names; 2次元配列namesの宣言
・生成の書式: 配列名 = new 型[要素数①,要素数②]; //例: names = new string[4, 5]; namesとして文字列4×5個分
・宣言と生成は1文で行える 例:string[,] names = new string[4, 5];
・2次元配列の生成時にも初期値を与える(初期化する)ことが可能
・書式: 型[,] 配列名 = {{値,…},…};
 例: string[,] names = {{"ザク","グフ","ドム"},{"ガンダム","ガンタンク,"ガンキャノン"}}; //2×3要素になる
※ C/C++/Javaでは配列名[0][0]と表記するがC#では異なる。なお、この表記を用いるジャグ配列もある(後述)

p.138 array01.cs

//p.138 array01.cs
using System;
class array01
{
    public static void Main()
    {
        int[,] MyArray = new int[2,3]; //2×3要素の2次元配列の生成
        int i, j; //繰り返し用
        MyArray[0, 0] = 1; //要素の値を代入
        MyArray[0, 1] = 2;
        MyArray[0, 2] = 3;
        MyArray[1, 0] = 4;
        MyArray[1, 1] = 5;
        MyArray[1, 2] = 6;
        for (i = 0; i < 2; i++) { //添字①について繰り返す(0,1)
            for (j = 0; j < 3; j++) { //添字②について繰り返す(0,1,2)
                Console.WriteLine("MyArray[{0}, {1}] = {2}", i, j, MyArray[i, j]);                    
            }
        }
    }
}

アレンジ演習:p.138 array01.cs

・forのカウンタ用変数をfor文の中で定義しよう
・要素の値を代入する6行を2重ループにしよう(表示用ループとは別に作る事)

作成例

//アレンジ演習:p.138 array01.cs
using System;
class array01
{
    public static void Main()
    {
        int[,] MyArray = new int[2, 3]; //2×3要素の2次元配列の生成
        for (int i = 0; i < 2; i++) { //添字①について繰り返す(0,1)
            for (int j = 0; j < 3; j++) { //添字②について繰り返す(0,1,2)
                MyArray[i, j] = i * 3 + j + 1; //要素の値を代入                
            }
        }
        for (int i = 0; i < 2; i++) { //添字①について繰り返す(0,1)
            for (int j = 0; j < 3; j++) { //添字②について繰り返す(0,1,2)
                Console.WriteLine("MyArray[{0}, {1}] = {2}", i, j, MyArray[i, j]);                    
            }
        }
    }
}

p.139 12行目正誤

・誤「全部の要素の初期値を書く必要はありません。初期値が指定されていない要素は0で初期化されます」
・正「指定された要素数と、初期値数が合っていないとエラーになります(p.135参照)」

p.139 array02.cs

//p.139 array02.cs
using System;
class array01
{
    public static void Main()
    {
        int[,] MyArray = { { 1,2,3 },{ 4,5,6 } }; //2×3要素の2次元配列の初期化
        for (int i = 0; i < 2; i++) { //添字①について繰り返す(0,1)
            for (int j = 0; j < 3; j++) { //添字②について繰り返す(0,1,2)
                Console.WriteLine("MyArray[{0}, {1}] = {2}", i, j, MyArray[i, j]);                    
            }
        }
    }
}

p.140 array03.cs

//p.140 array03.cs
using System;
class array03 {
    public static void Main() {
        string[,] Name = new string[2, 5] { //2×5の2次元配列の初期化
            {"田中六郎", "吉田一郎", "太田太郎", "粂井康孝", "岡田三郎"},
            {"横田芳子", "池田和子", "目黒貴和子", "武田信子", "園田淳子"}
        };
        int MyClass, No; //作業用
        string strClass, strNo; //入力用
        while (true) { //無限ループ
            Console.Write("クラスは---");
            strClass = Console.ReadLine();
            if (strClass.Length >= 2) { //入力文字列の長さが2以上?
                Console.WriteLine("入力は1桁のみです");
                continue; //これ以降をスキップして(breakせずに)次の繰り返しへ
            }
            if (Char.IsNumber(strClass, 0) != true) { //文字列の0文字目が数字ではない?
                Console.WriteLine("数字を入力してください");
                continue; //これ以降をスキップして(breakせずに)次の繰り返しへ
            }
            MyClass = Int32.Parse(strClass); //整数に変換
            if (MyClass <= 0 || MyClass >= 3) { //0以下または3以上ならば
                Console.WriteLine("クラスは1組か2組です");
                continue; //これ以降をスキップして(breakせずに)次の繰り返しへ
            }
            break; //ここまでのチェックを通過した=OKなので無限ループを抜ける
        }
        while (true) { //無限ループ
            Console.Write("出席番号は---");
            strNo = Console.ReadLine();
            if (strNo.Length >= 2) { //入力文字列の長さが2以上?
                Console.WriteLine("入力は1桁のみです");
                continue; //これ以降をスキップして(breakせずに)次の繰り返しへ
            }
            if (Char.IsNumber(strNo, 0) != true) {//文字列の0文字目が数字ではない?
                Console.WriteLine("数字を入力してください");
                continue; //これ以降をスキップして(breakせずに)次の繰り返しへ
            }            
            No = Int32.Parse(strNo);//整数に変換
            if (No <= 0 || No >= 6) { //0以下または6以上ならば
                Console.WriteLine("出席番号は1番から5番までです");
                continue; //これ以降をスキップして(breakせずに)次の繰り返しへ
            }
            break; //ここまでのチェックを通過した=OKなので無限ループを抜ける
        }
        Console.WriteLine("{0}クラスの出席番号{1}番は{2}さんです",
                strClass, strNo, Name[MyClass - 1, No - 1]); //添字にするために双方から-1すること
    }
}

アレンジ演習:p.140 array03.cs

・現状では何も入力しないでEnterするとChar.IsNumberメソッドで異常終了してしまう。
・「if (●.Length >= 2) { //入力文字列の長さが2以上?」を「if (●.Length != 1) { //入力文字列の長さが1ではない?」と書き換えて解決しよう。
・また1文字であることが確定した後であれば、クラスは「"1"でも"2"でもない?」、出席番号は「先頭文字が'1'未満または'5'超ならば」と記述できることを確認しよう。

作成例

//p.140 array03.cs
using System;
class array03 {
    public static void Main() {
        string[,] Name = new string[2, 5] { //2×5の2次元配列の初期化
            {"田中六郎", "吉田一郎", "太田太郎", "粂井康孝", "岡田三郎"},
            {"横田芳子", "池田和子", "目黒貴和子", "武田信子", "園田淳子"}
        };
        int MyClass, No; //作業用
        string strClass, strNo; //入力用
        while (true) { //無限ループ
            Console.Write("クラスは---");
            strClass = Console.ReadLine();
            if (strClass.Length != 1) { //【変更】入力文字列の長さが1ではない?
                Console.WriteLine("入力は1桁のみです");
                continue; //これ以降をスキップして(breakせずに)次の繰り返しへ
            }
            if (!(strClass == "1" || strClass == "2")) { //【変更】文字列が"1"でも"2"でもない?
                Console.WriteLine("クラスは1組か2組です");
                continue; //これ以降をスキップして(breakせずに)次の繰り返しへ
            }
            MyClass = Int32.Parse(strClass); //整数に変換
            break; //ここまでのチェックを通過した=OKなので無限ループを抜ける
        }
        while (true) { //無限ループ
            Console.Write("出席番号は---");
            strNo = Console.ReadLine();
            if (strNo.Length != 1) { //【変更】入力文字列の長さが1ではない?
                Console.WriteLine("入力は1桁のみです");
                continue; //これ以降をスキップして(breakせずに)次の繰り返しへ
            }
            if (strNo[0] < '1' || strNo[0] > '5') { //【変更】先頭文字が'1'未満または'5'超ならば
                Console.WriteLine("出席番号は1番から5番までです");
                continue; //これ以降をスキップして(breakせずに)次の繰り返しへ
            }
            No = Int32.Parse(strNo);//整数に変換
            break; //ここまでのチェックを通過した=OKなので無限ループを抜ける
        }
        Console.WriteLine("{0}クラスの出席番号{1}番は{2}さんです",
                strClass, strNo, Name[MyClass - 1, No - 1]); //添字にするために双方から-1すること
    }
}

今週の話題

販売本数ランキング 今回トップも「ゼルダの伝説 ティアーズ オブ ザ キングダム(Switch)」GO!
減収減益のスクウェア・エニックス、次なる成長戦略はM&A?【ゲーム企業の決算を読む】GO!
Diarkis、ゲーム開発者向け「GTMF 2023」にて出展・登壇―ミドルウェア「Diarkis」を紹介 GO!
3Dスキャン活用や『Roblox』企業事例など紹介ーnewtrace、「第3回XR総合展 夏」に出展 GO!
NVIDIAがUnreal Engine 5.2向けの「NVIDIA DLSS 3」プラグインをリリース GO!

NovelAI、“リークモデル”に「法的措置を取る可能性」 SNSで方針明かす GO!
「ブルアカ」緊急メンテ32時間で終了、一部データは巻き戻し……詫び石4320個など“ヤケクソ補てん”話題 GO!

前回のコメント

・今日で、制御文のところが終わりました。3種類くらいの繰り返す文を習って、どれも処理は似てるような感じ
ですので使い分けができるように頑張りたいと思いました。
・練習問題ではBMIが結構出てくるので、問題文をみてぱっと文がかけるように頑張りたいと思いました。

 是非。応援します。

・BMI好きなんですかねw

 そうかもしれませんね。私も切実ですし(笑)。

講義メモ 後半

p.132 練習問題1 ヒント

・BMI=体重÷(身長×身長) なので、これが22となる体重は 22×身長×身長 で得られる
・この身長はメートル単位なのでセンチメートル単位にすると、22×(身長cm÷100)×(身長cm÷100)
・この式を身長=160から、身長<=180である間、身長をインクリメントしながら繰り返し、
 その中で身長と体重を表示すれば良い

作成例

//p.132 練習問題1
using System;
class ex0501 {
    public static void Main() {
        for (double height = 160; height <= 180; height++) { //身長160~180で+1しながら繰返す
            double weight = 22 * (height / 100) * (height / 100); //BMIが22となる体重を得る
            Console.WriteLine("身長 = {0}, 体重 = {1}", height, weight); //身長体重を表示
        }
    }
}

p.132 練習問題2 ヒント

・合計用の変数sumを0で初期化しておく
・コンソールから整数nを入力することを、1以上の値が入力されるまで繰返す
・カウント用の変数iを1から、iがn以下である間、iを+1しながら、下記を繰返す
 ・sumにiの値を足しこむ
・sumの値を表示

作成例

//p.132 練習問題2
using System;
class ex0502 {
    public static void Main() {
        int n = 0, sum = 0; //入力用と合計用の変数
        do { //繰返し開始
            Console.Write("1以上の値:"); n = int.Parse(Console.ReadLine());
        } while (n < 1); //1以上の値が入力されるまで繰返す
        for(int i = 0; i < n; i++) { //iがn以下である間、iを+1しながら
            sum += i; //合計
        }
        Console.WriteLine("合計は{0}", sum); //合計を表示
    }
}

第5章 配列

p.133 配列とは

・同じ型で同じ意味の変数を「●の■番目」としてまとめて扱える仕掛け。
・この●を配列(名)、■を添字またはインデクスという
・配列を構成するデータを要素、その数を要素数という
・配列の利用には宣言が必要で、それから、要素の数だけの領域を確保する生成を行う
・宣言の書式: 型[] 配列名; //例: string[] names; 文字列配列namesの宣言
・生成の書式: 配列名 = new 型[要素数]; //例: names = new string[100]; namesとして文字列100個分
・宣言と生成は1文で行える 例:string[] names = new string[100];

p.135(配列の要素の利用)

・配列名に続けて[添字]をつけることで、配列の要素にアクセスできる。
・添字は0からなので、要素数-1までになることに注意。
・配列名[要素数]は存在せず、アクセスすると異常終了してしまう。
・要素は変数と全く同様に利用できる。
 例: string[] names = new string[3]; names[0] = "Amuro"; names[1] = "Kai"; names[2] = "Ryu";

提出:p.132 練習問題2

講義メモ

アレンジ演習:p.121 sin01.cs その2「コサイン」

・SinをCosに変えてコサインを表示しよう
・0度から180度のサインは0.0~1.0だが、コサインは-1.0から1.0になる
・そこで、
  サインの値が      1.0の時を50として、*の数を決める、のを
 コサインの値が+1.0が2.0の時を50として、*の数を決める、としよう。

作成例

//アレンジ演習:p.121 sin01.cs
using System;
class sin01 {
    public static void Main() {
        double s; //計算用(角度ごとのsin値を格納する)
        //0度から180度(Math.PI)まで180÷45=4度ごとのラジアン値を求めて繰返す
        for (double a = 0.0; a <= Math.PI; a += Math.PI / 45.0) { //1の段から9の段について繰返す
            s = Math.Cos(a); //【変更】コサイン値を得る
            Console.Write("{0,7:#.00000}:", s); //小数点以下5桁まで全7桁でコサイン値を表示
            //コサイン値が1の時に50回になるように繰返す
            for (int i = 1; i <= Math.Round((s + 1) * 25); i++) { //【変更】
                Console.Write("*"); //コサイン値に比例する数だけ"*"を表示
            }
            Console.WriteLine(); //最期の"*"後に改行
        }
    }
}

p.122 while文

・for文の継続条件のみを指定できる繰り返し文
・主に、回数指定ではなく、なんらかの条件が成立している間は何度でも繰返す場合に用いる
・なお、for文で書かれたものは全てwhile文で記述できる
・for文と同様に前判定繰り返しなので、内容が1度も実行されない場合があるときに便利

p.124 while01.cs

//p.124 while01.cs
using System;
class while01 {
    public static void Main() {
        int i = 0;
        while (i < 100) { //100未満である間繰返す
            Console.WriteLine("i = {0,3}", i); //3桁で表示
            i++;
        }
    }
}

アレンジ演習:p.124 while01.cs

・for文にしてみよう

作成例

//アレンジ演習:p.124 while01.cs
using System;
class while01 {
    public static void Main() {
        for (int i = 0 ;i < 100; i++) { //0からカウントアップしながら100回繰返す
            Console.WriteLine("i = {0,3}", i); //3桁で表示
        }
    }
}

p.125 while文を使った無限ループ

・for(;;)と同様に、while(true)とすると無限ループにできる
 ※ C/C++等のようにwhile(1)とすることはできない
・for(;;)と同様に、break文で脱出することができる

p.125(フラグとして用いるbool型変数)

・0(false)または1(true)しか取らない変数(の用途)にフラグがある。オン/オフの状態を保持するためのもので、
 C/C++等ではint型の変数を用いることがあった
・C#ではbool型変数を用いることが出来、トラブルを回避または軽減できる
・p.125 menu01.csでは、終了フラグbENDを定義して、メニューから終了が選ばれた場合に、終了する旨を表示してから
 抜ける方式を実現している。
・また、if(bool型変数) や、while(bool型変数)、for(;bool型変数;)と比較演算式の代わりも利用できる
 例: bool y = true; if(y){…} , while(y){…} , for(;y;){…}

p.125 menu01.cs

//p.125 menu01.cs
using System;
class menu01 {
    public static void Main() {
        bool bEnd = false; //終了フラグを定義してオフにしておく
        while (true) { //無限ループ
            Console.WriteLine("***** Menu *****");
            Console.WriteLine("0:終了");
            Console.WriteLine("1:ファイル");
            Console.WriteLine("2:編集");
            Console.WriteLine("****************");
            Console.Write("選択---- ");
            string strAns = Console.ReadLine();
            switch (strAns) { //文字列変数の値に応じて分岐
                case "0": bEnd = true; break; //switch文を抜けるため
                case "1": Console.WriteLine("ファイルが選択されました"); break;
                case "2": Console.WriteLine("編集が選択されました");     break;
                default:  Console.WriteLine("入力に間違いがあります");   break;
            }
            Console.WriteLine(); //改行           
            if (bEnd) { //終了フラグが立っていたら(bool型変数なので条件式などと同様)
                Console.WriteLine("それでは、このプログラムを終了します");
                break; //whileの繰り返しを抜けるため
            }
        }
    }
}

p.127 do while文

・単にdo文ともいい、唯一の後判定繰り返し構文。
・繰り返し内容を1度は実行しないと繰り返しを継続すべきか決められない場合などに便利
・よって「入力値が範囲外である間繰返す=範囲内になるまで抜けられない」場合に用いることが多い
・書式: do {繰り返し内容} while(継続条件); //末尾にセミコロンが必要

p.128 do_while01.cs

//p.128 do_while01.cs
using System;
class do_while01 {
    public static void Main() {
        int i = 10;
        do { //繰り返し開始
            Console.WriteLine("i = {0}", i); //この内容は必ず1回以上実行される
        } while (i > 20); //繰り返しを続けるか判断する
    }
}

アレンジ演習:p.106 bmi01.cs

・身長および体重において正の数が入力されるまで再入力を繰返させるようにしよう
実行例
身長(cm):0
身長(cm):-10
身長(cm):170
体重(kg):0
体重(kg):60
BMI = 20.8
BMIは25未満です
・ヒント:do-whileが2つ必要

作成例

//アレンジ演習:p.106 bmi01.cs
using System;
class bmi01 {
    public static void Main() {
        double bl, bw; //【移動】
        do { //【追加】繰返し開始
            Console.Write("身長(cm):");
            bl = Convert.ToDouble(Console.ReadLine()); //【変更】
        } while (bl <= 0);//【追加】0または負の数が入力されている間繰返す(先に進めない)
        do { //【追加】繰返し開始
            Console.Write("体重(kg):");
            bw = Convert.ToDouble(Console.ReadLine()); //【変更】
        } while (bw <= 0);//【追加】0または負の数が入力されている間繰返す(先に進めない)
        double bmi = bw / Math.Pow((bl / 100.0), 2.0);
        Console.WriteLine("BMI = {0:##.#}", bmi);
        if (bmi >= 25.0) {
            Console.ForegroundColor = ConsoleColor.Red;
            Console.WriteLine("BMIが25以上です!!");
            Console.ForegroundColor = ConsoleColor.Gray;
        } else {
            Console.WriteLine("BMIは25未満です");
        }
    }
}

※ p.128「goto文」はほとんどの業務において使用禁止なので説明は割愛
p.130 continue文

・breakと異なり、現在実行中の繰り返しの後続部分をスキップするという意味
・いわば「次行こう、次」の意味
・よって、if文で代用できる場合が多いがスキップしたい条件が複雑な場合に用いると便利
例:
for(…) {
  if(①) {
    if(②) {
     処理A
  } else {
   contine; //①であり②でなければ処理Bと処理Cは行わずに次へ 
  }
  処理B
 }
 処理C
}

p.130 continue01.cs

//p.130 continue01.cs 0から100未満の2の倍数の合計を求める
using System;
class continue01 {
    public static void Main() {
        int sum = 0;
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) { //iを2で割って余りが0かどうか(偶数かどうか)
                sum += i;
            } else { //iが奇数の場合
                continue; //続きは行わずに次の繰返しへ
            }
            //iが奇数の場合はcontinueされるので次の行は実行されません
            Console.WriteLine("i = {0, 2}, sum = {1, 4}", i, sum);
        }
        Console.WriteLine("合計は {0}です", sum);
    }
}

アレンジ演習:p.130 continue01.cs①

・continueを用いない方が見やすいプログラムになることを確認しよう

作成例

//アレンジ演習:p.130 continue01.cs 0から100未満の2の倍数の合計を求める
using System;
class continue01 {
    public static void Main() {
        int sum = 0;
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) { //iを2で割って余りが0かどうか(偶数かどうか)
                sum += i;
                Console.WriteLine("i = {0, 2}, sum = {1, 4}", i, sum);
        }
        }
        Console.WriteLine("合計は {0}です", sum);
    }
}

アレンジ演習:p.130 continue01.cs②

・このままではcontinueを用いない方が見やすいプログラムになってしまうので改良しよう
・iが奇数の場合、iが11の倍数であればループを抜け、でなければ次の繰り返しに進むするようにしてみよう
悪い例:
if (i % 2 == 0) {
  sum += 1;
} else if (i % 11 == 0) {
  break;
}
Console.WriteLine(…); //iが奇数で11の倍数ではない場合に実行してしまう

作成例

//アレンジ演習:p.130 continue01.cs 0から11未満の2の倍数の合計を求める
using System;
class continue01 {
    public static void Main() {
        int sum = 0;
        for (int i = 0; i < 100; i++) {
            if (i % 2 == 0) { //iを2で割って余りが0かどうか(偶数かどうか)
                sum += i; //合計に足しこむ
            } else if (i % 11 == 0) { //iが11の倍数?
                break; //繰り返しを抜ける
            } else {
                continue; //続きは行わずに次の繰返しへ
            }
            //iが奇数の場合はbreakまたはcontinueされるので次の行は実行されない
            Console.WriteLine("i = {0, 2}, sum = {1, 4}", i, sum);
        }
        Console.WriteLine("合計は {0}です", sum);
    }
}

今週の話題

販売本数ランキング 今回トップも「ゼルダの伝説 ティアーズ オブ ザ キングダム(Switch)」GO!
XR関連の最新動向を紹介―エルザ ジャパンが「ELSA XRプライベートセミナー」開催 GO!
マイクロソフト、現在開発中のゲームはXbox One世代に対応しない方針―ついに世代交代が進むか? GO!
AIによるテストでゲームQAを効率化…AIQVE ONE、ゲーム開発者向けビジネスイベント「GTMF2023」で「Playable!」を紹介 GO!
ソニー、PS5ゲームをクラウドストリーミングでプレイ可能に。PS Plusプレミアム特典で提供へ GO!
さくら、生成AI向けのクラウドサービス提供へ 「NVIDIA H100」を2000基投入 GO!

Twitter、家賃滞納で退去を命じられる Google Cloud、AWSへの未払いに続き GO!
日経新聞、ウェビナー申込者の個人情報が丸見えに 氏名・年収など約3700人分 システムに設定ミス GO!

前回のコメント

・今日はforの文を勉強しましたが、for文はぱっとみると完成形が想像しづらくてかなり悩んじゃうなーと思いました。
 やはり慣れだと思うので、使いこなせるように練習しようと思いました。

 是非

・Math.〇〇系の文はThe数学って感じで頭がこんがりました。

 便利な道具ですので、必要な時に思い出してください。

・先生が仰っていたとおり、ITパスポートの方も勉強してみようと思いますのでなにかいい勉強法や
 おすすめの教材があったら教えていただきたいです!

 まずは、公式サイトにある過去問の模擬試験を1、2回分試してみましょう。
 この時「8問もパイロット問題があるので、知らない言葉や考え方が出題されていても気にしない」のがポイントです。
 それから。トータルで60%以上正解できるように学習&模擬試験を繰り返すと良いでしょう。
 テキストは非常に多くの対策本が出ていますので、ご自分に合うものを捜してみてください。
 電子書籍でも良いでしょう。
 ポイントは「現在のシラバスに対応していない古い本を買わない(2022年秋以降発行ならOK)」ことです。
 参考までに、講師が執筆協力している「1回で受かる!ITパスポート合格テキスト」’23年版もご覧ください。
 https://rundog.org/?p=805