Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
ОСНОВЫ ПРОГРАММНОГО
  КОНСТРУИРОВАНИЯ
                  Лекция № 2
             26 февраля 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 -> Integer
fib 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        main.o


             util.c        util.o


              lib.c         lib.o


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

• Машинный код функций,   • hello_world.c:
 объявленных в file.c.
                            • Машинный       код функции
• Памятьпод объявленные      main().
 глобальные переменные.
                            • Ссылка
                                   на внешнюю
• Ссылкина внешние           функцию printf().
 функции.

• Ссылки
       на глобальные
 переменные.
ЭТАП 2. ЛИНКОВКА

main.o


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


magic.o
           Статические   Динамические
           библиотеки     библиотеки
РАБОТА ЛИНКЕРА
•   Операционная единица: имя. Каждый объектный модуль (в т. ч. библиотечный):

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

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

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

•   Ошибки:

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

    •   Одно и то же имя предоставляется более, чем одним модулем.
ИСПОЛНЯЕМЫЙ ФАЙЛ

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

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

• Длявыполнения не нужно больше ничего (за исключением
 динамических библиотек).
КОНЕЦ ВТОРОЙ ЛЕКЦИИ
     Язык C – это хорошо.

More Related Content

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

  • 1. ОСНОВЫ ПРОГРАММНОГО КОНСТРУИРОВАНИЯ Лекция № 2 26 февраля 2013 г.
  • 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.
  • 14. HELLO_WORLD.C #include <stdio.h> int main(void) { printf("Hello, world!n"); return 0; }
  • 15. СТРУКТУРА ПРОГРАММЫ • Программа состоит из функций, в т. ч. функции main(). • Функции расположены в файлах *.c. Например: • main.c • util.c • lib.c • magic.c
  • 16. ЭТАП 1. КОМПИЛЯЦИЯ Исходные файлы (модули) Объектные файлы main.c main.o util.c util.o lib.c lib.o magic.c magic.o
  • 17. ОБЪЕКТНЫЙ ФАЙЛ FILE.O • Машинный код функций, • hello_world.c: объявленных в file.c. • Машинный код функции • Памятьпод объявленные main(). глобальные переменные. • Ссылка на внешнюю • Ссылкина внешние функцию printf(). функции. • Ссылки на глобальные переменные.
  • 18. ЭТАП 2. ЛИНКОВКА main.o util.o Исполняемый Линкер файл lib.o magic.o Статические Динамические библиотеки библиотеки
  • 19. РАБОТА ЛИНКЕРА • Операционная единица: имя. Каждый объектный модуль (в т. ч. библиотечный): • Предоставляет какие-то имена (функции, переменные, …) • Требует какие-то имена. • Линкер удовлетворяет зависимости (все начинается с имени main). • Ошибки: • Имя требуется одним из модулей, но никаким не предоставляется. • Одно и то же имя предоставляется более, чем одним модулем.
  • 20. ИСПОЛНЯЕМЫЙ ФАЙЛ • Содержит все нужные имена (и ничего лишнего). Все ссылки на имена в объектных файлах были разрешены. • Попостроению зависит от объектных файлов и библиотек (те зависят от исходных файлов). • Длявыполнения не нужно больше ничего (за исключением динамических библиотек).
  • 21. КОНЕЦ ВТОРОЙ ЛЕКЦИИ Язык C – это хорошо.