Программирование на языке высокого уровня Лекция 5. Массивы. Массивы. Массивы. Кафедра АСОИУ ОмГТУ, 2012 Богатов Р.Н.

Презентация:



Advertisements
Похожие презентации
Язык программирования Pascal Массивы А. Жидков. Массивы Массив – поименованный набор однотипных элементов, каждый из которых имеет свой номер, (индекс).
Advertisements

Массивы Теоретические сведения. Примеры решения задач. Задания для самостоятельного выполнения.
Подведение итогов г. Н.Новгород школа 58. Блиц-опрос! Что такое двумерный массив? Как его описать? Как заполнить двумерный массив? Приведите примеры заполнения.
Массивы Массив это величины объединенные общим именем и различаемые порядковыми номерами. Номера называются индексами. В зависимости от количества индексов.
Программирование на Basic МассивыПрограммирование на Basic Массивы.
Массив-это упорядоченная последовательность однотипных элементов.
Массивы Массив – именованный набор с фиксированным количеством однотипных данных Массив одномерный многомерный Общий вид элемента массива (двумерный массив.
Алгоритмизация и программирование. Практическая работа в Pascal Задача 1.
Двумерные массивы. В математике часто используют многомерные массивы, т.е. массивы массивов. Особенно широкое распространение получили двумерные массивы.
Двумерные массивы Обработка относительно диагоналей.
ПРОГРАММИРОВАНИЕ МАССИВОВ Язык программирования Паскаль ЕАДК, преподаватель Неверова И.Ю.
Массивы 9 класс. Основные теоретические сведения Примеры решения задач.
Массивы Теоретические сведения. Примеры решения задач. Задания для самостоятельного выполнения.
Одномерные массивы Понятие массива, виды массивов Описание, заполнение и вывод одномерного массива Обработка одномерного массива.
Массивы Материалы к урокам по программированию. МАССИВ это УПОРЯДОЧЕННАЯ последовательность данных ОДНОГО ТИПА. Массивы относятся к структурированным.
Лекция 5 Циклы. Цикл while while ( ) Пример: while (i > 0) { i--; printf("%d\n", i); } Выражение Инструкция Да Нет.
Двумерные массивы. Двумерный массив При решении практических задач часто приходится иметь дело с различными таблицами данных, математическим эквивалентом.
Двумерным массивом называется совокупность данных, каждое значение которых, зависит от его положения в строке и в столбце.
МАССИВЫ ОДНОМЕРНЫЕ МАССИВЫ Презентацию подготовила Ученица 11 Б Карапетян Наташа.
МассивМассив представляет собой совокупность данных одного типа с общим для всех элементов именем. Массив относится к структурированным типам данных (упорядоченная.
Транксрипт:

Программирование на языке высокого уровня Лекция 5. Массивы. Массивы. Массивы. Кафедра АСОИУ ОмГТУ, 2012 Богатов Р.Н.

Массивы Что делать, если пользователь должен ввести N чисел, а N заранее неизвестно? Массив – это упорядоченное множество элементов одного типа. Чтобы завести массив в C# требуется: а) объявить переменную как массив; б) инициализировать массив (выделить память и прочее). У массива есть имя, а его элементы именуются как имя[индекс], где индекс = 0, 1, 2, …. Например, x[2*i] при i = 0, 1, 2, … – это нечётные элементы массива x. Массив занимает непрерывную область памяти компьютера. (Поэтому, например, вырезать из массива какой-нибудь элемент не так просто.)

Одномерные массивы. Примеры int[] A; // объявление инициализация A = new int[100]; // инициализация double[] B, C; B = new double[N]; C = new double[M]; int[] A; // объявление инициализация A = new int[100]; // инициализация double[] B, C; B = new double[N]; C = new double[M]; // примеры использования for (int i = 0; i < 100; i++) A[i] = 2 * i; for (int i = 0; i < N; i++) B[i] = Math.Sin(0.1 * i); for (int i = 0; i < M; i++) D[i] = Math.Abs(C[i]); // примеры использования for (int i = 0; i < 100; i++) A[i] = 2 * i; for (int i = 0; i < N; i++) B[i] = Math.Sin(0.1 * i); for (int i = 0; i < M; i++) D[i] = Math.Abs(C[i]); // поиск максимума int max = A[0]; for (int i = 1; i < 100; i++) if (A[i] > max) max = A[i]; label1.Text = Convert.ToString(max); // поиск максимума int max = A[0]; for (int i = 1; i < 100; i++) if (A[i] > max) max = A[i]; label1.Text = Convert.ToString(max);

Псевдослучайные числа Random r = new Random(); for (int i = 0; i < N; i++) A[i] = r.Next(-99, 100); // числа из диапазона от -99 до 99 включительно, т.е. [-99; 100) Random r = new Random(); for (int i = 0; i < N; i++) A[i] = r.Next(-99, 100); // числа из диапазона от -99 до 99 включительно, т.е. [-99; 100) Random r = new Random(); for (int i = 0; i < N; i++) B[i] = r.NextDouble(); // вещественные числа из диапазона [0; 1) Random r = new Random(); for (int i = 0; i < N; i++) B[i] = r.NextDouble(); // вещественные числа из диапазона [0; 1) Random r = new Random(); for (int i = 0; i < N; i++) B[i] = r.NextDouble()*(X1-X0) + X0; // вещественные числа из диапазона [X0; X1) Random r = new Random(); for (int i = 0; i < N; i++) B[i] = r.NextDouble()*(X1-X0) + X0; // вещественные числа из диапазона [X0; X1)

Одномерные массивы. Ещё примеры // переворот for (int i = 0; i < N/2; i++) { double x; x = B[i]; B[i] = B[N-i-1]; B[N-i-1] = x; } // переворот for (int i = 0; i < N/2; i++) { double x; x = B[i]; B[i] = B[N-i-1]; B[N-i-1] = x; } // копирование отрицательных // элементов массива B в массив C int Z = 0; //фактический размер массива C for (int i = 0; i < N; i++) if (B[i] < 0) { C[Z] = B[i]; Z = Z + 1; } // копирование отрицательных // элементов массива B в массив C int Z = 0; //фактический размер массива C for (int i = 0; i < N; i++) if (B[i] < 0) { C[Z] = B[i]; Z = Z + 1; } // сортировка по убыванию for (int i = 0; i < N-1; i++) for (int j = i+1; j < N; j++) if (B[j] > B[i]) { double x; x = B[i]; B[i] = B[j]; B[j] = x; } // сортировка по убыванию for (int i = 0; i < N-1; i++) for (int j = i+1; j < N; j++) if (B[j] > B[i]) { double x; x = B[i]; B[i] = B[j]; B[j] = x; }

Задача про пятаки и трёшки Задача для банкомата: заданную сумму денег (натуральное число больше семи) выдать с помощью максимального числа пятаков и, если придётся, некоторого числа трёшек. int A, B; // искомое число пятаков и трёшек int x = n % 5; if (x == 0) { A = n / 5; B = 0; } else if (x == 1) { A = (n - 6) / 5; B = 2; } else if (x == 2) { A = (n - 12) / 5; B = 4; } else if (x == 3) { A = (n - 3) / 5; B = 1; } else { A = (n - 9) / 5; B = 3; } int A, B; // искомое число пятаков и трёшек int x = n % 5; if (x == 0) { A = n / 5; B = 0; } else if (x == 1) { A = (n - 6) / 5; B = 2; } else if (x == 2) { A = (n - 12) / 5; B = 4; } else if (x == 3) { A = (n - 3) / 5; B = 1; } else { A = (n - 9) / 5; B = 3; } int A, B; // искомое число пятаков и трёшек int x = n % 5; switch (x) { case 0: A = n / 5; B = 0; break; case 1: A = (n - 6) / 5; B = 2; break; case 2: A = (n - 12) / 5; B = 4; break; case 3: A = (n - 3) / 5; B = 1; break; default: A = (n - 9) / 5; B = 3; break; } int A, B; // искомое число пятаков и трёшек int x = n % 5; switch (x) { case 0: A = n / 5; B = 0; break; case 1: A = (n - 6) / 5; B = 2; break; case 2: A = (n - 12) / 5; B = 4; break; case 3: A = (n - 3) / 5; B = 1; break; default: A = (n - 9) / 5; B = 3; break; } int A, B; // искомое число пятаков и трёшек for (int i = 0; i < 5; i++) if ((n - i * 3) % 5 == 0) B = i; A = (n - B * 3) / 5; int A, B; // искомое число пятаков и трёшек for (int i = 0; i < 5; i++) if ((n - i * 3) % 5 == 0) B = i; A = (n - B * 3) / 5; int A, B; // искомое число пятаков и трёшек for (B = 0; ; B++) if ((n - B * 3) % 5 == 0) break; A = (n - B * 3) / 5; int A, B; // искомое число пятаков и трёшек for (B = 0; ; B++) if ((n - B * 3) % 5 == 0) break; A = (n - B * 3) / 5; int A, B; // искомое число пятаков и трёшек for (B = 0; (n - B * 3) % 5 != 0; B++) ; A = (n - B * 3) / 5; int A, B; // искомое число пятаков и трёшек for (B = 0; (n - B * 3) % 5 != 0; B++) ; A = (n - B * 3) / 5; int A, B; // искомое число пятаков и трёшек int[] G = new int[] { 0, 2, 4, 1, 3 }; B = G[n % 5]; A = (n - B * 3) / 5; int A, B; // искомое число пятаков и трёшек int[] G = new int[] { 0, 2, 4, 1, 3 }; B = G[n % 5]; A = (n - B * 3) / 5;

Многомерные массивы Массивы могут быть двумерными, трёхмерными и …-мерными. Т.к. память компьютера одномерна, многомерные массивы в памяти развёрнуты в одномерные. Например, как если бы из кинотеатра стали выносить кресла на улицу, ряд за рядом, и выстраивать в одну линейку. В C# существует два способа задать двумерный (и по аналогии любой многомерный) массив: а) как прямоугольный массив или б) как «рваный» массив (массив массивов). Рваные массивы хороши тем, …что они рваные :о/ Например, позволяют сделать треугольный массив и сэкономить память. // прямоугольный массив int[,] F; F = new int[N, M]; // прямоугольный массив int[,] F; F = new int[N, M]; // рваный массив double[][] F; F = new double[N][]; for (int i = 0; i < N; i++) B[i] = new double[M]; // рваный массив double[][] F; F = new double[N][]; for (int i = 0; i < N; i++) B[i] = new double[M];

Двумерные массивы. Примеры

Цикл foreach foreach – это упрощённый вариант for для перебора всех элементов массива любой размерности. Обход массива имя с элементами типа тип : foreach(тип переменная in имя ) тело_цикла (В теле цикла переменная будет принимать значения всех элементов массива по очереди.) Одномерный пример: Многомерный пример: // поиск максимума double max = double.MinValue; for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) if (F[i, j] > max) max = F[i, j]; // поиск максимума double max = double.MinValue; for (int i = 0; i < N; i++) for (int j = 0; j < M; j++) if (F[i, j] > max) max = F[i, j]; // поиск максимума double max = double.MinValue; foreach (double x in F) if (x > max) max = x; // поиск максимума double max = double.MinValue; foreach (double x in F) if (x > max) max = x; int sum = 0; foreach (int x in A) sum = sum + x; int sum = 0; foreach (int x in A) sum = sum + x;

Домашнее задание Подсчитать сумму граничных элементов прямоугольной матрицы (лежащих по периметру). Отдельно решить ту же задачу для квадратной матрицы. Подсказки: можно сделать четыре цикла (пробегающих по каждой стороне) а лучше – два (для обхода по горизонтали и вертикали) а в случае квадратной матрицы хватит и одного

Упражнения на одномерные массивы Заполнить массив натуральными числами, значениями sin x, случайными числами Подсчитать в массиве количество отрицательных чисел Найти сумму элементов массива, максимум, минимум, среднее... Найти произведение элементов массива (с прерыванием цикла, если встретится ноль) Найти элемент, наиболее близкий к заданному числу Каких элементов больше: отрицательных или неотрицательных? Заполнить массив по образцу: 1, 3, 5,..., N-2, …, N-1,..., 6, 4, 2 Проверить, является ли массив упорядоченным по возрастанию Повышенной сложности: найти медиану массива – элемент, разделяющий массив на две наиболее близких по сумме части

Упражнения на двумерные массивы Заполнить массив натуральными числами, функцией двух переменных (например, –2x 4 +x 3 +8x 2 –2y 4 +y 3 +8y 2 ), случайными числами Подсчитать в массиве количество чисел, близких к нулю (с заданной точностью) Найти максимум, минимум, среднее, суммы главной и побочной диагоналей. Вычесть из матрицы значение минимума Транспонировать квадратную матрицу Получить заданный минор (удалить заданные строку и столбец) Переставить четверти по часовой стрелке Повышенной сложности: заполнить массив натуральными числами а) по спирали, б) змейкой, в) массив 8х8 – прыжками шахматного коня