1. Алгоритмы + Структуры данных = Программы.
2. Виды данных.
3. Машинное представление данных.
4. Понятие алгоритма.
5. Парадигмы программирования: императивная, функциональная, логическая.
6. Язык C, его история.
7. Структура C-программы.
8. Сборка программы: компиляция и линковка.
2. ИНЬ И ЯН
ПРОГРАММИРОВАНИЯ
• Алгоритмы.
• Структуры данных.
• Алгоритмы + Структуры данных = Программы.
3. ДАННЫЕ (ИНФОРМАЦИЯ)
• Данные для человека: • Изображения (видео).
• Числа
(целые, • Звук.
вещественные,
комплексные)… • «Записи».
• Наборы чисел (ряды, • Компьютерможет:
векторы, матрицы). 00011100111010101
• Текст (символы).
4. МАШИННОЕ
ПРЕДСТАВЛЕНИЕ ДАННЫХ
• Целыечисла – двоичная • Набор чисел, символов –
система счисления. массив.
• Вещественные числа – • Картинка– массив
представление с пикселов с цветом (RGB).
плавающей точкой.
• Звук– набор отсчетов
• Символы – числа (квантованная амплитуда).
(кодировка).
5. АЛГОРИТМ
• Решает определенную задачу.
• Конечная упорядоченная последовательность действий.
• Обычно имеет входные параметры и выходные
результаты.
• Пример: алгоритм Евклида поиска НОД двух чисел:
• НОД(a, b) = НОД(a-b, b) если a > b
6. ЯЗЫКИ
ПРОГРАММИРОВАНИЯ
• Структуры данных:
• Типы данных (числа, символы, строки, …).
• Переменные.
• Алгоритмы:
• Операции над данными, в определенной
последовательности – согласно синтаксису языка.
7. ПАРАДИГМЫ
ПРОГРАММИРОВАНИЯ
• Императивная. Программа – это и есть алгоритм. В
каждый момент есть глобальное состояние (содержимое
памяти), явно доступное для изменения. Языки: Pascal, C, …
• Функциональная. Программа – это функция. Нет явного
состояния. Языки: LISP, Haskell, Microsoft Excel (!)
• Логическая. Программа – это набор предикатов и правил
вывода. Языки: Prolog, SQL.
8. ИМПЕРАТИВНЫЙ C
int fib(int n) {
int a = 0, b = 1;
int i;
for (i = 1; i < n; i++) {
int c = a + b;
a = b;
b = c;
}
return b;
}
9. ФУНКЦИОНАЛЬНЫЙ
HASKELL
fib :: Int -> Integer
fib n = fibs (0,1) !! n
where fibs (a,b) = a : fibs (b,a+b)
10. ЛОГИЧЕСКИЙ PROLOG
fib(0, 0, 1):-!.
fib(N, A, B):-
N1 = N - 1,
fib(N1, A1, B1),
A = B1,
B = A1 + B1.
11. ЯЗЫК C
• 1972 г., Деннис Ричи (Bell Labs).
• «Переносимый ассемблер» для системных целей:
• Операционные системы: ядра, системные библиотеки.
• Компиляторы, виртуальные машины, …
• Дает широкие возможности, но требует аккуратности.
12. ИСТОРИЯ
• 1972 г. – рождение.
• 1978 г. – выход книги, «K&R» C.
• 1983 г. – отпочковался C++.
• 1989 г. – стандарт ANSI C или C89.
• 1999 г. – стандарт C99 (не совместим с C++!).
• 2011 г. – стандарт C11.
13. КОМПИЛЯТОРЫ
• GNU Compiler Collection.
• Microsoft Visual C++.
• Intel C++.
• Clang/LLVM.
15. СТРУКТУРА ПРОГРАММЫ
• Программа состоит из функций, в т. ч. функции main().
• Функции расположены в файлах *.c. Например:
• main.c
• util.c
• lib.c
• magic.c
17. ОБЪЕКТНЫЙ ФАЙЛ FILE.O
• Машинный код функций, • hello_world.c:
объявленных в file.c.
• Машинный код функции
• Памятьпод объявленные main().
глобальные переменные.
• Ссылка
на внешнюю
• Ссылкина внешние функцию printf().
функции.
• Ссылки
на глобальные
переменные.
18. ЭТАП 2. ЛИНКОВКА
main.o
util.o Исполняемый
Линкер
файл
lib.o
magic.o
Статические Динамические
библиотеки библиотеки
19. РАБОТА ЛИНКЕРА
• Операционная единица: имя. Каждый объектный модуль (в т. ч. библиотечный):
• Предоставляет какие-то имена (функции, переменные, …)
• Требует какие-то имена.
• Линкер удовлетворяет зависимости (все начинается с имени main).
• Ошибки:
• Имя требуется одним из модулей, но никаким не предоставляется.
• Одно и то же имя предоставляется более, чем одним модулем.
20. ИСПОЛНЯЕМЫЙ ФАЙЛ
• Содержит все нужные имена (и ничего лишнего). Все
ссылки на имена в объектных файлах были разрешены.
• Попостроению зависит от объектных файлов и
библиотек (те зависят от исходных файлов).
• Длявыполнения не нужно больше ничего (за исключением
динамических библиотек).