Основы алгоритмизации и программирования
Введение в массивы и строки
О чём пойдёт речь
- Основы алгоритмизации. Понятие структурного программирования.
- Языки высокого уровня на примере C#. Базовый синтаксис и типы данных.
- Массивы и строки.
- Базовые структуры данных.

Source: https://pixabay.com/vectors/pencil-marks-notes-agenda-list-308509/
Чуть-чуть обо мне

- Роман Бут-Гусаим
- Пишу код 12+ лет
- Живые системы 7+ лет
- Ведущий разработчик в компании

Массивы

Source: https://pixabay.com/photos/metal-grunge-cover-plate-square-1749027/
Определение
Структура данных (data structure) - программная единица, позволяющая хранить и обрабатывать множество однотипных и/или логически связанных данных в вычислительной технике.
Массив (array) - структура данных, состоящая из набора элементов, каждый из которых идентифицируется индексом или набором индексов.

Пример простого массива из 7-ми элементов
Размерность

Одномерный массив

Двумерный массив

Трёхмерный массив
Четырёхмерный массив
n-мерный массив
Индексация
0 - (zero-based, индексация с 0) - адресация первого элемента по индексу 0.
1 - (one-based, индексация с 1) - адресация первого элемента по индексу 1.
n - (n-based, индексация с n) - адресация первого элемента по индексу с n.
Индексация с 0 является наиболее распространённой в C-подобных языках, коими являются C#, Java, JavaScript (ouch), поэтому привыкаем к этому подходу.

Source: https://pixabay.com/photos/zero-electronic-digit-black-one-1207806/
Базовые свойства и операции
Массивы выступают в роли фундаментальной и одной из наиболее часто используемых явно или неявно (как основа других) структур данных.
Как правило, все элементы массива имеют один и тот же тип.
Как правило, массив имеет фиксированную длинну по всем размерностям.
A - массив
i - индекс
v - значение
- new(s) создаёт массив длинной s;
- size(new(s)) = s;
- size(set(i, v, A)) = size(A)
- get(i, set(i, v, A)) = v if 0 ≤ i < size(A)
- get(i, set(j, v, A)) = get(i, A) if i ≠ j
Массивы в dotnet
Массивы в dotnet являются одной из основных структур данных, на основании которых строятся другие более сложные структуры.
Объявление массива похоже на объявление переменной:
type[] arrayName;int[] numbers;На этапе создания массива надо определить его размерность и кол-во эл-ов в каждом измерении.
int[] numbers = new int[5];int[,] matrix = new int[7, 5];Виды массивов в dotnet

int[] a = new int[7];Одномерный массив
int[,] a = new int[7, 3];
Многомерный массив
(на примере 2х изм)
int[][] a = new int[7][];
a[0] = new int[3];
a[1] = new int[5];
...
Зубчатый массив
(массив массивов)
Одномерные массивы
Single-Dimensional Arrays - наиболее распространённый вид массивов, с которым вы столкнётесь.
Варианты инициализации
double[] coefficients = new double[345];double[] coefficients = new double[] { 9.2, 4.6, -8.5 };double[] coefficients = { 9.2, 4.6, -8.5 };Обращение к элементу
double[] coefficients = new double[4];
coefficients[0] = 3.5;
coefficients[1] = 4.5;
double c1 = coefficients[2];Многомерные массивы
Multi-dimensional arrays - встречаются реже. Чаще всего столкнётесь с двумерными массивами - матрицами.
Варианты инициализации
long[,] ids = new long[5, 7];long[,] ids = new long[,] { {2, 5}, {8, 1}, {-9, 6} };long[,] ids = { {2, 5}, {8, 1}, {-9, 6} };Обращение к элементу
long[,] ids = new long[5, 7];
ids[0, 0] = 5;
ids[0, 1] = 6;
long idOfInterest = ids[3, 3];Зубчатые массивы
"Jagged" arrays - встречаются ещё реже.
Варианты инициализации
int[][] matrix = new [3][];
matrix[0] = new int[3];
matrix[1] = new int[4];
matrix[2] = new int[5];int[][] matrix = new int[][] {
new int[] {4, 5, 6},
new int[] {7, 8, 9, 10},
new int[] {11, 12, 13, 14, 15}
};Обращение к элементу
int[][] matrix = new [3][];
matrix[0] = new int[3];
matrix[1] = new int[4];
matrix[2] = new int[5];
matrix[0][2] = 16;К действию
- Дан одномерный массив длинны n, заполненный случайным образом. Найти максимальный элемент в массиве.
- Дан двумерный массив n x m, заполненный случайным образом. Вывести все элементы, больше либо равные среднему значению эл-ов матрицы.

Source: https://pixabay.com/photos/frog-rest-meditation-summer-yoga-3895825/
Строки

Source: https://pixabay.com/photos/typewriter-vintage-write-letters-1170657/
Что это такое
Строка (string) - это фундаментальный тип данных, хранящий внутри себя текст.
Один из наиболее часто используемых типов данных в dotnet, java, js.
Внутри представляет собой последовательность элементов типа char.
string text = "something wicked";Символ (char) - тип данных, представляющий собой Unicode символ, занимающий 2 байта (UTF-16).
char c = 'a';
char e = '\n';Чуть больше информации
- Строки являются неизменяемыми. Означает, что любые операции из стандартного набора создают новую строку.
- Такое объявление называется строковы литералом:
- Объявление string и System.String эквивалентны.
- Существуют так называемые "дословные" (verbatim) строки:
string msg = "me";string msg = @"C:\something\really\wicked.jpg";
vs
string msg = "C:\\someting\\really\\wicked.jpg";- Ещё строки можно интерполировать, что очень удобно для вывода.
int token = 10;
string msg = $"you've reached 9 points out of {token}";И ещё чуть-чуть
- Строка - это массив символов. Есть индексатор, который позволяет их получать по номеру позиции.
- Для строк переопределён оператор "+". Так их можно складывать. Но осторожно.
string msg = "hello";
char c = msg[2]; // 'l'string msg = "hello";
msg = msg + " world"; // "hello world"- Сравнение строк делится на два вида - на основании культуры (culture aware) и порядковое (ordinal).
public enum StringComparison {
CurrentCulture = 0,
CurrentCultureIgnoreCase = 1,
InvariantCulture = 2,
InvariantCultureIgnoreCase = 3,
Ordinal = 4,
OrdinalIgnoreCase = 5
}Пощупаем руками
- Базовые операции над строками - проверки, split, join, проверки вхождения.
- Форматирование строк - string.Format.
- Изменение строк - StringBuilder.

Source: https://pixabay.com/photos/frog-rest-meditation-summer-yoga-3895825/
Источники
- Вирт, Н. - Алгоритмы и структуры данных
- Array Data Structure (wiki)
- NIST - Array
- Zero-Based Indexing (wiki)
- Richter, J. - CLR via C#
- C# Programming Guide
- Sedgewick, R., Wayne, K. - Arrays in Java

Source: https://pixabay.com/photos/writing-writer-notes-pen-notebook-923882/

Source: https://pixabay.com/photos/lamps-thank-you-door-workshop-1030901/
Введение в массивы и строки
By Raman But-Husaim
Введение в массивы и строки
- 441