0
ОСНОВЫ ПРОГРАММНОГО  КОНСТРУИРОВАНИЯ                  Лекция № 2             26 февраля 2013 г.
ИНЬ И ЯН     ПРОГРАММИРОВАНИЯ• Алгоритмы.• Структуры   данных.• Алгоритмы    + Структуры данных = Программы.
ДАННЫЕ (ИНФОРМАЦИЯ)• Данные   для человека:    • Изображения   (видео). • Числа       (целые,              • Звук.  вещест...
МАШИННОЕ ПРЕДСТАВЛЕНИЕ ДАННЫХ• Целыечисла – двоичная   • Набор    чисел, символов – система счисления.        массив.• Вещ...
АЛГОРИТМ• Решает   определенную задачу.• Конечная   упорядоченная последовательность действий.• Обычно имеет входные парам...
ЯЗЫКИ     ПРОГРАММИРОВАНИЯ• Структуры   данных: • Типы   данных (числа, символы, строки, …). • Переменные.• Алгоритмы: • О...
ПАРАДИГМЫ     ПРОГРАММИРОВАНИЯ• Императивная. Программа  – это и есть алгоритм. В каждый момент есть глобальное состояние ...
ИМПЕРАТИВНЫЙ Cint fib(int n) {    int a = 0, b = 1;    int i;    for (i = 1; i < n; i++) {        int c = a + b;        a ...
ФУНКЦИОНАЛЬНЫЙ         HASKELLfib :: 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   г. – стандарт ...
КОМПИЛЯТОРЫ• 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. Наприм...
ЭТАП 1. КОМПИЛЯЦИЯИсходные файлы (модули)   Объектные файлы             main.c        main.o             util.c        uti...
ОБЪЕКТНЫЙ ФАЙЛ FILE.O• Машинный код функций,   • hello_world.c: объявленных в file.c.                            • Машинный...
ЭТАП 2. ЛИНКОВКАmain.o util.o                  Исполняемый            Линкер                            файл lib.omagic.o ...
РАБОТА ЛИНКЕРА•   Операционная единица: имя. Каждый объектный модуль (в т. ч. библиотечный):    •   Предоставляет какие-то...
ИСПОЛНЯЕМЫЙ ФАЙЛ• Содержит  все нужные имена (и ничего лишнего). Все ссылки на имена в объектных файлах были разрешены.• П...
КОНЕЦ ВТОРОЙ ЛЕКЦИИ     Язык C – это хорошо.
Upcoming SlideShare
Loading in...5
×

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

701

Published on

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

Published in: Technology
3 Comments
1 Like
Statistics
Notes
  • Ну, например, из-за своей слабой типизации. Арифметические/побитовые операции с операндам разных типов, неявными приведениями и т.д. могут легко привести к переполнению буферов, обращению по несуществующему адресу и т.д.
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • А чем плох язык C? :)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Не согласен с последним предложением :)
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
No Downloads
Views
Total Views
701
On Slideshare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
12
Comments
3
Likes
1
Embeds 0
No embeds

No notes for slide

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

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

    Clipping is a handy way to collect important slides you want to go back to later.

×