Upload
vladimir-parfinenko
View
720
Download
3
Embed Size (px)
DESCRIPTION
1. Алгоритмы + Структуры данных = Программы. 2. Виды данных. 3. Машинное представление данных. 4. Понятие алгоритма. 5. Парадигмы программирования: императивная, функциональная, логическая. 6. Язык C, его история. 7. Структура C-программы. 8. Сборка программы: компиляция и линковка.
Citation preview
ОСНОВЫ ПРОГРАММНОГО КОНСТРУИРОВАНИЯ
Лекция № 226 февраля 2013 г.
ИНЬ И ЯН ПРОГРАММИРОВАНИЯ
• Алгоритмы.
• Структуры данных.
• Алгоритмы + Структуры данных = Программы.
ДАННЫЕ (ИНФОРМАЦИЯ)
• Данные для человека:
• Числа (целые, вещественные, комплексные)…
• Наборы чисел (ряды, векторы, матрицы).
• Текст (символы).
• Изображения (видео).
• Звук.
• «Записи».
• Компьютер может: 00011100111010101
МАШИННОЕ ПРЕДСТАВЛЕНИЕ ДАННЫХ• Целые числа – двоичная система счисления.
• Вещественные числа – представление с плавающей точкой.
• Символы – числа (кодировка).
• Набор чисел, символов – массив.
• Картинка – массив пикселов с цветом (RGB).
• Звук – набор отсчетов (квантованная амплитуда).
АЛГОРИТМ
• Решает определенную задачу.
• Конечная упорядоченная последовательность действий.
•Обычно имеет входные параметры и выходные результаты.
• Пример: алгоритм Евклида поиска НОД двух чисел:
• НОД(a, b) = НОД(a-b, b) если a > b
ЯЗЫКИ ПРОГРАММИРОВАНИЯ
• Структуры данных:
• Типы данных (числа, символы, строки, …).
• Переменные.
• Алгоритмы:
•Операции над данными, в определенной последовательности – согласно синтаксису языка.
ПАРАДИГМЫ ПРОГРАММИРОВАНИЯ
• Императивная. Программа – это и есть алгоритм. В каждый момент есть глобальное состояние (содержимое памяти), явно доступное для изменения. Языки: Pascal, C, …
•Функциональная. Программа – это функция. Нет явного состояния. Языки: LISP, Haskell, Microsoft Excel (!)
• Логическая. Программа – это набор предикатов и правил вывода. Языки: Prolog, SQL.
ИМПЕРАТИВНЫЙ 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;}
ФУНКЦИОНАЛЬНЫЙ HASKELL
fib :: Int -> Integerfib n = fibs (0,1) !! n where fibs (a,b) = a : fibs (b,a+b)
ЛОГИЧЕСКИЙ PROLOG
fib(0, 0, 1):-!.
fib(N, A, B):-N1 = N - 1,fib(N1, A1, B1),A = B1,B = A1 + B1.
ЯЗЫК C
• 1972 г., Деннис Ричи (Bell Labs).
• «Переносимый ассемблер» для системных целей:
•Операционные системы: ядра, системные библиотеки.
• Компиляторы, виртуальные машины, …
• Дает широкие возможности, но требует аккуратности.
ИСТОРИЯ
• 1972 г. – рождение.
• 1978 г. – выход книги, «K&R» C.
• 1983 г. – отпочковался C++.
• 1989 г. – стандарт ANSI C или C89.
• 1999 г. – стандарт C99 (не совместим с C++!).
• 2011 г. – стандарт C11.
КОМПИЛЯТОРЫ
• GNU Compiler Collection.
•Microsoft Visual C++.
• Intel C++.
• Clang/LLVM.
HELLO_WORLD.C
#include <stdio.h>
int main(void) { printf("Hello, world!\n"); return 0;}
СТРУКТУРА ПРОГРАММЫ
• Программа состоит из функций, в т. ч. функции main().
•Функции расположены в файлах *.c. Например:
•main.c
• util.c
• lib.c
•magic.c
ЭТАП 1. КОМПИЛЯЦИЯ
main.c
util.c
lib.c
magic.c
main.o
util.o
lib.o
magic.o
Исходные файлы (модули) Объектные файлы
ОБЪЕКТНЫЙ ФАЙЛ FILE.O
•Машинный код функций, объявленных в file.c.
• Память под объявленные глобальные переменные.
• Ссылки на внешние функции.
• Ссылки на глобальные переменные.
• hello_world.c:
•Машинный код функции main().
• Ссылка на внешнюю функцию printf().
ЭТАП 2. ЛИНКОВКА
main.o
util.o
lib.o
magic.oСтатические библиотеки
Линкер Исполняемый файл
Динамические библиотеки
РАБОТА ЛИНКЕРА
• Операционная единица: имя. Каждый объектный модуль (в т. ч. библиотечный):
• Предоставляет какие-то имена (функции, переменные, …)
• Требует какие-то имена.
• Линкер удовлетворяет зависимости (все начинается с имени main).
• Ошибки:
• Имя требуется одним из модулей, но никаким не предоставляется.
• Одно и то же имя предоставляется более, чем одним модулем.
ИСПОЛНЯЕМЫЙ ФАЙЛ
• Содержит все нужные имена (и ничего лишнего). Все ссылки на имена в объектных файлах были разрешены.
• По построению зависит от объектных файлов и библиотек (те зависят от исходных файлов).
• Для выполнения не нужно больше ничего (за исключением динамических библиотек).
КОНЕЦ ВТОРОЙ ЛЕКЦИИЯзык C – это хорошо.