Изучаем сразу две важных темы: циклы и массивы. Одно без другого будет не очень полезно. Поэтому урок объединенный. Рассматриваем тему на примере маленькой, но забавной задачки — таблицы умножения. Показываю как, постепенно, с самой простой версии программы в пять шагов дойти до хорошего варианта решения задачи.
Исходный код к уроку
/* Задание от заказчика: составить таблицу умножения 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
Приветствую!
Супер!!!
Пытался решить задачу и использовать 2 переменных вместо одной «n». То есть с переменными n и m, и представлялось, что в результате получится таблица не квадратная, а прямоугольная, например 6х8. Но не тут-то было, хотя с одинаковыми значениями n и m все работает.
Здравствуйте,Степан, я предполагал решение 5 таблицы путём того, что открывается консоль, ты выбираешь размерность таблицы и ты получаешь таблицу любого размера не лазя в код, но всё оказалось куда проще