SlideShare a Scribd company logo
1 of 17
Download to read offline
Высшая школа экономики, Москва, 2013
www.hse.ru
Язык программирования C# и платформа
.NET.
Многомерные массивы
Массивы массивов
Максименкова Ольга Вениаминовна
Старший преподаватель
Кафедра управления разработкой программного обеспечения
МНОГОМЕРНЫЕ МАССИВЫ
• Матрицы
• Обработка матриц
ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
Одномерные массивы (напоминание)
Объявление ссылки
Описание с инициализацией
Описание и последующая
инициализация
int[ ] intArr; // ссылка на целочисленный массив
double[ ] arr; // ссылка на вещественный массив
int[ ] intArr = { 1, 3, -8, 19, 0, 11 };
double[ ] arr = { 3.14, 0.0, 0.5 };
int[ ] intArr; // ссылка
intArr = new int[5]; // выделение памяти
intArr[0] = -1;
intArr[1] = 12;
intArr[2] = 34;
intArr[3] = -23;
intArr[4] = 78;
int[ ] intArr; // ссылка
intArr = new int[5]; // выделение памяти
for (int i = 0; i < 5; i++) {
intArr[i] = i * i - 1;
Console.Write(intArr[i] + " ");
}
ФПК учителей НИУ ВШЭ 03.2013, Максименкова О.В.
ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
Матрицы (двумерные массивы). Индексы элементов матриц
int m = 5, n = 5
int[ , ] matr = new int[n, m]
Главная диагональ
Побочная диагональ
n
m
0
1
2
n -1
0 1 2 m -1
i
j
i = j
i > j
i < j
индексы
ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
Способы инициализации элементов матрицы
int[,] matr = new int[3, 4] { { 0, 1, 3, 4 }, { 5, 6, 7, 8 }, { 9, -1, -2, -3 } };
double[,] mtr = new double[10,15];
for (int i = 0; i < 10; i++) // цикл перебора строк (первый индекс)
for (int j = 0; j < 15; j++) // цикл перебора столбцов (второй индекс)
mtr[i, j] = (double)i/(j+1);
Описание с инициализацией
int[,] matr = new int { { 0, 1, 3, 4 }, { 5, 6, 7, 8 }, { 9, -1, -2, -3 } };
Заполнение матрицы при помощи циклов
Так:
Или так:
double[,] mtr = new double[10,15];
Console.Write("Test: " + mtr[1,5]);
for (int i = 0; i < 10; i++)
for (int j = 0; j < 15; j++)
mtr[i, j] = (double)i/(j+1);
Test: 0
double[,] mtr;
Console.Write("Test: " + mtr[1,5]);
ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
Перебор элементов матрицы
for (int i = 0; i < 5; i++) {
Console.WriteLine();
for (int j = 0; j < 6; j++) //столбец
Console.Write(mtr[i, j] + "t");
}
for(int j = 0; j < 6; j++) {
Console.WriteLine();
for (int i = 0; i < 5; i++) //строка
Console.Write(mtr[i, j] + "t");
}
int[,] mtr = new int[5,6];
for (int i = 0; i < 5; i++)
for (int j = 0; j < 6; j++)
mtr[i, j] = 2*i+j;
Перебираем
строки во
внешнем цикле
Перебираем
столбцы во
внешнем цикле
0 1 2 3 4 5
2 3 4 5 6 7
4 5 6 7 8 9
6 7 8 9 10 11
8 9 10 11 12 13
0 2 4 6 8
1 3 5 7 9
2 4 6 8 10
3 5 7 9 11
4 6 8 10 12
5 7 9 11 13
ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
Поэлементный вывод матрицы
int[,] mtr = new int[5,6];
for (int i = 0; i < 5; i++)
for (int j = 0; j < 6; j++)
mtr[i, j] = 2*i+j;
for (int i = 0; i < 5; i++) {
Console.WriteLine();
for (int j = 0; j < 6; j++)
Console.Write(mtr[i, j] + "t");
}
int nl = 0;
foreach (int item in mtr) {
if (nl++ % 6 == 0)
Console.WriteLine();
Console.Write(item + "t");
}
foreach (int line[] in mtr)
foreach(int item in line)
Console.Write(item + "t");
так -нельзя
Несоответствие типа!
Перебор двумя
циклами (по строкам
и стобцам)
Перебор одним
циклом: по всем
элементам
ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
Обработка элементов матрицы
ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
double[ , ] mtr = new double[N, M];
Random rnd = new Random();
for(int i =0;i <N;i++)
for (int j = 0; j < M; j++) {
mtr[i, j] = rnd.Next(100)+rnd.NextDouble();
}
// элементы главной диагонали
for (int i = 0; i < N; i++)
mtr[i, i] = 0;
int N, M;
do {
Console.Write("Введите количество строк ");
} while(!int.TryParse(Console.ReadLine(), out N)|N < 0);
do {
Console.Write("Введите количество столбцов ");
} while (!int.TryParse(Console.ReadLine(), out M) | M < 0);
// поэлементный вывод
for (int i = 0; i < N; i++) {
for (int j = 0; j < M; j++) {
Console.Write("{0:f3}t",mtr[i, j]);
}
Console.WriteLine();
}
МАССИВЫ МАССИВОВ
• Инициализация
• Поэлементный ввод
ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
Многомерные массивы. Инициализация элементов
int[ ][ ] matr = new int[3][ ] { new int[ ] { 0, 1, 3, 4 },
new int[ ] { 5, 6, 7, 8 },
new int[ ] { 9, -1, -2, -3 } };
int[ ][ ] matr = new int[3][ ];
matr[0] = new int[ ] { 0, 1, 3, 4 };
matr[1] = new int[ ] { 5, 6, 7 };
matr[2] = new int[ ] { -2, -3 };
Описание с инициализацией
Описание и последующая инициализация
Random rnd = new Random();
for (int i = 0; i < 3; i++) {
int M = rnd.Next(1, 6);
matr[i] = new int[M];
for (int j = 0; j < M; j++)
matr[i][j] = rnd.Next(101);
}
Заполнение массива массивов при помощи циклов
Random rnd = new Random();
for (int i = 0; i < 3; i++) {
int M = rnd.Next(1, 6);
for (int j = 0; j < M; j++)
matr[i][j] = rnd.Next(101);
}
ФПК учителей НИУ ВШЭ 03.2013, Максименкова О.В.
ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
Поэлементный вывод многомерного массива
foreach (int[ ] str in matr) {
Console.WriteLine();
foreach (int item in str)
Console.Write(item + "t");
}
foreach (int item in matr)
Console.Write(item + "t");
for (int i = 0; i < matr.Length; i++) {
Console.WriteLine();
for (int j = 0; j < matr[i].Length; j++)
Console.Write(matr[i][j]+"t");
}
int[ ][ ] matr = new int[3][ ] { new int[ ] { 0, 1, 3, 4 },
new int[ ] { 5, 6, 7, 8 },
new int[ ] { 9, -1, -2, -3 } };
Доступны и индексы и
значения элементов
Доступны только
значения элементов
ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
using System;
class Program {
static void Main( ) {
double[ ][ ] mtr = new double[5][ ]; // количество элемнтов (массивов) 5
Random rnd = new Random();
for (int i = 0; i < 5; i++) {
mtr[i] = new double[6]; // каждый массив-строка размером 6
for (int j = 0; j < 6; j++)
mtr[i][j] = rnd.NextDouble();
}
foreach (double[ ] lev1 in mtr) {
foreach (double lev2 in lev1)
Console.Write("{0:f3}t", lev2);
Console.WriteLine();
}
}
}
Матрица представлена массивом массивов
ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
using System;
class Program {
static void Main() {
int[ ][ ] triangle;
uint N; // количество уровней
do {
Console.Write("Задайте количество уровней: ");
} while(!uint.TryParse(Console.ReadLine(), out N));
triangle = new int[N][ ]; // в массиве будет N целочисленных массивов
for (int i = 0; i < triangle.Length; i++) { // перебор массивов
triangle[i] = new int[i + 1]; // каждый элемент массива - массив
for (int j = 0; j < triangle[i].Length; j++)
triangle[i][j] = i+1;
}
// вывод
foreach (int[ ] lev1 in triangle) {
foreach (int lev2 in lev1)
Console.Write(lev2 + " ");
Console.WriteLine();
}
}
}
Число элементов строки массива равно номеру строки
ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
Массив массивов для коэффициентов треугольника паскаля
14
1
1 1
1 2 1
1 … 2 12
…
ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
15
using System;
class Program {
static void Main( ) {
int[ ][ ] paskal; // ссылка на массив ссылок на массив
int n;
do Console.Write("Введите n: ");
while (!int.TryParse(Console.ReadLine(), out n) || n < 0);
paskal = new int[n + 1][ ]; // объект - массив пустых ссылок
Console.WriteLine("paskal.GetType()=" + paskal.GetType());
for (int i = 0; i < paskal.Length; i++) {
paskal[i] = new int[i + 1]; // объект - массив элементов типа int
paskal[i][0] = paskal[i][i] = 1;
for (int j = 1; j < i; j++)
paskal[i][j] = paskal[i - 1][j - 1] + paskal[i - 1][j];
}
foreach (int[ ] ar in paskal) { // перебор ссылок
foreach (int cnk in ar) // перебор элементов типа int
Console.Write("{0,4}", cnk);
Console.WriteLine();
}
}
ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
int[ ][,] arr; // каждый элемент массива - двумерный массив
int arrLength; // количество двумерных массивов в массиве
do {
Console.Write("Задайте количество двумерных массивов: ");
}while(!int.TryParse(Console.ReadLine(), out arrLength)||arrLength<1);
arr = new int[arrLength][,]; // массив из arrLenght двумерных
int dim1, dim2;
do {
Console.Write("Первое измерение: ");
} while (!int.TryParse(Console.ReadLine(), out dim1)||dim1<1);
do {
Console.Write("Второе измерение: ");
} while (!int.TryParse(Console.ReadLine(), out dim2) || dim2 < 1);
Random rnd = new Random();
for (int i = 0; i < arrLength; i++) {
arr[i] = new int[dim1, dim2]; // i-й элемент - матрица dim1xdim2
// заполняем каждую матрицу случайными числами от 20 до 50
for (int j = 0; j < arr[i].GetLength(0); j++)
for (int k = 0; k < arr[i].GetLength(1); k++)
arr[i][j, k] = rnd.Next(20, 51);
}
for (int i = 0; i < arr.Length; i++) {//вывод на экран массива двумерных массивов
for (int j = 0; j < arr[i].GetLength(0); Console.WriteLine(), j++)
for (int k = 0; k < arr[i].GetLength(1); k++)
Console.Write(arr[i][j, k] + "t");
Console.WriteLine();
} ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
101000, Россия, Москва, Мясницкая ул., д. 20
Тел.: (495) 621-7983, факс: (495) 628-7931
www.hse.ru

More Related Content

What's hot

Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Mikhail Kurnosov
 
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Nikolay Grebenshikov
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Mikhail Kurnosov
 
Лекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьЛекция 4: Стек. Очередь
Лекция 4: Стек. Очередь
Mikhail Kurnosov
 
Лекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиЛекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные списки
Mikhail Kurnosov
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Dima Dzuba
 
Статический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минутСтатический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минут
Andrey Karpov
 

What's hot (20)

Абстрактные типы данных, последовательности, списки
Абстрактные типы данных, последовательности, спискиАбстрактные типы данных, последовательности, списки
Абстрактные типы данных, последовательности, списки
 
Основы MATLAB. Лекция 1.
Основы MATLAB. Лекция 1.Основы MATLAB. Лекция 1.
Основы MATLAB. Лекция 1.
 
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировкиЛекция 2: Абстрактные типы данных. Алгоритмы сортировки
Лекция 2: Абстрактные типы данных. Алгоритмы сортировки
 
Основы MATLAB. Программирование
Основы MATLAB. ПрограммированиеОсновы MATLAB. Программирование
Основы MATLAB. Программирование
 
Программирование: от сложного к простому
Программирование: от сложного к простомуПрограммирование: от сложного к простому
Программирование: от сложного к простому
 
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
Лекция №2. Абстрактные типы данных. ООП. Предмет "Структуры и алгоритмы обраб...
 
Лекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графовЛекция 8. Графы. Обходы графов
Лекция 8. Графы. Обходы графов
 
Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)Лекция 1. Амортизационный анализ (amortized analysis)
Лекция 1. Амортизационный анализ (amortized analysis)
 
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
Игорь Кудрин, «Используем неизменяемые данные и создаем качественный код»
 
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building BlocksЛекция 8: Многопоточное программирование: Intel Threading Building Blocks
Лекция 8: Многопоточное программирование: Intel Threading Building Blocks
 
msumobi2. Лекция 1
msumobi2. Лекция 1msumobi2. Лекция 1
msumobi2. Лекция 1
 
Лекция 4: Стек. Очередь
Лекция 4: Стек. ОчередьЛекция 4: Стек. Очередь
Лекция 4: Стек. Очередь
 
Лекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные спискиЛекция 3: Бинарный поиск. Связные списки
Лекция 3: Бинарный поиск. Связные списки
 
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
 
Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”Михаил Матросов, “С++ без new и delete”
Михаил Матросов, “С++ без new и delete”
 
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Объектно-Ориентированное Программирование на C++, Лекции  3 и 4 Объектно-Ориентированное Программирование на C++, Лекции  3 и 4
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
 
1 вводное занятие
1 вводное занятие1 вводное занятие
1 вводное занятие
 
Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8. Объектно-ориентированное программирование. Лекция 7 и 8.
Объектно-ориентированное программирование. Лекция 7 и 8.
 
Статический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минутСтатический анализ: вокруг Java за 60 минут
Статический анализ: вокруг Java за 60 минут
 
Об особенностях использования значимых типов в .NET
Об особенностях использования значимых типов в .NETОб особенностях использования значимых типов в .NET
Об особенностях использования значимых типов в .NET
 

Viewers also liked

язык программирования с#
язык программирования с#язык программирования с#
язык программирования с#
Nitrosalat
 

Viewers also liked (10)

2. Операторы языка C#
2. Операторы языка C#2. Операторы языка C#
2. Операторы языка C#
 
Математические основы методов решений систем логических уравнений
Математические основы методов решений систем логических уравненийМатематические основы методов решений систем логических уравнений
Математические основы методов решений систем логических уравнений
 
Современные образовательные технологии в области компьютерных наук
Современные образовательные технологии в области компьютерных наукСовременные образовательные технологии в области компьютерных наук
Современные образовательные технологии в области компьютерных наук
 
[Maksimenkova_Neznanov] Peer Assessment to Programmers & Peer Assessment Syst...
[Maksimenkova_Neznanov] Peer Assessment to Programmers & Peer Assessment Syst...[Maksimenkova_Neznanov] Peer Assessment to Programmers & Peer Assessment Syst...
[Maksimenkova_Neznanov] Peer Assessment to Programmers & Peer Assessment Syst...
 
Абстрактные типы данных. Списки
Абстрактные типы данных. СпискиАбстрактные типы данных. Списки
Абстрактные типы данных. Списки
 
Презентация курса "Основы программирования" на C#
Презентация курса "Основы программирования" на C#Презентация курса "Основы программирования" на C#
Презентация курса "Основы программирования" на C#
 
Решение систем логических уравнений, ЕГЭ 23 информатика
Решение систем логических уравнений, ЕГЭ 23 информатикаРешение систем логических уравнений, ЕГЭ 23 информатика
Решение систем логических уравнений, ЕГЭ 23 информатика
 
Очистка данных на практике: мифы и легенты Excel и R
Очистка данных на практике: мифы и легенты Excel и RОчистка данных на практике: мифы и легенты Excel и R
Очистка данных на практике: мифы и легенты Excel и R
 
язык программирования с#
язык программирования с#язык программирования с#
язык программирования с#
 
Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)Программирование на языке C Sharp (СИ решетка)
Программирование на языке C Sharp (СИ решетка)
 

Similar to 4. Многомерные массивы и массивы массивов в C#

Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
Andrey Karpov
 
Опыт разработки статического анализатора кода
Опыт разработки статического анализатора кодаОпыт разработки статического анализатора кода
Опыт разработки статического анализатора кода
Andrey Karpov
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кода
Andrey Karpov
 
Лекция 10: Графы. Остовные деревья
Лекция 10: Графы. Остовные деревьяЛекция 10: Графы. Остовные деревья
Лекция 10: Графы. Остовные деревья
Mikhail Kurnosov
 
Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных весна 2014 лекция 3Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных весна 2014 лекция 3
Technopark
 
Массивы в Java
Массивы в JavaМассивы в Java
Массивы в Java
metaform
 
Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1
Technopark
 

Similar to 4. Многомерные массивы и массивы массивов в C# (20)

Progr labrab-4-2013-c++
Progr labrab-4-2013-c++Progr labrab-4-2013-c++
Progr labrab-4-2013-c++
 
Всё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программистаВсё о статическом анализе кода для Java программиста
Всё о статическом анализе кода для Java программиста
 
AlgoCollections (RUS)
AlgoCollections (RUS)AlgoCollections (RUS)
AlgoCollections (RUS)
 
Опыт разработки статического анализатора кода
Опыт разработки статического анализатора кодаОпыт разработки статического анализатора кода
Опыт разработки статического анализатора кода
 
статический анализ кода
статический анализ кодастатический анализ кода
статический анализ кода
 
Статический анализ кода
Статический анализ кода Статический анализ кода
Статический анализ кода
 
C++ refelection and cats
C++ refelection and catsC++ refelection and cats
C++ refelection and cats
 
3.8 Класс массива
3.8 Класс массива3.8 Класс массива
3.8 Класс массива
 
Лекция 10: Графы. Остовные деревья
Лекция 10: Графы. Остовные деревьяЛекция 10: Графы. Остовные деревья
Лекция 10: Графы. Остовные деревья
 
Сложности микробенчмаркинга
Сложности микробенчмаркингаСложности микробенчмаркинга
Сложности микробенчмаркинга
 
Красота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки PythonКрасота и изящность стандартной библиотеки Python
Красота и изящность стандартной библиотеки Python
 
Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных весна 2014 лекция 3Алгоритмы и структуры данных весна 2014 лекция 3
Алгоритмы и структуры данных весна 2014 лекция 3
 
Массивы в Java
Массивы в JavaМассивы в Java
Массивы в Java
 
CPU Performance in Java.
CPU Performance in Java.CPU Performance in Java.
CPU Performance in Java.
 
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
Встреча №9. Алгоритмы и коллекции стандартных библиотек C++, C#, Java, Object...
 
Векторизация кода (семинар 3)
Векторизация кода (семинар 3)Векторизация кода (семинар 3)
Векторизация кода (семинар 3)
 
Лекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building BlocksЛекция 8. Intel Threading Building Blocks
Лекция 8. Intel Threading Building Blocks
 
Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1Алгоритмы и структуры данных весна 2014 лекция 1
Алгоритмы и структуры данных весна 2014 лекция 1
 
Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.Java. Массивы. Многомерные массивы.
Java. Массивы. Многомерные массивы.
 
лекция 3
лекция 3лекция 3
лекция 3
 

More from Olga Maksimenkova

Информатика в школе: методы и технологии активного обучения
Информатика в школе: методы и технологии активного обученияИнформатика в школе: методы и технологии активного обучения
Информатика в школе: методы и технологии активного обучения
Olga Maksimenkova
 

More from Olga Maksimenkova (16)

Информатика в школе: методы и технологии активного обучения
Информатика в школе: методы и технологии активного обученияИнформатика в школе: методы и технологии активного обучения
Информатика в школе: методы и технологии активного обучения
 
Взаимное оценивание в дисцилине "Программирование"
Взаимное оценивание в дисцилине "Программирование"Взаимное оценивание в дисцилине "Программирование"
Взаимное оценивание в дисцилине "Программирование"
 
2020 maksimenkova-dist learning
2020 maksimenkova-dist learning2020 maksimenkova-dist learning
2020 maksimenkova-dist learning
 
Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...
Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...
Intelligent Virtual Reality Tutoring Systems as a New Generation of Simulator...
 
Геймификация образования: фан, мотивация и преодоление себя
Геймификация образования: фан, мотивация и преодоление себяГеймификация образования: фан, мотивация и преодоление себя
Геймификация образования: фан, мотивация и преодоление себя
 
2019-01-11-Digital Transformation of Education
2019-01-11-Digital Transformation of Education2019-01-11-Digital Transformation of Education
2019-01-11-Digital Transformation of Education
 
Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...
Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...
Providing Cognitive Scaffolding within Computer-Supported Adaptive Learning E...
 
Collaborative Learning in Data Science Education: a Data Expedition as a Form...
Collaborative Learning in Data Science Education: a Data Expedition as a Form...Collaborative Learning in Data Science Education: a Data Expedition as a Form...
Collaborative Learning in Data Science Education: a Data Expedition as a Form...
 
Инженерия Хаоса или научите меня геймдеву
Инженерия Хаоса или научите меня геймдевуИнженерия Хаоса или научите меня геймдеву
Инженерия Хаоса или научите меня геймдеву
 
Video Game Design History
Video Game Design HistoryVideo Game Design History
Video Game Design History
 
Maksimenkova edu infosystems-2018-05-25
Maksimenkova edu infosystems-2018-05-25Maksimenkova edu infosystems-2018-05-25
Maksimenkova edu infosystems-2018-05-25
 
Lec 04. The way to production: game testing and analytics
Lec 04. The way to production: game testing and analyticsLec 04. The way to production: game testing and analytics
Lec 04. The way to production: game testing and analytics
 
Lec 03. The fates of the Games. Game engines, development
Lec 03. The fates of the Games. Game engines, developmentLec 03. The fates of the Games. Game engines, development
Lec 03. The fates of the Games. Game engines, development
 
Lec 01. Mobile games development
Lec 01. Mobile games developmentLec 01. Mobile games development
Lec 01. Mobile games development
 
[Maksimenkova_ Neznanov]apkit 2017
[Maksimenkova_ Neznanov]apkit 2017[Maksimenkova_ Neznanov]apkit 2017
[Maksimenkova_ Neznanov]apkit 2017
 
Что скрывают открытые образовательные ресурсы?
Что скрывают открытые образовательные ресурсы?Что скрывают открытые образовательные ресурсы?
Что скрывают открытые образовательные ресурсы?
 

4. Многомерные массивы и массивы массивов в C#

  • 1. Высшая школа экономики, Москва, 2013 www.hse.ru Язык программирования C# и платформа .NET. Многомерные массивы Массивы массивов Максименкова Ольга Вениаминовна Старший преподаватель Кафедра управления разработкой программного обеспечения
  • 2. МНОГОМЕРНЫЕ МАССИВЫ • Матрицы • Обработка матриц ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
  • 3. Одномерные массивы (напоминание) Объявление ссылки Описание с инициализацией Описание и последующая инициализация int[ ] intArr; // ссылка на целочисленный массив double[ ] arr; // ссылка на вещественный массив int[ ] intArr = { 1, 3, -8, 19, 0, 11 }; double[ ] arr = { 3.14, 0.0, 0.5 }; int[ ] intArr; // ссылка intArr = new int[5]; // выделение памяти intArr[0] = -1; intArr[1] = 12; intArr[2] = 34; intArr[3] = -23; intArr[4] = 78; int[ ] intArr; // ссылка intArr = new int[5]; // выделение памяти for (int i = 0; i < 5; i++) { intArr[i] = i * i - 1; Console.Write(intArr[i] + " "); } ФПК учителей НИУ ВШЭ 03.2013, Максименкова О.В. ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
  • 4. Матрицы (двумерные массивы). Индексы элементов матриц int m = 5, n = 5 int[ , ] matr = new int[n, m] Главная диагональ Побочная диагональ n m 0 1 2 n -1 0 1 2 m -1 i j i = j i > j i < j индексы ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
  • 5. Способы инициализации элементов матрицы int[,] matr = new int[3, 4] { { 0, 1, 3, 4 }, { 5, 6, 7, 8 }, { 9, -1, -2, -3 } }; double[,] mtr = new double[10,15]; for (int i = 0; i < 10; i++) // цикл перебора строк (первый индекс) for (int j = 0; j < 15; j++) // цикл перебора столбцов (второй индекс) mtr[i, j] = (double)i/(j+1); Описание с инициализацией int[,] matr = new int { { 0, 1, 3, 4 }, { 5, 6, 7, 8 }, { 9, -1, -2, -3 } }; Заполнение матрицы при помощи циклов Так: Или так: double[,] mtr = new double[10,15]; Console.Write("Test: " + mtr[1,5]); for (int i = 0; i < 10; i++) for (int j = 0; j < 15; j++) mtr[i, j] = (double)i/(j+1); Test: 0 double[,] mtr; Console.Write("Test: " + mtr[1,5]); ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
  • 6. Перебор элементов матрицы for (int i = 0; i < 5; i++) { Console.WriteLine(); for (int j = 0; j < 6; j++) //столбец Console.Write(mtr[i, j] + "t"); } for(int j = 0; j < 6; j++) { Console.WriteLine(); for (int i = 0; i < 5; i++) //строка Console.Write(mtr[i, j] + "t"); } int[,] mtr = new int[5,6]; for (int i = 0; i < 5; i++) for (int j = 0; j < 6; j++) mtr[i, j] = 2*i+j; Перебираем строки во внешнем цикле Перебираем столбцы во внешнем цикле 0 1 2 3 4 5 2 3 4 5 6 7 4 5 6 7 8 9 6 7 8 9 10 11 8 9 10 11 12 13 0 2 4 6 8 1 3 5 7 9 2 4 6 8 10 3 5 7 9 11 4 6 8 10 12 5 7 9 11 13 ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
  • 7. Поэлементный вывод матрицы int[,] mtr = new int[5,6]; for (int i = 0; i < 5; i++) for (int j = 0; j < 6; j++) mtr[i, j] = 2*i+j; for (int i = 0; i < 5; i++) { Console.WriteLine(); for (int j = 0; j < 6; j++) Console.Write(mtr[i, j] + "t"); } int nl = 0; foreach (int item in mtr) { if (nl++ % 6 == 0) Console.WriteLine(); Console.Write(item + "t"); } foreach (int line[] in mtr) foreach(int item in line) Console.Write(item + "t"); так -нельзя Несоответствие типа! Перебор двумя циклами (по строкам и стобцам) Перебор одним циклом: по всем элементам ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
  • 8. Обработка элементов матрицы ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В. double[ , ] mtr = new double[N, M]; Random rnd = new Random(); for(int i =0;i <N;i++) for (int j = 0; j < M; j++) { mtr[i, j] = rnd.Next(100)+rnd.NextDouble(); } // элементы главной диагонали for (int i = 0; i < N; i++) mtr[i, i] = 0; int N, M; do { Console.Write("Введите количество строк "); } while(!int.TryParse(Console.ReadLine(), out N)|N < 0); do { Console.Write("Введите количество столбцов "); } while (!int.TryParse(Console.ReadLine(), out M) | M < 0); // поэлементный вывод for (int i = 0; i < N; i++) { for (int j = 0; j < M; j++) { Console.Write("{0:f3}t",mtr[i, j]); } Console.WriteLine(); }
  • 9. МАССИВЫ МАССИВОВ • Инициализация • Поэлементный ввод ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
  • 10. Многомерные массивы. Инициализация элементов int[ ][ ] matr = new int[3][ ] { new int[ ] { 0, 1, 3, 4 }, new int[ ] { 5, 6, 7, 8 }, new int[ ] { 9, -1, -2, -3 } }; int[ ][ ] matr = new int[3][ ]; matr[0] = new int[ ] { 0, 1, 3, 4 }; matr[1] = new int[ ] { 5, 6, 7 }; matr[2] = new int[ ] { -2, -3 }; Описание с инициализацией Описание и последующая инициализация Random rnd = new Random(); for (int i = 0; i < 3; i++) { int M = rnd.Next(1, 6); matr[i] = new int[M]; for (int j = 0; j < M; j++) matr[i][j] = rnd.Next(101); } Заполнение массива массивов при помощи циклов Random rnd = new Random(); for (int i = 0; i < 3; i++) { int M = rnd.Next(1, 6); for (int j = 0; j < M; j++) matr[i][j] = rnd.Next(101); } ФПК учителей НИУ ВШЭ 03.2013, Максименкова О.В. ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
  • 11. Поэлементный вывод многомерного массива foreach (int[ ] str in matr) { Console.WriteLine(); foreach (int item in str) Console.Write(item + "t"); } foreach (int item in matr) Console.Write(item + "t"); for (int i = 0; i < matr.Length; i++) { Console.WriteLine(); for (int j = 0; j < matr[i].Length; j++) Console.Write(matr[i][j]+"t"); } int[ ][ ] matr = new int[3][ ] { new int[ ] { 0, 1, 3, 4 }, new int[ ] { 5, 6, 7, 8 }, new int[ ] { 9, -1, -2, -3 } }; Доступны и индексы и значения элементов Доступны только значения элементов ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
  • 12. using System; class Program { static void Main( ) { double[ ][ ] mtr = new double[5][ ]; // количество элемнтов (массивов) 5 Random rnd = new Random(); for (int i = 0; i < 5; i++) { mtr[i] = new double[6]; // каждый массив-строка размером 6 for (int j = 0; j < 6; j++) mtr[i][j] = rnd.NextDouble(); } foreach (double[ ] lev1 in mtr) { foreach (double lev2 in lev1) Console.Write("{0:f3}t", lev2); Console.WriteLine(); } } } Матрица представлена массивом массивов ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
  • 13. using System; class Program { static void Main() { int[ ][ ] triangle; uint N; // количество уровней do { Console.Write("Задайте количество уровней: "); } while(!uint.TryParse(Console.ReadLine(), out N)); triangle = new int[N][ ]; // в массиве будет N целочисленных массивов for (int i = 0; i < triangle.Length; i++) { // перебор массивов triangle[i] = new int[i + 1]; // каждый элемент массива - массив for (int j = 0; j < triangle[i].Length; j++) triangle[i][j] = i+1; } // вывод foreach (int[ ] lev1 in triangle) { foreach (int lev2 in lev1) Console.Write(lev2 + " "); Console.WriteLine(); } } } Число элементов строки массива равно номеру строки ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
  • 14. Массив массивов для коэффициентов треугольника паскаля 14 1 1 1 1 2 1 1 … 2 12 … ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
  • 15. 15 using System; class Program { static void Main( ) { int[ ][ ] paskal; // ссылка на массив ссылок на массив int n; do Console.Write("Введите n: "); while (!int.TryParse(Console.ReadLine(), out n) || n < 0); paskal = new int[n + 1][ ]; // объект - массив пустых ссылок Console.WriteLine("paskal.GetType()=" + paskal.GetType()); for (int i = 0; i < paskal.Length; i++) { paskal[i] = new int[i + 1]; // объект - массив элементов типа int paskal[i][0] = paskal[i][i] = 1; for (int j = 1; j < i; j++) paskal[i][j] = paskal[i - 1][j - 1] + paskal[i - 1][j]; } foreach (int[ ] ar in paskal) { // перебор ссылок foreach (int cnk in ar) // перебор элементов типа int Console.Write("{0,4}", cnk); Console.WriteLine(); } } ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
  • 16. int[ ][,] arr; // каждый элемент массива - двумерный массив int arrLength; // количество двумерных массивов в массиве do { Console.Write("Задайте количество двумерных массивов: "); }while(!int.TryParse(Console.ReadLine(), out arrLength)||arrLength<1); arr = new int[arrLength][,]; // массив из arrLenght двумерных int dim1, dim2; do { Console.Write("Первое измерение: "); } while (!int.TryParse(Console.ReadLine(), out dim1)||dim1<1); do { Console.Write("Второе измерение: "); } while (!int.TryParse(Console.ReadLine(), out dim2) || dim2 < 1); Random rnd = new Random(); for (int i = 0; i < arrLength; i++) { arr[i] = new int[dim1, dim2]; // i-й элемент - матрица dim1xdim2 // заполняем каждую матрицу случайными числами от 20 до 50 for (int j = 0; j < arr[i].GetLength(0); j++) for (int k = 0; k < arr[i].GetLength(1); k++) arr[i][j, k] = rnd.Next(20, 51); } for (int i = 0; i < arr.Length; i++) {//вывод на экран массива двумерных массивов for (int j = 0; j < arr[i].GetLength(0); Console.WriteLine(), j++) for (int k = 0; k < arr[i].GetLength(1); k++) Console.Write(arr[i][j, k] + "t"); Console.WriteLine(); } ФПК учителей НИУ ВШЭ 06.2013, Максименкова О.В.
  • 17. 101000, Россия, Москва, Мясницкая ул., д. 20 Тел.: (495) 621-7983, факс: (495) 628-7931 www.hse.ru