21
ОСНОВЫ ПРОГРАММНОГО КОНСТРУИРОВАНИЯ Лекция 2 26 февраля 2013 г.

ОПК № 2 – Алгоритмы и структуры данных, язык C

Embed Size (px)

DESCRIPTION

1. Алгоритмы + Структуры данных = Программы. 2. Виды данных. 3. Машинное представление данных. 4. Понятие алгоритма. 5. Парадигмы программирования: императивная, функциональная, логическая. 6. Язык C, его история. 7. Структура C-программы. 8. Сборка программы: компиляция и линковка.

Citation preview

Page 1: ОПК № 2 – Алгоритмы и структуры данных, язык C

ОСНОВЫ ПРОГРАММНОГО КОНСТРУИРОВАНИЯ

Лекция № 226 февраля 2013 г.

Page 2: ОПК № 2 – Алгоритмы и структуры данных, язык C

ИНЬ И ЯН ПРОГРАММИРОВАНИЯ

• Алгоритмы.

• Структуры данных.

• Алгоритмы + Структуры данных = Программы.

Page 3: ОПК № 2 – Алгоритмы и структуры данных, язык C

ДАННЫЕ (ИНФОРМАЦИЯ)

• Данные для человека:

• Числа (целые, вещественные, комплексные)…

• Наборы чисел (ряды, векторы, матрицы).

• Текст (символы).

• Изображения (видео).

• Звук.

• «Записи».

• Компьютер может: 00011100111010101

Page 4: ОПК № 2 – Алгоритмы и структуры данных, язык C

МАШИННОЕ ПРЕДСТАВЛЕНИЕ ДАННЫХ• Целые числа – двоичная система счисления.

• Вещественные числа – представление с плавающей точкой.

• Символы – числа (кодировка).

• Набор чисел, символов – массив.

• Картинка – массив пикселов с цветом (RGB).

• Звук – набор отсчетов (квантованная амплитуда).

Page 5: ОПК № 2 – Алгоритмы и структуры данных, язык C

АЛГОРИТМ

• Решает определенную задачу.

• Конечная упорядоченная последовательность действий.

•Обычно имеет входные параметры и выходные результаты.

• Пример: алгоритм Евклида поиска НОД двух чисел:

• НОД(a, b) = НОД(a-b, b) если a > b

Page 6: ОПК № 2 – Алгоритмы и структуры данных, язык C

ЯЗЫКИ ПРОГРАММИРОВАНИЯ

• Структуры данных:

• Типы данных (числа, символы, строки, …).

• Переменные.

• Алгоритмы:

•Операции над данными, в определенной последовательности – согласно синтаксису языка.

Page 7: ОПК № 2 – Алгоритмы и структуры данных, язык C

ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ

• Императивная. Программа – это и есть алгоритм. В каждый момент есть глобальное состояние (содержимое памяти), явно доступное для изменения. Языки: Pascal, C, …

•Функциональная. Программа – это функция. Нет явного состояния. Языки: LISP, Haskell, Microsoft Excel (!)

• Логическая. Программа – это набор предикатов и правил вывода. Языки: Prolog, SQL.

Page 8: ОПК № 2 – Алгоритмы и структуры данных, язык C

ИМПЕРАТИВНЫЙ 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;}

Page 9: ОПК № 2 – Алгоритмы и структуры данных, язык C

ФУНКЦИОНАЛЬНЫЙ HASKELL

fib :: Int -> Integerfib n = fibs (0,1) !! n where fibs (a,b) = a : fibs (b,a+b)

Page 10: ОПК № 2 – Алгоритмы и структуры данных, язык C

ЛОГИЧЕСКИЙ PROLOG

fib(0, 0, 1):-!.

fib(N, A, B):-N1 = N - 1,fib(N1, A1, B1),A = B1,B = A1 + B1.

Page 11: ОПК № 2 – Алгоритмы и структуры данных, язык C

ЯЗЫК C

• 1972 г., Деннис Ричи (Bell Labs).

• «Переносимый ассемблер» для системных целей:

•Операционные системы: ядра, системные библиотеки.

• Компиляторы, виртуальные машины, …

• Дает широкие возможности, но требует аккуратности.

Page 12: ОПК № 2 – Алгоритмы и структуры данных, язык C

ИСТОРИЯ

• 1972 г. – рождение.

• 1978 г. – выход книги, «K&R» C.

• 1983 г. – отпочковался C++.

• 1989 г. – стандарт ANSI C или C89.

• 1999 г. – стандарт C99 (не совместим с C++!).

• 2011 г. – стандарт C11.

Page 13: ОПК № 2 – Алгоритмы и структуры данных, язык C

КОМПИЛЯТОРЫ

• GNU Compiler Collection.

•Microsoft Visual C++.

• Intel C++.

• Clang/LLVM.

Page 14: ОПК № 2 – Алгоритмы и структуры данных, язык C

HELLO_WORLD.C

#include <stdio.h>

int main(void) { printf("Hello, world!\n"); return 0;}

Page 15: ОПК № 2 – Алгоритмы и структуры данных, язык C

СТРУКТУРА ПРОГРАММЫ

• Программа состоит из функций, в т. ч. функции main().

•Функции расположены в файлах *.c. Например:

•main.c

• util.c

• lib.c

•magic.c

Page 16: ОПК № 2 – Алгоритмы и структуры данных, язык C

ЭТАП 1. КОМПИЛЯЦИЯ

main.c

util.c

lib.c

magic.c

main.o

util.o

lib.o

magic.o

Исходные файлы (модули) Объектные файлы

Page 17: ОПК № 2 – Алгоритмы и структуры данных, язык C

ОБЪЕКТНЫЙ ФАЙЛ FILE.O

•Машинный код функций, объявленных в file.c.

• Память под объявленные глобальные переменные.

• Ссылки на внешние функции.

• Ссылки на глобальные переменные.

• hello_world.c:

•Машинный код функции main().

• Ссылка на внешнюю функцию printf().

Page 18: ОПК № 2 – Алгоритмы и структуры данных, язык C

ЭТАП 2. ЛИНКОВКА

main.o

util.o

lib.o

magic.oСтатические библиотеки

Линкер Исполняемый файл

Динамические библиотеки

Page 19: ОПК № 2 – Алгоритмы и структуры данных, язык C

РАБОТА ЛИНКЕРА

• Операционная единица: имя. Каждый объектный модуль (в т. ч. библиотечный):

• Предоставляет какие-то имена (функции, переменные, …)

• Требует какие-то имена.

• Линкер удовлетворяет зависимости (все начинается с имени main).

• Ошибки:

• Имя требуется одним из модулей, но никаким не предоставляется.

• Одно и то же имя предоставляется более, чем одним модулем.

Page 20: ОПК № 2 – Алгоритмы и структуры данных, язык C

ИСПОЛНЯЕМЫЙ ФАЙЛ

• Содержит все нужные имена (и ничего лишнего). Все ссылки на имена в объектных файлах были разрешены.

• По построению зависит от объектных файлов и библиотек (те зависят от исходных файлов).

• Для выполнения не нужно больше ничего (за исключением динамических библиотек).

Page 21: ОПК № 2 – Алгоритмы и структуры данных, язык C

КОНЕЦ ВТОРОЙ ЛЕКЦИИЯзык C – это хорошо.