Основы алгоритмизации и программирования

Введение в массивы и строки

О чём пойдёт речь

  • Основы алгоритмизации. Понятие структурного программирования.
  • Языки высокого уровня на примере 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 - значение

 

  1. new(s) создаёт массив длинной s;
  2. size(new(s)) = s;
  3. size(set(i, v, A)) = size(A)
  4. get(i, set(i, v, A)) = v if 0 ≤ i < size(A)
  5. 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;

К действию

  1. Дан одномерный массив длинны n, заполненный случайным образом. Найти максимальный элемент в массиве.
  2. Дан двумерный массив 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/

Источники

  1. Вирт, Н. - Алгоритмы и структуры данных
  2. Array Data Structure (wiki)
  3. NIST - Array
  4. Zero-Based Indexing (wiki)
  5. Richter, J. - CLR via C#
  6. C# Programming Guide
  7. 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