なのログ

だから見てて下さい・・・俺の・・・変身

C#復習篇 vol.3

進めていきます。

こいつ→一週間C#

では目次。

Day5

~配列~

単純な配列(Sample501)

文法だけ貼り付けておきましょう。

(変数の型名)[] (変数名)= new (変数の型名)[配列の数];
int[] ary = new int[10];

みたいな。
何が言いたいかというと、これもまたDay1,2以上に馴染み深いシリーズ・・・。

と思ってナメていたら、「お、C#だ」みたいな見出しが続きました。

foreach(Sample504)

ということでなんか書こうとしたものの、
そもそも解説側にサンプルコードが1つあるだけでした。かなしい。

    string[] names = { "Jonathan", "Joseph", "Jotaro", "Josuke","Giorno", "Jolyne" };

    foreach(string name in names) {
        Console.WriteLine(name);
    }

なのでまあこっちも1回書いてターンエンド。

多次元配列(Sample505)

そして本命。
僕個人の感想かもですけど、
(ジャグ配列でない)多次元配列があるのは.NETっぽさの一つだな、と思っています。

    string[,] names_powers = { 
        {"Jonathan","Over Drive"}, 
        {"Joseph","Hermit Purple"},
        {"Jotaro","Star Platinum"},
        {"Josuke","Crazy Diamond"},
        {"Giorno","Gold Experience"},
        {"Jolyne","Stone Free"}
    };

    foreach(string elem in names_powers) {
        Console.WriteLine(elem);
    }

それにしても、何も考えずにforeachに突っ込んでしまうと
多次元配列である意味がないな・・・と思ったり;
まあ演習でなんかイイ例があるっしょ(雑)

ジャグ配列(Sample506)

昔ながらの(?)やつです。
(少なくとも、C育ちな部分がある自分にとっては)

要は「配列の配列」でしたね。サンプルを貼っておきます。

        static void Main(string[] args)
        {
            int[][] a = new int[][]{new int[]{0,1},new int[]{2},new int[]{3,4,5,6}};
            //  成分の表示
            for(int m = 0; m < a.Length; m++){
                for(int n = 0; n < a[m].Length; n++){
                    Console.Write(a[m][n]+" ");
                }
                Console.WriteLine();
            }
        }

まあおなじみのやつです。
このページだと、「次元それぞれで不揃いなサイズを持てる多次元配列」
みたいな紹介のされかたになっています。たしかに。

そいでは演習。

Day5 演習

13問ありました。またいくつか見繕います。

prob5-1,
prob5-3,
prob5-7,
prob5-13,

いきます。
(見てすぐに解決法が浮かばないものがあって多少焦るなのやつ氏)

    static void prob5_1() {
        var rnd = new Random();
        var a = new int[7];
        for (int cnt = 0; cnt < (a.Length); cnt++) {
            a[cnt] = rnd.Next(10);
            Console.Write("a[{0}]={1} ",cnt,a[cnt]);
        }
        Console.WriteLine("\n");
    }
    static void prob5_3() {
        var rnd = new Random();
        var data = new int[10];
        for (int cnt = 0; cnt < (data.Length); cnt++) {
            data[cnt] = rnd.Next(100);
            Console.Write("{0} ",data[cnt]);
        }
        Console.Write("\n奇数:");
        foreach (int elem in data) {
            if(elem % 2 == 0) Console.Write("{0} ", elem);
        }
        Console.Write("\n偶数:");
        foreach (int elem in data) {
            if (elem % 2 != 0) Console.Write("{0} ", elem);
        }
        Console.WriteLine("\n");
    }
    static void prob5_7() {
        var rnd = new Random();
        var data = new int[5];
        for (int cnt = 0; cnt < (data.Length); cnt++) {
            data[cnt] = rnd.Next(10);
            Console.Write("{0} ", data[cnt]);
        }
        int ave = (int)data.Average();
        Console.WriteLine("合計値:{0}", data.Sum());
        Console.WriteLine("平均値:{0}", ave);
        Console.Write("平均値より大きい:");
        foreach (int elem in data) {
            if (elem > ave) Console.Write("{0} ", elem);
        }
        Console.Write("\n平均値より小さい:");
        foreach (int elem in data) {
            if (elem < ave) Console.Write("{0} ", elem);
        }
        Console.WriteLine("\n");
    }
    static void prob5_13() {
        var rnd = new Random();
        var a = new int[3,3];
        int max = -1;
        int min = 10;

        for (int y = 0; y < (a.GetLength(0)); y++) {
            for (int x = 0; x < (a.GetLength(1)); x++) {
                a[y,x] = rnd.Next(0,9);
                Console.Write("{0} ",a[y, x]);
                max = (max < a[y, x]) ? a[y, x] : max;
                min = (min > a[y, x]) ? a[y, x] : min;
            }
            Console.Write("\n");
        }
        Console.WriteLine("最大値:{0}", max);
        Console.WriteLine("最小値:{0}", min);
    }

やりました。
f:id:nanoyatsu:20180930212218p:plain

「見てすぐに解決法が浮かばなかった」設問ですが、
prob5-3ですね。 ループ1回でやるのだという印象があったので、
「えっ奇数と偶数分けて持つまで起こす・・・?違くない・・・?」
となってしまって多少思考が止まっていました。

データ入力の部分とデータ処理の部分でちゃんと分けて考えていれば、
それはおかしいことだというのがすぐに浮かんだのかもしれんですね。
(↑この話が正しいのかもあんまりはっきりわかっていないものの)

これまたDay5,6と進めようかと思っていたんですが、
Day6でやっとこさクラス・オブジェクトの話題が出てくるようなので
ここで区切っておきます。

そいでは、また次回です。