Азы программирования том 1

Азы программирования. том 1.

Столяров А. В. "Программирование: введение в профессию" МАКС Пресс, 2016 год, 464 стр. (7,06 мб. pdf)

Хотите узнать трудно ли стать программистом и что из себя представляет эта профессия? Начните с чтения представленного двухтомника, где автор поделится с вами своим практическим опытом, наблюдениями и советами о работе программиста. Читая книги вы сможете самостоятельно определить собственные приоритеты знаний и умений. Стоит ли вам посвящать свою жизнь программированию и в чем заключается работа программиста.

Первый том и первую часть книги вошли избранные сведения по вычислительной технике, математике, в области необходимой для программиста: алгебры, логики, комбинаторики. А также математических основ программирования: теории вычислимости, алгоритмов, технологией вычислительных систем, основами командной строки ОС Unix. Вторая часть, это основы программирования с примерами на Free Pascal под Unix.

Материал построен под изучение языка Си и его особенностей (работа с адресами и указателями, построению списков, динамических структур данных). Приводятся сведения о принципах формирования текстов программ, тестировании и отладке. Книга для тех кто интересуется программированием, как будущей профессией.
ISBN 978-5-317-05222-5

Оглавление книги.

Предисловие первое, философское 8
Предисловие второе, методическое 12
Можно ли выучить программиста 13
Самообучение — это тоже не так просто 14
Выход есть, или "Почему Unіх" 15
Причина первая — математическая 16
Причина вторая — психологическая 17
Причина третья — эргономическая 19
Причина четвёртая — педагогическая 19
Язык определяет мышление 21
Как испортить хорошую идею и как её спасти 26
Предисловие третье, напутственное 28
Предисловие к первому тому 32

1. Предварительные сведения 34
1.1. Что такое компьютер: немного истории 34
1.2. История ОС Unіх 48
1.3. Как компьютер работает 52
1.3.1. Процессор, память, шина 52
1.3.2. Принципы работы центрального процессора 54
1.3.3. Внешние устройства 56
1.3.4. Иерархия запоминающих устройств 57
1.3.5. Резюме 59
1.4. Как правильно использовать компьютер 60
1.4.1. Операционные системы и виды пользовательского интерфейса 60
1.4.2. Unіх на домашней машине 70
1.4.3. Первый сеанс в компьютерном классе 73
1.4.4. Дерево каталогов. Работа с файлами 75
1.4.5. Шаблоны имён файлов 77
1.4.6. История команд и автодописывание имён файлов 78
1.4.7. Управление выполнением задач 79
1.4.8. Выполнение в фоновом режиме 84
1.4.9. Перенаправление потоков ввода-вывода 85
1.4.10. Редакторы текстов 87
1.4.11. Права доступа к файлам 92
1.4.12. Электронная документация 94
1.4.13. Командные файлы в Bourne Shell 96
1.4.14. Переменные окружения 99
1.4.15. Протоколирование сеанса работы 101
1.4.16. Графическая подсистема в ОС Unix 101
1.5. Теперь немного математики 106
1.5.1. Элементы комбинаторики 106
1.5.2. Позиционные системы счисления 122
1.5.3. Двоичная логика 131
1.5.4. Виды бесконечности 136
1.5.5. Алгоритмы и вычислимость 141
1.5.6. Алгоритм и его свойства 151
1.5.7. Последовательность действий тут ни при чём 158
1.6. Программы и данные 162
1.6.1. Об измерении количества информации 162
1.6.2. Машинное представление целых чисел 167
1.6.3. Числа с плавающей точкой 172
1.6.4. Тексты и языки 175
1.6.5. Текст как формат данных. Кодировки 178
1.6.6. Бинарные и текстовые данные 184
1.6.7. Машинный код, компиляторы и интерпретаторы 187

2. Язык Паскаль и начала программирования 194
2.1. Первые программы 195
2.2. Выражения и переменные 206
2.2.1. Арифметические операции и понятие типа 206
2.2.2. Переменные, инициализация и присваивание 210
2.2.3. Идентификаторы и зарезервированные слова 213
2.2.4. Ввод информации для её последующей обработки 214
2.2.5. Берегись нехватки разрядности! 217
2.3. Управление последовательностью выполнения 219
2.3.1. Простая последовательность операторов 219
2.3.2. Конструкция ветвления 221
2.3.3. Составной оператор 224
2.3.4. Логические выражения и логический тип 226
2.3.5. Понятие цикла; оператор while 227
2.3.6. Цикл с постусловием; оператор repeat 232
2.3.7. Арифметические циклы и оператор for 233
2.3.8. Вложенные циклы 236
2.4. Подпрограммы 240
2.4.1. Процедуры 241
2.4.2. Функции 244
2.4.3. Параметры-переменные 247
2.4.4. Локальные и глобальные переменные 250
2.4.5. Рекурсия 252
2.5. Ещё о выражениях 254
2.5.1. Побитовые операции 255
2.5.2. Именованные константы 256
2.5.3. Разные способы записи чисел 261
2.6. Конструирование программ 261
2.6.1. Концепция структурного программирования 262
2.6.2. Исключения из правил: операторы выхода 263
2.6.3. Безусловные переходы 267
2.6.4. О разбиении программы на подпрограммы 269
2.7. Символы и их коды; текстовые данные 271
2.7.1. Средства работы с символами в Паскале 271
2.7.2. Посимвольный ввод информации 275
2.7.3. Чтение до конца файла и программы-фильтры 280
2.7.4. Чтение чисел до конца файла; функция SeekEof 285
2.8. Система типов Паскаля 287
2.8.1. Встроенные типы и пользовательские типы 287
2.8.2. Диапазоны и перечислимые типы 289
2.8.3. Общее понятие порядкового типа 292
2.8.4. Массивы 293
2.8.5. Тип запись 301
2.8.6. Конструирование сложных структур данных 302
2.8.7. Пользовательские типы и параметры подпрограмм 303
2.8.8. Преобразования типов 305
2.9. Строки 308
2.9.1. Строковые литералы и массивы char’ов 308
2.9.2. Тип string 311
2.9.3. Встроенные функции для работы со строками . . 313
2.9.4. Обработка параметров командной строки 315
2.10. Оператор выбора 317
2.11. Полноэкранные программы 319
2.11.1. Немного теории 320
2.11.2. Вывод в произвольные позиции экрана 322
2.11.3. Динамический ввод 324
2.11.4. Управление цветом 329
2.12. Файлы 332
2.12.1. Общие сведения 332
2.12.2. Текстовые файлы 338
2.12.3. Типизированные файлы 341
2.12.4. Блочный ввод-вывод 344
2.12.5. Операции над файлом как целым 347
2.13. Адреса, указатели и динамическая память 348
2.13.1. Что такое указатель 350
2.13.2. Указатели в Паскале 351
2.13.3. Динамические переменные 353
2.13.4. Односвязные списки 356
2.13.5. Стек и очередь 367
2.13.6. Проход по списку указателем на указатель 373
2.13.7. Двусвязные списки; деки 379
2.13.8. Обзор других динамических структур данных 384
2.14. Ещё о рекурсии 389
2.14.1. Взаимная рекурсия 389
2.14.2. Ханойские башни 390
2.14.3. Сопоставление с образцом 396
2.14.4. Рекурсия при работе со списками 400
2.14.5. Работа с двоичным деревом поиска 402
2.15. Ещё об оформлении программ 407
2.15.1. Оператор if с веткой else 408
2.15.2. Особенности оформления оператора выбора 410
2.15.3. Метки и оператор goto 411
2.15.4. Максимальная ширина текста программы 414
2.15.5. Как разбить длинную строку 417
2.15.6. Пробелы и разделители 424
2.15.7. Выбор имён (идентификаторов) 425
2.15.8. Регистр букв, ключевые слова и идентификаторы 427
2.15.9. Как справиться с секциями описаний 428
2.16. Тестирование и отладка 429
2.16.1. Отладка в жизни программнста 429
2.16.2. Тесты 433
2.16.3. Отладочная печать 439
2.16.4. Отладчик gdb 441
2.17. Модули и раздельная компиляция 446
2.17.1. Модули в Паскале 448
2.17.2. Использование модулей друг из друга 453
2.17.3. Модуль как архитектурная единица 454
2.17.4. Ослабление сцепленности модулей 454
Список технической литературы 458
Предметный указатель 459


Азы программирования том 2

Низкоуровневое программирование. том 2.

Столяров А. В. "Программирование: введение в профессию" МАКС Пресс, 2016. -496 с. (6,56 мб. pdf)

Во второй том учебника (являющегося продолжением первого тома), вошли сведения по использованию платформы i386, ассемблера NASM, компилятора gcc, отладчика gdb. А также основы программирования на Си в Unix-системах, с использованием её в качестве основной операционной среды. Приводятся сведения по системе автоматической сборки Gnu Make, утилите динамического анализа программ - Valgrind, контроля версий CVS и git. ISBN 978-5-317-05301-7

Оглавление книги.

3.0. Возможности процессора и язык ассемблера 12
3.1. Вводная информация 15
3.1.1. Классические принципы выполнения программ 15
3.1.2. Особенности программирования под управлением мультизадачных операционных систем 18
3.1.3. История платформы i386 22
3.1.4. Знакомимся с инструментом 24
3.1.5. Макросы из файла stud.io.inc 33
3.1.6. Правила оформления ассемблерных программ 34
3.2. Основы системы команд i386 37
3.2.1. Система регистров 37
3.2.2. Память пользовательской задачи. Секции 40
3.2.3. Директивы для отведения памяти 43
3.2.4. Команда mov и виды операндов 48
3.2.5. Косвенная адресация; исполнительный адрес 50
3.2.6. Размеры операндов и их допустимые комбинации 54
3.2.7. Целочисленное сложение и вычитание 56
3.2.8. Целочисленное умножение и деление 59
3.2.9. Условные и безусловные переходы 61
3.2.10. Переходы по результатам сравнений 65
3.2.11. О построении ветвлений и циклов 66
3.2.12. Условные переходы и регистр ЕСХ; циклы 68
3.2.13. Побитовые операции 70
3.2.14. Строковые операции 77
3.2.15. Ещё несколько интересных команд 80
3.3. Стек, подпрограммы, рекурсия 81
3.3.1. Понятие стека и его предназначение 81
3.3.2. Организация стека в процессоре i386 83
3.3.3. Дополнительные команды работы со стеком 85
3.3.4. Подпрограммы: общие принципы 85
3.3.5. Вызов подпрограмм и возврат из них 86
3.3.6. Организация стековых фреймов 88
3.3.7. Основные конвенции вызовов подпрограмм 91
3.3.8. Локальные метрики 93
3.3.9. Пример 94
3.4. Основные особенности ассемблера NASM 99
3.4.1. Ключи и опции командной строки 100
3.4.2. Основы синтаксиса 101
3.4.3. Псевдокоманды 103
3.4.4. Константы 105
3.4.5. Вычисление выражений во время ассемблирования 106
3.4.6. Критические выражения 107
3.4.7. Выражения в составе исполнительного адреса 108
3.5. Макросредства и макропроцессор 109
3.5.1. Основные понятия 109
3.5.2. Простейшие примеры макросов 110
3.5.3. Однострочные макросы; макропеременные 113
3.5.4. Условная компиляция 116
3.5.5. Макроповторения 119
3.5.6. Многострочные макросы и локальные метки 121
3.5.7. Макросы с переменным числом параметров 123
3.5.8. Макродирективы для работы со строками 125
3.6. Взаимодействие с операционной системой 126
3.6.1. Мультизадачность и её основные виды 126
3.6.2. Аппаратная поддержка мультизадачности 131
3.6.3. Прерывания н исключения 134
3.6.4. Системные вызовы и "программные прерывания" 138
3.6.5. Конвенция системных вызовов ОС Linux 141
3.6.6. Конвенция системных вызовов ОС FreeBSD 142
3.6.7. Примеры системных вызовов 144
3.6.8. Доступ к параметрам командной строки 147
3.6.9. Пример: копирование файла 152
3.7. Раздельная трансляция 159
3.7.1. Поддержка модулей в NASM 161
3.7.2. Пример 161
3.7.3. Объектный код и машинный код 166
3.7.4. Библиотеки 167
3.7.5. Алгоритм работы редактора связей 169
3.8. Арифметика с плавающей точкой 171
3.8.1. Форматы чисел с плавающей точкой 172
3.8.2. Устройство арифметического сопроцессора 174
3.8.3. Обмен данными с сопроцессором 176
3.8.4. Команды арифметических действий 177
3.8.5. Команды вычисления математических функций 181
3.8.6. Сравнение и обработка его результатов 181
3.8.7. Исключительные ситуации и их обработка 183
3.8.8. Исключения и команда wait 185
3.8.9. Регистры управления сопроцессором 186
3.8.10. Инициализация, сохранение и восстановление 188
Заключительные замечания 189

4. Программирование на языке Си 190
4.1. Феномен языка Си (вместо предисловия) 190
4.2. Примеры программ на Си 195
4.2.1. Программа "Hello, world" 196
4.2.2. О завершении программы 202
4.2.3. Квадратное уравнение 204
4.2.4. Как узнать имя нужного заголовочного файла 211
4.3. Базовые средства языка Си 213
4.3.1. Структура программы; объявления и описания функций 213
4.3.2. Переменные и их описание 216
4.3.3. Встроенные типы 218
4.3.4. Литералы (константы) разных типов 222
4.3.5. Операции и выражения 225
4.3.6. Операторы языка Си 235
4.3.7. Локальные "статические" переменные 247
4.4. Указатели, массивы, строки 249
4.4.1. Указатели и операции над ними 250
4.4.2. Массивы 253
4.4.3. Динамическая память 255
4.4.4. Модификатор const 256
4.4.5. Инициализаторы для массивов 258
4.4.6. Строки 259
4.4.7. Строковые литералы 264
4.5. Обработка аргументов командной строки 266
4.6. Стандартные функции ввода-вывода 269
4.6.1. Посимвольный ввод-вывод 269
4.6.2. Форматированный ввод-вывод 273
4.6.3. Работа с текстовыми файлами 280
4.6.4. Ввод-вывод отдельных строк 288
4.6.5. О буферизации ввода-вывода 294
4.6.6. "Вывод" в строку и "ввод" из строки 295
4.6.7. Блочный ввод-вывод 297
4.6.8. Ввод-вывод низкого уровня 299
4.7. Избранные примеры программ 303
4.7.1. Ханойские башни 304
4.7.2. Сопоставление строки с образцом 304
4.8. Перечислимый тип 306
4.8.1. Правила описания и основные возможности 306
4.8.2. Перечислимый тип как средство описания констант 310
4.8.3. Перечислимый тип и оператор выбора 311
4.9. Составной тип данных и динамические структуры 314
4.9.1. Структуры 314
4.9.2. Односвязные списки 317
4.9.3. Двусвязные списки 325
4.9.4. Простое бинарное дерево поиска 328
4.9.5. Объединения и вариантные структуры 333
4.9.6. Битовые поля 336
4.9.7. Директива typedef 337
4.10. Макропроцессор 338
4.10.1. Предварительные сведения 338
4.10.2. Макроопределения и макровызовы 340
4.10.3. Соглашения об именовании 341
4.10.4. Более сложные возможности макросов 344
4.10.5. (*) Макросы и конструкция do { } while(0) 348
4.10.6. Директивы условной компиляции 349
4.10.7. Ещё несколько полезных директив 353
4.10.8. Директива #include 354
4.10.9. Особенности оформления макродиректив 356
4.11. Раздельная трансляция 358
4.11.1. Общая схема раздельной трансляции в Си 358
4.11.2. Видимость объектов из других модулей 359
4.11.3. Заголовочные файлы к модулям 362
4.11.4. Описания типов и макросов в заголовочных файлах; защита от повторного включения 364
4.11.5. Объявления типов; неполные типы 368
4.12. И снова об оформлении кода 369
4.12.1. Фирменные особенности Си 371
4.12.2. Последовательности взаимоисключающих if*ов 378
4.12.3. О роли ASCII-набора и английского языка 380
4.12.4. (*) Программы, говорящие по-русски 382
4.13. Ещё об указателях 391
4.13.1. Многомерные массивы и указатели на массивы 391
4.13.2. Указатели на функции 394
4.13.3. Сложные описания и общие правила их прочтения 401
4.14. Ещё о возможностях стандартной библиотеки 405
4.14.1. Дополнительные функции работы с динамической памятью 405
4.14.2. Функции обработки строк 406
4.14.3. Генерация псевдослучайных чисел 411
4.14.4. (*) Средства создания вариадических функций 413
4.15. (*) Полноэкранные программы на Си 415
4.15.1. Простой пример 416
4.15.2. Обработка клавиатурных и других событий 419
4.15.3. Управление цветом и атрибутами символов 424
4.15.4. Клавиатурный ввод с тайм-аутами 429
4.15.5. Обзор остальных возможностей ncurses 432
4.16. (*) Программа на Си без стандартной библиотеки 433
4.17. Инструментарий программиста 441
4.17.1. Компилятор gcc 441
4.17.2. Отладчик gdb 443
4.17.3. Программа valgrind 447
4.17.4. Система автоматической сборки (Gnu Make) 450
4.17.5. Сравнение файлов и наложение изменений 456
4.17.6. Системы контроля версий 463
Список технической литературы 490
Предметный указатель 491

Скачать том 1 бесплатно7,06 мб. pdf

 

Скачать том 2 бесплатно6,56 мб. pdf

 

Как стать программистом. Видео