Компьютерные науки

Программирование

В программе рассматриваются основы алгоритмизации и разработки на языках C и C++, включая управляющие конструкции и математические алгоритмы.
Студентов 2156 Выпускников 27 Для специалистов
690 ₽ 1 200 ₽
или любая сумма на ваше усмотрение
Вы можете оплатить любую сумму, чтобы поддержать наш проект и авторов программы. Объем услуг не зависит от размера вашей оплаты.
Объем

36 час.
Длительность

30 дней
Нагрузка в неделю

9 час.
Формат обучения

Дистанционно (самостоятельно)
Описание Курс представляет собой глубокое погружение в основы программирования через призму математического подхода. Слушатели познакомятся с базовыми понятиями алгоритмического языка и архитектуры фон Неймана. Учебный материал охватывает синтаксис языков C и C++, работу с переменными, циклами, массивами, функциями и указателями. Особое внимание уделено алгоритмам: от вычисления простых чисел до метода Гаусса и работы со сложными структурами данных. Разбираются различия в управлении памятью между C и C++.
Цели
  • Сформировать строгий математический подход к разработке программных алгоритмов.
  • Развить уверенные навыки процедурного программирования на языках C и C++.
  • Обучить эффективному управлению памятью и структурами данных.
Чему я научусь?
  • Разрабатывать алгоритмы и писать программы на языках C и C++.
  • Использовать базовые конструкции языков: циклы, функции, массивы.
  • Работать с указателями, ссылками и различными классами памяти.
  • Применять математические методы, такие как алгоритм Евклида и решето Эратосфена, в коде.

Авторы

Борисенко Владимир Витальевич
Борисенко Владимир Витальевич
Кандидат физико-математических наук, старший научный сотрудник лаборатории вычислительных методов при кафедре вычислительной математики механико-математического факультета МГУ.
Чему я научусь?
  • Разрабатывать алгоритмы и писать программы на языках C и C++.
  • Использовать базовые конструкции языков: циклы, функции, массивы.
  • Работать с указателями, ссылками и различными классами памяти.
  • Применять математические методы, такие как алгоритм Евклида и решето Эратосфена, в коде.

Учебный план

Занятия
Экзамен экстерном Внимание! Экзамен экстерном не обязательный для сдачи. При желании вы можете его пройти, если хотите подтвердить свои знания по данному курсу без его изучения или поверить свои знания по нему. Экзамен экстерном можно сдать только один раз. 90 мин
1 Программирование на механико-математическом факультете МГУ
2 Архитектрура Фон-Неймана
3 Ассемблер
4 Языки высокого уровня
5 Основы языка C
6 Выполнение программы на компьютере
7 Переменные
8 Управляющие операторы языка
9 Программа для решения квадратного уравнения
10 Программа с циклом
Программа с циклом тест для курса Программирование 35 мин
11 Обзор предыдущей лекции
12 Конструкции цикла
13 Использование функций
14 Программа фигурное катание
15 Программа для решения кубического уравнения
Программа для решения кубического уравнения тест для курса Программирование 25 мин
16 Целые числа
17 Операции с целыми числами
18 Программа вывода простых чисел
19 Массивы
20 Улучшение программы вывода простых чисел
21 Разложение числа на простые множители
22 Числа Ферма и идея Эйлера
Числа Ферма и идея Эйлера тест для курса Программирование 40 мин
23 Алгоритм Евклида
24 Указатели
25 Операции с указателями
26 Стековая память и аппаратный стек
27 Реализация стека
28 Использование аппаратного стека
29 Относительная адресация
30 Адресация локальных переменных
31 Рекурсия
Рекурсия тест для курса Программирование 40 мин
32 Снова про указатели
33 Два стиля программирования
34 Модификатор const
35 Пример функции суммирования массива вещественных чисел
36 Использование указателя в качестве имени массива
37 Классы памяти
38 Пример работы с памятью и операция приведения к типу языке C
39 Пример работы с памятью в C++
40 Сравнение работы с памятью в C и C++
41 Решето Эратосфена
Решето Эратосфена тест для курса Программирование 25 мин
42 Повтор описания типов в языке C
43 Массив массивов
44 Описание функций
45 Оператор typedef
46 Работа с файлами
47 Вычисление индуктивных функций на последовательностях
48 Примеры
49 Сумма элементов числовой последовательности
50 Пример чтения исходных данных из файла
Пример чтения исходных данных из файла тест для курса Программирование 30 мин
51 Индуктивные функции и индуктивные расширения
52 Комплексные числа
53 Проективная геометрия
54 Функция max
55 Переполнение, исчезновение порядка
56 Значение многочлена в заданной точке
57 Неиндуктивные функции
58 Примеры (средние)
59 Вычисление значения производной многочлена
Вычисление значения производной многочлена тест для курса Программирование 35 мин
60 Схема итерации для цикла пока
61 Частный случай схемы итерации: построения цикла с помощью инварианта
62 Пример: вычисление НОД
63 Пример программ итерации на компьютере
64 Быстрое возведение в степень
65 Расширенный алгоритм Евклида
66 Алгоритм приближенного вычисления логарифма
Алгоритм приближенного вычисления логарифма тест для курса Программирование 30 мин
67 Формулировка задач поиска и сортировки
68 Последовательный поиск
69 Применение схемы инварианта цикла в алгоритме бинарного поиска
70 Реализация функции бинарного поиска на языке C с доказательством правильности программы
71 Сравнение скорости работы последовательного и бинарного поиска. Тестирование программы бинарного поиска на компьютере
Сравнение скорости работы последовательного и бинарного поиска. Тестирование программы бинарного поиска на компьютере тест для курса Программирование 30 мин
72 Общая постановка задачи сортировки. Использование сравнения элементов и обмена с помощью функции swap
73 Наивные алгоритмы сортировки. Пузырьковая сортировка
74 Сортировка методом прямого выбора
75 Тестирование программ пузырьковой сортировки и сортировки методом прямого выбора на компьютере
76 Оценка снизу скорости работы произвольного алгоритма сортировки
77 Пример турнирного дерева для турнира трех команд
78 Оценка высоты бинарного дерева
79 Ассимптотическая оценка снизу времени работы произвольного алгоритма сортировки
Ассимптотическая оценка снизу времени работы произвольного алгоритма сортировки тест для курса Программирование 25 мин
80 Обзор предыдущей лекции. Оптимальные алгоритмы сортировки
81 Быстрая сортировка. Идея алгоритма
82 Классическая схема быстрой сортировки и ее недостаток
83 Реализация быстрой сортировки при помощи функции partition c применением как итерации, так и рекурсии
84 Реализация функции partition
85 Тестирование программы быстрой сортировки на компьютере
Тестирование программы быстрой сортировки на компьютере тест для курса Программирование 30 мин
86 Обзор предыдущей лекции. Неоптимальность алгоритма быстрой сортировки
87 Идея алгоритма сортировки кучей HeapSort. Структура данных Куча (очередь с приоритетами)
88 Реализации кучи (очереди с приоритетами) с помощью бинарного дерева. Общая схема сортировки
89 Детали алгоритма: укладка дерева в линейный массив
90 Иллюстрация работы 2-го этапа алгоритма на конкретном примере
91 Написание программы HeapSort с использованием схемы построения цикла с помощью инварианта
92 Выполнение программы HeapSort на компьютере
93 Графическая иллюстрация работы различных алгоритмов сортировки
94 Достоинства и недостатки алгоритма HeapSort. Стабильные алгоритмы сортировки
Достоинства и недостатки алгоритма HeapSort. Стабильные алгоритмы сортировки тест для курса Программирование 25 мин
95 Обзор предыдущей лекции. Недостаток рассмотренных алгоритмов сортировки - они не стабильные
96 Стабильность алгоритма сортировки. Radix-сортировка, идея
97 Пример работы алгоритма Radix-сортировки. Возможные способы его реализации
98 Идея сортировки слиянием. Функция merge, сливающая два упорядоченных массива
99 Рекурсивная (нисходящая) схема реализации сортировки слиянием
100 Идея восходящей (итеративной) реализации сортировки слиянием
Идея восходящей (итеративной) реализации сортировки слиянием тест для курса Программирование 25 мин
101 Восходящая схема двустроннего алгоритма сортировки слиянием
102 Реализация восходящего алгоритма сортировки слиянием на C++
103 Идея сортировки слиянием, не использующей дополнительной памяти: слияние блоков
104 Реализация вспомогательной функции перестановки блоков
105 Идея рекурсивной реализации алгоритма слияния блоков
106 Реализация функции слияния блоков на C++
107 Графическая иллюстрация работы разных алгоритмов сортировки на компьютере
Графическая иллюстрация работы разных алгоритмов сортировки на компьютере тест для курса Программирование 30 мин
108 Задачи на работу с массивами и автоматическое тестирование. Общая структура программы
109 Считывание исходных данных из файла и вывод результатов в файл в функции main
110 Реализация функции, решающей требуемую задачу, на примере функции циклического сдвига массива
111 Циклический сдвиг элементов массива на k позиций вправо, реализация с помощью инвертирования блоков
112 Идея реализация циклического сдвига на k позиций с помощью разбиения на орбиты
113 Реализация на C++ функции циклического сдвига на k позиций методом разбиения на орбиты
114 Задача получения множества различных значений элементов массива
115 Другое решение задачи нахождения множества различных значений элементов массива, основанное на алгоритме бинарного поиска
116 Вычисление массива биномиальных коэффициентов порядка n с помощью треугольника Паскаля
117 Выполнение рассмотренных в лекции программ на компьютере
Выполнение рассмотренных в лекции программ на компьютере тест для курса Программирование 30 мин
118 Представление целых чисел в двоичной системе счисления
119 Почему двоичная система записи чисел экономичнее десятичной и почему самая экономичная система счисления - троичная
120 Алгоритм перевода чисел из одной системы счисления в другую
121 Восьмеричная и шестнадцатеричная системы счисления системы счисления
122 Целые числа как элементы кольца вычетов по модулю m, где m - степень двойки
123 Интерпретация положительных и отрицательных целых чисел
124 Представление отрицательных чисел в дополнительном коде и алгоритм его получения
125 Поразрядные логические операции и их использование для работы с отдельными битами числа
126 Программа печати 2-ичной и 16-ричной записи числа
127 Выполнение программы перевода числа в 2-ичную и 16-ричную запись на компьютере
Выполнение программы перевода числа в 2-ичную и 16-ричную запись на компьютере тест для курса Программирование 35 мин
128 Обзор предыдущей лекции. Нумерация байтов внутри слова, архитектуры Big Endian и Little Endian
129 Два способа представления вещественных чисел: в форме с фиксированной точкой и в плавающем виде
130 Программа вычисления плавающей формы представления вещественного числа
131 Представление вещественных чисел типа float и double в виде двоичных кодов
132 Выполнение программы печати двоичного кода вещественного числа на компьютере
133 Проблемы, возникающие при работе с вещественными числами в плавающей форме
Проблемы, возникающие при работе с вещественными числами в плавающей форме тест для курса Программирование 40 мин
134 Неправильные и правильные вычислительные схемы на примере вычисления sin(x). Реализация функции, вычисляющей сумму ряда Тейлора для sin(x)
135 Тестирование программы, для любого x вычисляющей sin(x) как сумму ряда
136 Исправление программы вычисления sin(x) путем использования периодичности функции sin(x) и сведения к сумме ряда для небольшого x
137 Вычисление экспоненты
138 Вычисление произвольной степени вещественного числа - функция pow(x,y)
Вычисление произвольной степени вещественного числа - функция pow(x,y) тест для курса Программирование 20 мин
139 Способы представления матриц в компьютере
140 Представление матрицы с помощью массива указателей на строки
141 Представление матрицы произвольного размера путем размещения ее элементов в линейном массиве
142 Приведение матрицы к ступенчатому виду методом Гаусса
143 Определение ступенчатого вида матрицы
144 Особенности компьютерной реализации метода Гаусса
145 Идея реализация метода Гаусса на C/C++. Применение схемы построения цикла с помощью инварианта
146 Реализация и тестирование метода Гаусса на компьютере
Реализация и тестирование метода Гаусса на компьютере тест для курса Программирование 30 мин
147 Интерполяция функций многочленами. Формулировка задачи, единственность интерполяционного полинома
148 Интерполяционная формула Лагранжа
149 Интерполяционный полином в форме Ньютона
150 Функция, вычисляющая значение полинома в форме Ньютона
151 Функция, вычисляющая коэффициенты интерполяционного полинома Ньютона
152 Тестирование программы интерполяции на компьютере
153 Вычисление интегралов. Формула прямоугольников и формула трапеций
154 Реализация функции вычисления интеграла по формуле трапеций
155 Формула Симпсона (парабол)
156 Реализация функции вычисления интеграла по формуле Симпсона
157 Тестирование функций вычисления интегралов на компьютере
158 Итоги: что вошло и не вошло в этот начальный курс
Итоги: что вошло и не вошло в этот начальный курс тест для курса Программирование 25 мин
159 Контрольная работа
Контрольная работа тест для курса Программирование 10 мин
Тренировочный экзамен Внимание! Тренировочный экзамен экстерном не обязательный для сдачи. При желании вы можете его пройти, если хотите проверить свои знания курса перед сдачей экзамена. Тренировочный экзамен можно сдавать сколько угодно один раз. 90 мин
Экзамен 60 мин

Какой документ я получу?

Сертификат

Выдаётся автоматически после успешного завершения программы.

Удостоверение о повышении квалификации

Выдается при наличии среднего специального или высшего образования (необходимые документы).

Стоимость программы

690 ₽ 1 200 ₽
или любая сумма на ваше усмотрение
Вы можете оплатить любую сумму, чтобы поддержать наш проект и авторов программы. Объем услуг не зависит от размера вашей оплаты.