C# с нуля. Урок 4 — массивы и циклы. На примере решения мини задачи.

Изучаем сразу две важных темы: циклы и массивы. Одно без другого будет не очень полезно. Поэтому урок объединенный. Рассматриваем тему на примере маленькой, но забавной задачки — таблицы умножения. Показываю как, постепенно, с самой простой версии программы в пять шагов дойти до хорошего варианта решения задачи.

Исходный код к уроку

/*
              Задание от заказчика: составить таблицу умножения 5 на 5 с выводом на экран.
*/
        #region Вариант 1

        //таблица умножения 5 на 5 - без массивов
        Console.WriteLine("Таблица умножения 5 на 5 без массивов - решение \"в тупую\"");

        int x1_1, x1_2, x1_3, x1_4, x1_5;
        int x2_1, x2_2, x2_3, x2_4, x2_5;
        int x3_1, x3_2, x3_3, x3_4, x3_5;
        int x4_1, x4_2, x4_3, x4_4, x4_5;
        int x5_1, x5_2, x5_3, x5_4, x5_5;

        x1_1 = 1 * 1; x1_2 = 1 * 2; x1_3 = 1 * 3; x1_4 = 1 * 4; x1_5 = 1 * 5;
        x2_1 = 2 * 1; x2_2 = 2 * 2; x2_3 = 2 * 3; x2_4 = 2 * 4; x2_5 = 2 * 5;
        x3_1 = 3 * 1; x3_2 = 3 * 2; x3_3 = 3 * 3; x3_4 = 3 * 4; x3_5 = 3 * 5;
        x4_1 = 4 * 1; x4_2 = 4 * 2; x4_3 = 4 * 3; x4_4 = 4 * 4; x4_5 = 4 * 5;
        x5_1 = 5 * 1; x5_2 = 5 * 2; x5_3 = 5 * 3; x5_4 = 5 * 4; x5_5 = 5 * 5;

        Console.WriteLine($"\t1\t2\t3\t4\t5\t");

        Console.WriteLine($"1\t{x1_1}\t{x1_2}\t{x1_3}\t{x1_4}\t{x1_5}");
        Console.WriteLine($"2\t{x2_1}\t{x2_2}\t{x2_3}\t{x2_4}\t{x2_5}");
        Console.WriteLine($"3\t{x3_1}\t{x3_2}\t{x3_3}\t{x3_4}\t{x3_5}");
        Console.WriteLine($"4\t{x4_1}\t{x4_2}\t{x4_3}\t{x4_4}\t{x4_5}");
        Console.WriteLine($"5\t{x5_1}\t{x5_2}\t{x5_3}\t{x5_4}\t{x5_5}");
        Console.ReadLine();

        #endregion

        #region Подробнее о массивах

        int[] oneDimmension = new int[10];
        double[] doubleArray = {1.5, 22.11, 9.99};

        string stringIsArray = "Да, это тоже массив символов. Напоминаю!";
        char firstLetter = stringIsArray[0];

        //любой массив имеет длинну
        int arraySize = doubleArray.Length;
        arraySize = stringIsArray.Length;

        //массивы могут быть N мерными
        int[,] mTable = new int[3, 3] {
            {1,2,3},
            {4,5,6}, 
            {7,8,9}
        };

        double[,,] array3D = new double[3, 3, 3];

        array3D[0, 0, 0] = 0.5;
        array3D[0, 0, 1] = 0.9;
        array3D[1, 1, 1] = 1.2;

        //массивы массивов - зубчатый массив, несимметричный массив
        byte[][] months = new byte[12][];
        months[0] = new byte[31];//январь
        months[1] = new byte[29];//февраль
        months[2] = new byte[31];//март
        //...
        months[11] = new byte[31];//декабрь

        #endregion

        #region Вариант 2

        Console.WriteLine("Таблица умножения 5 на 5 с массивом - решение \"в тупую\"");

        int[,] m = new int[5, 5];

        m[0, 0] = 1 * 1; m[0, 1] = 1 * 2; m[0, 2] = 1 * 3; m[0, 3] = 1 * 4; m[0, 4] = 1 * 5;
        m[1, 0] = 2 * 1; m[1, 1] = 2 * 2; m[1, 2] = 2 * 3; m[1, 3] = 2 * 4; m[1, 4] = 2 * 5;
        m[2, 0] = 3 * 1; m[2, 1] = 3 * 2; m[2, 2] = 3 * 3; m[2, 3] = 3 * 4; m[2, 4] = 3 * 5;
        m[3, 0] = 4 * 1; m[3, 1] = 4 * 2; m[3, 2] = 4 * 3; m[3, 3] = 4 * 4; m[3, 4] = 4 * 5;
        m[4, 0] = 5 * 1; m[4, 1] = 5 * 2; m[4, 2] = 4 * 2; m[4, 3] = 5 * 4; m[4, 4] = 5 * 5;

        Console.WriteLine($"\t1\t2\t3\t4\t5\t");

        Console.WriteLine($"1\t{m[0, 0]}\t{m[0, 1]}\t{m[0, 2]}\t{m[0, 3]}\t{m[0, 4]}");
        Console.WriteLine($"2\t{m[1, 0]}\t{m[1, 1]}\t{m[1, 2]}\t{m[1, 3]}\t{m[1, 4]}");
        Console.WriteLine($"3\t{m[2, 0]}\t{m[2, 1]}\t{m[2, 2]}\t{m[2, 3]}\t{m[2, 4]}");
        Console.WriteLine($"4\t{m[3, 0]}\t{m[3, 1]}\t{m[3, 2]}\t{m[3, 3]}\t{m[3, 4]}");
        Console.WriteLine($"5\t{m[4, 0]}\t{m[4, 1]}\t{m[4, 2]}\t{m[4, 3]}\t{m[4, 4]}");

        Console.ReadLine();

        #endregion

        #region Циклы

        //возрастающий цикл от 0 до 10(невключительно)
        for (int i = 0; i < 10; i++)
        {
            if (i == 1 || i == 2) continue;//пропустит выполнение дальнейшего кода и перейдет к i = 2

            //тут код который выполняется в цикле
            //Console.WriteLine(i);
        }

        //убывающий цикл от 10 (невключительно) до 0 
        for (int i = 9; i >= 0; i--)
        {
            //Console.WriteLine(i);
        }


        //делать пока выполняется условие
        int k = 0;

        while (k<10)
        {
            //код будет выполнятся только если условие выполняется
            Console.WriteLine(k);
            k++;
        }


        do
        {
            //код будет выполнятся без проверки условия
            //т.е код выполнится хотя бы один раз

            Console.WriteLine(k);
            k++;
            //break;//прервет выполнение цикла

        } while (k<15);//делать пока выполняется условие


        string[] days = new string[7] {"Понедельник", "Вторник", "Среда","Четверг","Пятница","Суббота","Воскресенье"};

        foreach (string day in days)
        {
            //выведет дни недели в консоли
            Console.WriteLine(day);
        }


        #endregion

        #region Вариант 3

        Console.WriteLine("Таблица умножения 5 на 5 с массивом - циклы без вложенностей");

        int[,] a = new int[5, 5];

        for (int i = 0; i < 5; i++)
        {
            a[0, i] = 1 * (i+1);
        }
        for (int i = 0; i < 5; i++)
        {
            a[1, i] = 2 * (i+1);
        }
        for (int i = 0; i < 5; i++)
        {
            a[2, i] = 3 * (i+1);
        }
        for (int i = 0; i < 5; i++)
        {
            a[3, i] = 4 * (i+1);
        }
        for (int i = 0; i < 5; i++)
        {
            a[4, i] = 5 * (i+1);
        }

        for (int i = 0; i < 5; i++)
        {
            Console.Write($"\t{i+1}");
        }

        Console.WriteLine();//вставляем переход на новую строку

        for (int i = 0; i < 5; i++)
        {
            Console.WriteLine($"{i+1}\t{a[i, 0]}\t{a[i, 1]}\t{a[i, 2]}\t{a[i, 3]}\t{a[i, 4]}");
        }

        Console.ReadLine();

        #endregion

        #region Вариант 4

        Console.WriteLine("Таблица умножения 5 на 5 с массивом - вложенные циклы");

        int[,] z = new int[5, 5];

        for (int i = 0; i < 5; i++)
        {
            for (int j = 0; j < 5; j++)
            {
                z[i, j] = (i+1) * (j + 1);
            }
        }

        for (int i = 0; i < 5; i++)
        {
            Console.Write($"\t{i + 1}");
        }

        Console.WriteLine();//вставляем переход на новую строку

        for (int i = 0; i < 5; i++)
        {
            Console.Write($"{i + 1}");
            for (int j = 0; j < 5; j++)
            {
                Console.Write($"\t{z[j,i]}");
            }
            Console.WriteLine();//вставляем переход на новую строку
        }

        Console.ReadLine();

        #endregion

        #region Вариант 5 - самостоятельная работа

        Console.WriteLine("Таблица умножения N на N с массивом - вложенные циклы");

        int n = 9; //размерность таблицы умножения

        int[,] q = new int[n, n];

        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < n; j++)
            {
                q[i, j] = (i + 1) * (j + 1);
            }
        }

        for (int i = 0; i < n; i++)
        {
            Console.Write($"\t{i + 1}");
        }

        Console.WriteLine();//вставляем переход на новую строку

        for (int i = 0; i < n; i++)
        {
            Console.Write($"{i + 1}");
            for (int j = 0; j < n; j++)
            {
                Console.Write($"\t{q[j, i]}");
            }
            Console.WriteLine();//вставляем переход на новую строку
        }

        Console.ReadLine();

        #endregion

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *