<table style="width: 100%;">
  <tr>    
    <td style="text-align: center; border: none;"> 
      Министерство образования и науки РФ <br/>
      ГБПОУ РМЭ "Йошкар-Олинский Технологический колледж 
    </td>
  </tr>
  <tr>
    <td style="text-align: center; border: none; height: 15em;">
      <h2>
        Курс лекций по предмету <br/>
        "Основы алгоримизации и программирования" <br/>
        для группы И-21
      </h2>
    </td>
  </tr>
  <tr>
    <td style="text-align: right; border: none; height: 20em;">
      <div style="float: right;" align="left">
        <b>Разработал</b>: <br/>
        Колесников Евгений Иванович
      </div>
    </td>
  </tr>
  <tr>
    <td style="text-align: center; border: none; height: 5em;">
      г.Йошкар-Ола, 2021-2025 гг
    </td>
  </tr>
</table>

<div style="page-break-after: always;"></div>

<!-- всё, что выше - титульный лист -->

```mermaid
block
  columns 1
    block:ID
      A
      B
      C
    end
```

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

## Содержание

1. [Тема 1. Основные принципы алгоритмизации и программирования](#тема-1-основные-принципы-алгоритмизации-и-программирования)
1. [Тема 2. Языки и методы программирования](#тема-2-языки-и-методы-программирования)
1. [Тема 3. Системы контроля версий](#тема-3-системы-контроля-версий)
1. [Тема 4. Программирование на языке C#. Основы.](#тема-4-программирование-на-языке-c-основы)
1. [Тема 5. Продвинутый C#: функции, лямбды, исключения, работа с файлами, многопоточность, регулярные выражения.](#тема-5-продвинутый-c-функции-лямбды-исключения-работа-с-файлами-многопоточность-регулярные-выражения)
1. [Тема 6. Основные принципы объектно-ориентированного программирования](#тема-6-основные-принципы-объектно-ориентированного-программирования)
1. [Тема 7. Библиотеки классов.](#тема-7-библиотеки-классов)
1. [Тема 8. Оконные приложения.](#тема-8-оконные-приложения)
      
<!-- <details>

<summary>Варианты для других групп:</summary>

Лекции написаны в четырех вариантах:
* для группы И-21 на примере языка C# (вариант **master** - основной)
* для группы С-21 на примере языка Питон (вариант **python_c21** - упрощенный)
* для группы И-21 на примере языка Котлин (вариант **kotlin** - устаревший)
* для группы И-21 на примере языка Питон (вариант **python** - устаревший)

Для переключения между вариантами нужно кликнуть по кнопке *Branch* и выбрать нужный:

![](img/readme_c21.png)
  
</details> -->

<!-- 

MathJax

$$\sum_{i=0}^n i^2 = \frac{(n^2+n)(2n+1)}{6}$$ 

-->

## Тема 1. Основные принципы алгоритмизации и программирования 

### Теория

1. [Основные понятия алгоритмизации. Понятие алгоритма. Свойства алгоритма. Формы записи алгоритмов. Общие принципы построения алгоритмов. Определение сложности работы алгоритмов.](./articles/t1l1.md)
1. [Основные алгоритмические конструкции: линейные, разветвляющиеся, циклические. Программы для графического отображения алгоритмов](./articles/t1l2.md)
1. [Логические основы алгоритмизации. Основы алгебры логики. Логические операции с высказываниями: конъюнкция, дизъюнкция, инверсия. Законы логических операций. Таблицы истинности.](./articles/t1l3.md)

### Лабораторные работы

1. [Разработка алгоритмов для конкретных задач. Определение сложности работы алгоритмов.](./articles/t1lab1.md)
2. Использование программ для графического отображения алгоритмов.
3. [Таблицы истинности](./articles/lab_truth_table.md)

### Контрольные вопросы

1. [Этапы решения задачи на компьютере? Охарактеризуйте их. Проиллюстрируйте этапы постановки и формализации на примере задачи: вычислить время движения моторной лодки между двумя пунктами.](./articles/t1l1.md#основные-понятия-алгоритмизации)
1. [Понятие алгоритма.](./articles/t1l1.md#понятие-алгоритма)
1. [Основные типы данных.](./articles/t1l1.md#основные-типы-данных)
1. [Свойства алгоритма.](./articles/t1l1.md#свойства-алгоритма)
1. [Формы записи алгоритмов.](./articles/t1l1.md#формы-записи-алгоритмов)
1. [Что такое структурное программирование? Каковы основные прнципы структурной методики построения алгоритмов? ](./articles/t1l1.md#структурное-программирование)<!-- лекция 1 -->
1. [Линейный алгоритм](./articles/t1l2.md#линейный-алгоритм)
1. [Разветвляющийся алгоритм](./articles/t1l2.md#разветвляющийся-алгоритм)
1. [Циклический алгоритм](./articles/t1l2.md#циклический-алгоритм)
1. [Вспомогательные алгоритмы и процедуры](./articles/t1l2.md#вспомогательные-алгоритмы-и-процедуры)<!-- лекция 2 -->
1. [Основные формы мышления.](./articles/t1l3.md#основные-формы-мышления)
1. [Что такое логическое высказывание?](./articles/t1l3.md#логическое-высказывание) 
1. [Способы описания логических функций.](./articles/t1l3.md#способы-описания-логических-функций)
1. [Основные логические операции.](./articles/t1l3.md#логические-операции)
1. [Приоритет логических операций](./articles/t1l3.md#приоритет-логических-операций)
1. [Законы логических операций](./articles/t1l3.md#законы-логических-операций)
1. [Проверка законов построением таблиц истинности](./articles/t1l3.md#решение-логических-выражений)<!-- лекция 3 -->
1. [Классификация языков программирования](./articles/t2l1.md#классификация-языков-программирования)
1. [компиляция и интерпретация, основные отличия](./articles/t2l1.md#методы-трансляции)
1. [Методы программирования](./articles/t2l2.md#методы-программирования)
1. [Общие принципы разработки программного обеспечения](./articles/t2l2.md#общие-принципы-разработки-программного-обеспечения)
1. [Жизненный цикл программного обеспечения](./articles/t2l2.md#жизненный-цикл-программного-обеспечения)
1. [Типы приложений](./articles/t2l2.md#типы-приложений)

## Тема 2. Языки и методы программирования 

1. [Языки программирования. Эволюция языков программирования. Классификация языков программирования. Понятие системы программирования. Исходный, объектный и загрузочный модули. Интегрированная среда программирования.](./articles/t2l1.md)
2. [Методы программирования: структурный, модульный, объектно-ориентированный. Достоинства и недостатки методов программирования. Общие принципы разработки программного обеспечения. Жизненный цикл программного обеспечения.](./articles/t2l2.md)

## Тема 3. Системы контроля версий 

1. [Системы контроля версий.](./articles/skv/readme.md)

### Лабораторные работы

1. [Создание аккаунта и репозитория в СКВ gihtub. Создание консольного приложения и инициализация нового репозитория в проекте.](./articles/skv_lab.md)

## Тема 4. Программирование на языке C#. Основы. 

### Теория

<!-- https://acmp.ru/ -->

1. [Основные элементы языка. Структурная схема программы на алгоритмическом языке. Лексика языка. Переменные и константы. Типы данных. Выражения и операции.](./articles/t3l1.md)
1. [Операторы и операции языка. Синтаксис операторов. Составной оператор. Вложенные условные операторы. Циклические конструкции.](./articles/t3l1_2.md)
1. [Массивы как структурированный тип данных. Объявление массива. Ввод и вывод одномерных и двумерных массивов. Обработка массивов. Стандартные функции для массива целых и вещественных чисел. Коллекции и последовательности.](./articles/t3l1_3.md)
1. [Строки. Объявление строковых типов данных. Поиск, удаление, замена и добавление символов в строке. Операции со строками. Стандартные функции и процедуры работы со строками.](./articles/4_prog_string.md)
1. [Объявление множества. Работа с датами. Кортежи.](./articles/cs_misc_types.md)

### Лабораторные работы

1. [Знакомство со средой программирования и структурой проекта. Создание репозитория с ветками. Составление программ линейной структуры.](./articles/lab1.md)
1. [Отладка приложения](./articles/lab_debug.md)
1. [Составление программ разветвляющейся структуры.](./articles/lab2.md)
1. [Составление программ циклической структуры. Обработка одномерных и двумерных массивов.](./articles/lab3.md)
1. [Работа со строками](./articles/lab4_4.md)
1. [Работа с данными типа: множество, дата, кортежи.](./articles/lab4_5.md)

### Контрольные вопросы

1. что такое пространство имен и для чего оно нужно?
1. Какими символами обозначаются комментарии?
1. Чем характеризуетя переменная?
1. Какие типы данных по-умолчанию используются для целых чисел и для чисел с плавающей запятой?
1. За что отвечают ключевые слова **checked** и **unchecked**?<!-- 1 -->
1. Операторы отношения
1. Логические операторы (обычные и укороченные)
1. Условные операторы
1. Тернарный оператор
1. Циклы
1. Оператор **break**
1. Оператор **continue**
1. Оператор **return**<!-- 2 -->
1. [Массивы](./articles/t3l1_3.md#массивы)
1. [Коллекции](./articles/t3l1_3.md#коллекции)<!-- 3 -->
1. [Перечисления](#перечисления-enum)
1. [Кортежи](./articles/lab4_5.md#кортежи-tuple)
1. [Множества](./articles/lab4_5.md#множества)
1. [Дата и время](./articles/lab4_5.md#работа-с-датами-и-временем)<!-- 5 -->

## Тема 5. Продвинутый C#: функции, лямбды, исключения, работа с файлами, многопоточность, регулярные выражения.

### Теория

1. [Общие сведения о подпрограммах. Определение и вызов подпрограмм. Область видимости и время жизни переменной. Механизм передачи параметров. Лямбда-функции.](./articles/t5_function.md)
1. [Делегаты, события и лямбды](./articles/t5_delegate.md)
1. [Исключения. Null.](./articles/t5_exception.md)
1. [Многопоточность. Потоки, асинхронные вычисления](./articles/t5_thread_async.md)
1. [Работа с файловой системой и файлами.](./articles/t5_files.md)
1. [Типы файлов: CSV, XML, JSON.](./articles/t5_file_types.md)
1. [Регулярные выражения](./articles/t5_regex.md)
    - [Опережающие и ретроспективные проверки](./articles/t5_regex.md#опережающие-и-ретроспективные-проверки)

### Лабораторные работы к теме 5

1. [Организация и использование функций.](./articles/lab5_function.md)
1. [Исключения. NULL.](./articles/lab5_try_null.md)
1. [Асинхронные вычисления.](./articles/lab5_async.md)
1. [Работа с файлами](./articles/lab5_files.md)
1. [Типы файлов, сериализация.](./articles/lab5_file_types.md)
1. [Регулярные выражения.](./articles/lab5_regex.md)

### Контрольные вопросы

1. [Общее определение метода](./articles/t5_function.md#общее-определение-метода)
1. [Сокращенная запись методов](./articles/t5_function.md#сокращенная-запись-методов)
1. [Необязательные параметры](./articles/t5_function.md#необязательные-параметры)
1. [Именованные параметры](./articles/t5_function.md#именованные-параметры)
1. [Массив параметров и ключевое слово params](./articles/t5_function.md#массив-параметров-и-ключевое-слово-params)
1. [Область видимости переменных](./articles/t5_function.md#область-видимости-контекст-переменных)
1. [Секреты хорошей функции](./articles/t5_function.md#секреты-хорошей-функции-копипаст-с-хабра)<!-- 1 -->
1. [Делегаты](./articles/t5_delegate.md#делегаты)
1. [Лямбда-выражения](./articles/t5_delegate.md#лямбда-выражения)<!-- 2 -->

## Тема 6. Основные принципы объектно-ориентированного программирования

### Теория

1. [История развития ООП. Базовые понятия: объект, его свойства и методы, класс, интерфейс. Основные принципы ООП: инкапсуляция, наследование, полиморфизм.](./articles/t6_oop1.md)
1. [Ещё раз про классы. Интерфейсы.](./articles/t6_oop_habr.md)
1. [LINQ](./articles/t6_linq.md)
1. [Шаблоны проектирования.](./articles/t6_templates.md)

### Лабораторные работы

1. [ООП. Основы.](./articles/lab8-oop1.md)
1. [ООП. Основы (CSV)](./articles/lab8-oop2.md)
1. [ООП. Основы (JSON)](./articles/lab8-oop-json.md)
1. [ООП. Наследование.](./articles/lab8-oop3.md)
1. [ООП. Интерфейсы.](./articles/lab8-oop4.md)

### Контрольные вопросы

1. Члены класса
1. Константы класса
1. Конструкторы класса
1. Что такое this
1. Инициализатор объекта 
1. Модификаторы доступа
1. Свойства класса
1. Перегрузка методов<!-- 1 -->
1. Интерфейс
1. Основные принципы ООП<!-- 2 -->

<!-- 
Перегрузка операторов
6. [ООП. Шаблоны проектирования](/articles/lab-templates.md) 
-->

## Тема 7. Библиотеки классов.

1. [Библиотеки классов. Создание. Подключение. Динамическая загрузка сборок и позднее связывание.](./articles/t7_dll.md)

### Лабораторные работы

1. [Создание библиотеки классов](./articles/lab_class_lib.md)<!-- 2(44) -->

## Тема 8. Оконные приложения.

### Теория

1. [Обзор типов оконных приложений в C#. Знакомство со структурой проекта WPF/Avalonia. Компоновка. Image.](./articles/t8_win_app.md)
1. [Ресурсы (объединить с предыдущей)](./articles/wpf_resource.md)
1. [Привязка (Binding). Интерфейс INotifyPropertyChanged. Форматирование значений привязки и конвертеры значений.](./articles/t8_binding.md)
1. [Элементы управления. Обзор.](./articles/t8_elements.md)
1. [Каркас приложения. Модель данных. Привязка данных. Табличный вывод.](./articles/wpf_template.md)
1. [Фильтрация данных](./articles/wpf_filtering.md)
1. [Поиск, сортировка](./articles/wpf_search_sort.md)
1. [Вывод данных согласно макета (ListBox, Image)](./articles/wpf_listbox.md)
1. [Стили, триггеры и темы](./articles/wpf_style.md)
1. [Создание окон. Модальные окна](./articles/wpf_window.md)
1. Создание WPF-приложений по индивидуальным заданиям (подготовка к экзамену)<!-- 8(66) -->

### Лабораторные работы

1. [Создание WPF-приложения, знакомство с вариантами компоновки.](./articles/lab_wpf_base.md)
1. [Исследование визуальных компонентов WPF.](./articles/lab_wpf_elements.md)
1. [Каркас приложения. Модель данных. Привязка данных.](./articles/lab_wpf_binding.md)
1. [Получение данных из внешних источников. CSV.](./articles/lab_wpf_data_csv.md)
1. [Получение данных из внешних источников. JSON.](./articles/lab_wpf_data_json.md)
1. [Фильтрация списка](./articles/lab_wpf_filter.md)
1. [Поиск/сортировка](./articles/lab_wpf_search_sort.md)
1. Создание WPF-приложений по индивидуальным заданиям (подготовка к экзамену)

### Контрольные вопросы

1. Технологии создания оконных приложений
1. Особенности WPF
1. Компоновка
1. Grid
1. StackPanel
1. WrapPanel


## [ЭКЗАМЕН](./articles/exam/exam.md)

<!-- 

MVVM вроде попроще

https://streletzcoder.ru/realizatsiya-patterna-mvvm-na-primere-c-wpf-nestrogiy-variant/ -->

<!-- Перенести в конец к оконным приложениям 7. [Стандартная библиотека. Подключение не стандартных библиотек.](/articles/t4l3.md) -->
<!-- подключить графики или отчеты: WF и стороннюю либу NuGet -->

<!-- 


[ООП. Шаблоны проектирования]: https://studfile.net/preview/6845209/
[Шаблоны проектирования]: http://it-claim.ru/Education/Course/ISDevelopment/Lab3_tutorial.pdf
