Руководства по языкам программирования

Руководство по языку программирования Си

Последнее обновление: 06.09.2023

  1. Глава 1. Введение в C

    1. Язык программирования C

    2. Компилятор GCC. Первая программа на Windows

    3. Компилятор Clang. Первая программа на Windows

    4. GCC. Первая программа на Linux

    5. Clang. Первая программа на MacOS

    6. Настройка параметров компиляции

  2. Глава 2. Основы языка Си

    1. Структура программы на Си

    2. Переменные

    3. Типы данных

    4. Консольный вывод. Функция printf

    5. Константы

    6. Арифметические операции

    7. Условные операции

    8. Поразрядные операции

    9. Операции присваивания

    10. Преобразование типов

    11. Условные конструкции

    12. Циклы

    13. Введение в массивы и строки

    14. Ввод в консоли. Функция scanf

  3. Глава 3. Указатели

    1. Что такое указатели

    2. Операции с указателями

    3. Арифметика указателей

    4. Константы и указатели

    5. Указатели, массивы и строки

    6. Массивы указателей и многоуровневая адресация

  4. Глава 4. Функции

    1. Определение и описание функций

    2. Параметры функции

    3. Результат функции

    4. Рекурсивные функции

    5. Область видимости переменных

    6. Внешние объекты

    7. Указатели в параметрах функции

    8. Указатели на функции

    9. Указатели на функции как параметры и результаты функций

    10. Функции с переменным количеством параметров

    11. Параметры командной строки

  5. Глава 5. Препроцессор

    1. Директива #include. Включение файлов

    2. Директива #define

    3. Макросы

    4. Условная компиляция

  6. Глава 6. Структуры

    1. Определение структур

    2. Структуры как элементы структур

    3. Указатели на структуры

    4. Массивы структур

    5. Структуры и функции

    6. Перечисления

    7. Объединения

    8. Битовые поля

  7. Глава 7. Динамическая память

    1. Выделение и освобождение памяти

    2. Выделение памяти для двухмерного массива произвольной длины

    3. Управление динамической памятью

    4. Указатель как результат функции

  8. Глава 8. Ввод-вывод и работа с файлами

    1. Открытие и закрытие потоков

    2. Чтение и запись бинарных файлов

    3. Чтение и запись структур в файл

    4. Чтение и запись в файл и функции fwrite и fread

    5. Чтение и запись текстовых файлов

    6. Форматируемый ввод-вывод

    7. Позиционирование в файле

    8. Консольный ввод-вывод

    9. Форматированный ввод и вывод в строки. Функции sscanf и sprintf

  9. Глава 9. Стандартная библиотека С

    1. Заголовочные файлы стандартной библиотеки С

    2. Работа со строками

    3. Работа с памятью

    4. Работа с датами и временем

    5. Математические функции

    6. Преобразование строк в числа и чисел в строки

    7. Обобщения и макрос _Generic

    8. Поддержка Unicode и кодировки UTF-16 и UTF-32

  10. Глава 10. Среды разработки для С

    1. Первая программа в Visual Studio

    2. Первая программа в Qt Creator

  11. Глава 11. Взаимодействие с кодом Python

    1. Подключение Python

  • Глава 1. Введение в С
    • Язык программирования С
    • Компилятор GCC. Первая программа на Windows
    • Компилятор Clang. Первая программа на Windows
    • GCC. Первая программа на Linux
    • Clang. Первая программа на MacOS
    • Настройка параметров компиляции
  • Глава 2. Основы языка Си
    • Структура программы на Си
    • Переменные
    • Типы данных
    • Консольный вывод. Функция printf
    • Константы
    • Арифметические операции
    • Условные операции
    • Поразрядные операции
    • Операции присваивания
    • Преобразование типов
    • Условные конструкции
    • Циклы
    • Введение в массивы и строки
    • Ввод в консоли. Функция scanf
  • Глава 3. Указатели
    • Что такое указатели
    • Операции с указателями
    • Арифметика указателей
    • Константы и указатели
    • Указатели, массивы и строки
    • Массивы указателей и многоуровневая адресация
  • Глава 4. Функции
    • Определение и описание функций
    • Параметры функции
    • Результат функции
    • Рекурсивные функции
    • Область видимости переменных
    • Внешние объекты
    • Указатели в параметрах функции
    • Указатели на функции
    • Указатели на функции как параметры и результаты функций
    • Функции с переменным количеством параметров
    • Параметры командной строки
  • Глава 5. Препроцессор
    • Директива #include. Включение файлов
    • Директива #define
    • Макросы
    • Условная компиляция
  • Глава 6. Структуры
    • Определение структур
    • Структуры как элементы структур
    • Указатели на структуры
    • Массивы структур
    • Структуры и функции
    • Перечисления
    • Объединения
    • Битовые поля
  • Глава 7. Динамическая память
    • Выделение и освобождение памяти
    • Выделение памяти для двухмерного массива произвольной длины
    • Управление динамической памятью
    • Указатель как результат функции
  • Глава 8. Ввод-вывод и работа с файлами
    • Открытие и закрытие потоков
    • Чтение и запись бинарных файлов
    • Чтение и запись структур в файл
    • Чтение и запись в файл и функции fwrite и fread
    • Чтение и запись текстовых файлов
    • Форматируемый ввод-вывод
    • Позиционирование в файле
    • Консольный ввод-вывод
    • Форматированный ввод и вывод в строки. Функции sscanf и sprintf
  • Глава 9. Стандартная библиотека С
    • Заголовочные файлы стандартной библиотеки С
    • Работа со строками
    • Работа с памятью
    • Работа с датами и временем
    • Математические функции
    • Преобразование строк в числа и чисел в строки
    • Обобщения и макрос _Generic
    • Поддержка Unicode и кодировки UTF-16 и UTF-32
  • Глава 10. Среды разработки для С
    • Первая программа в Visual Studio
    • Первая программа в Qt Creator
  • Глава 11. Взаимодействие с кодом Python
    • Подключение Python

Основы программирования. Лекции

Оглавление

Раздел 1. Введение в программирование 5

Тема 1.1. Основы алгоритмизации 5

Лекция№1 Алгоритмы. Свойства и способы описания линейных алгоритмов. 5

Лекция№2 Составные команды (следования, ветвления, цикла) 11

Лекция№3 Команда присваивания. Заголовок алгоритма 16

Лекция№4 Табличные величины, виды таблиц 21

Лекция№5 Вспомогательные алгоритмы Тестирование ПО 27

Тема 1.2. Языки программирования 33

Лекция№6 Языки программирования, их классификация. 33

Лекция»7 Принципы построения ПО. Трансляторы 40

Лекция№ 8 Стадии разработки программного продукта. Этапы решения задач на ПК. 47

Лекция №9 Величины. Типы данных. 52

Раздел 2. Основные конструкции языков программирования 57

Тема 2.1. Операторы языка программирования 57

Лекция№10 Синтаксис языка. Арифметические выражения 57

Лекция№ 11 Ввод и вывод данных. 63

Лекция№ 12 Условный оператор. Оператор выбора. 67

Лекция№13 Циклы с пост и предусловием Цикл с параметром Вложенные циклы 72

Раздел 3. Структурное и модульное программирование 78

Тема 3.1. Процедуры и функции 78

Лекция№14 Общие сведения о подпрограммах Определение и вызов подпрограмм 78

Тема 3.2. Структуризация в программировании 84

Лекция№15 Основы и методы структурного программирования 84

Тема 3.3. Модульное программирование 88

Лекция№16 Понятие и структура модуля. Компиляция и компоновка программы 88

Раздел 4. Структуры данных 92

Тема 4.1. Массивы 92

Лекция №17 Понятие массива. Особенности программирования массивов 92

Тема 4.2. Строки 97

Лекция№18 Символьный и строковый типы. Объявление типов. 97

Лекция№19 Поиск, удаление, замена и добавление символов в строке. 103

Лекция№20 Операции со строками. Функции и процедуры. Решение задач. 108

Тема 4.3. Множества 114

Лекция№21 Понятие и объявление множества. Операции над множествами. 114

Тема 4.4. Записи 121

Лекция№22 Определение типа записи. Правила работы с записями. 121

Тема 4.5. Файлы 125

Лекция№23 Типы файлов. Файлы последовательного доступа. 125

Тема 4.6. Указатели 131

Лекция№ 25. Указатели и применение динамически распределяемой памяти. 131

Тема 4.6 137

Лекция№26. Структуры данных на основе указателей. 137

Раздел 5. Объектно-ориентированное программирование 143

Тема 5.1 Основные принципы объектно-ориентированного программирования (ООП) 143

Лекция№27. Базовые понятия ООП. Основные принципы ООП. 143

Тема 5.1 147

Лекция№28. Классы объектов. Компоненты и их свойства. 147

Тема 5.2 Интегрированная среда разработчика 152

Лекция№29. Интерфейс среды разработчика: основные окна, интегрированной среде 152

Тема 5.3 Этапы разработки приложения 158

Лекция№30. Проектирование, тестирование и отладка приложения. 158

Тема 5.4 Иерархия классов 164

Лекция№31. Классы объектно-ориентированного языка программирования. 164

Лекция№32. Наследование. Перегрузка методов 170

Тема 5.5. Визуальное событийно-управляемое программирование 174

Лекция№33. Основные компоненты интегрированной среды разработки 174

Тема 5.5. 179

Лекция№34. События компонентов Процедуры, определенные пользователем. 179

Тема 5.6. Разработка оконного приложения 183

Лекция№35. Создание интерфейса оконного приложения. Компиляция и запуск приложения. 183

Раздел 1. Введение в программирование 188

Тема 1.1. Основы алгоритмизации 188

Лекция№1 Алгоритмы. Свойства и способы описания линейных алгоритмов. 188

Лекция№2 Составные команды (следования, ветвления, цикла) 193

Лекция№3 Команда присваивания. Заголовок алгоритма 198

Лекция№4 Табличные величины, виды таблиц 203

Лекция№5 Вспомогательные алгоритмы Тестирование ПО 209

Тема 1.2. Языки программирования 215

Лекция№6 Языки программирования, их классификация. 215

Лекция»7 Принципы построения ПО. Трансляторы 221

Лекция№ 8 Стадии разработкт программного продукта. Этапы решения задач на ПК. 227

Лекция №9 Величины. Типы данных. 232

Раздел 2. Основные конструкции языков программирования 238

Тема 2.1. Операторы языка программирования 238

Лекция№10 Синтаксис языка. Арифметические выражения 238

Лекция№ 11 Ввод и вывод данных. 244

Лекция№ 12 Условный оператор. Оператор выбора. 247

Лекция№13 Циклы с пост и предусловием Цикл с параметром Вложенные циклы 253

Раздел 3. Структурное и модульное программирование 259

Тема 3.1. Процедуры и функции 259

Лекция№14 Общие сведения о подпрограммах Определение и вызов подпрограмм 259

Тема 3.2. Структуризация в программировании 265

Лекция№15 Основы и методы структурного программирования 265

Тема 3.3. Модульное программирование 269

Лекция№16 Понятие и структура модуля. Компиляция и компоновка программы 269

Раздел 4. Структуры данных 273

Тема 4.1. Массивы 273

Лекция №17 Понятие массива. Особенности программирования массивов 273

Тема 4.2. Строки 278

Лекция№18 Символьный и строковый типы. Объявление типов. 278

Лекция№19 Поиск, удаление, замена и добавление символов в строке. 284

Лекция№20 Операции со строками. Функции и процедуры. Решение задач. 290

Тема 4.3. Множества 296

Лекция№21 Понятие и объявление множества. Операции над множествами. 296

Тема 4.4. Записи 303

Лекция№22 Определение типа записи. Правила работы с записями. 303

Тема 4.5. Файлы 308

Лекция№23 Типы файлов. Файлы последовательного доступа. 308

Тема 4.6. Указатели 316

Лекция№ 25. Указатели и применение динамически распределяемой памяти. 316

Тема 4.6 322

Лекция№26. Структуры данных на основе указателей. 322

Раздел 5. Объектно-ориентированное программирование 329

Тема 5.1 Основные принципы объектно-ориентированного программирования (ООП) 329

Лекция№27. Базовые понятия ООП. Основные принципы ООП. 329

Тема 5.1 333

Лекция№28. Классы объектов. Компоненты и их свойства. 333

Тема 5.2 Интегрированная среда разработчика 339

Лекция№29. Интерфейс среды разработчика: основные окна, интегрированной среде 339

Тема 5.3 Этапы разработки приложения 345

Лекция№30. Проектирование, тестирование и отладка приложения. 345

Тема 5.4 Иерархия классов 351

Лекция№31. Классы объектно-ориентированного языка программирования. 351

Лекция№32. Наследование. Перегрузка методов 357

Тема 5.5. Визуальное событийно-управляемое программирование 362

Лекция№33. Основные компоненты интегрированной среды разработки 362

Тема 5.5. 367

Лекция№34. События компонентов Процедуры, определенные пользователем. 367

Тема 5.6. Разработка оконного приложения 372

Лекция№35. Создание интерфейса оконного приложения. Компиляция и запуск приложения. 372

Литература 376

Раздел 1. Введение в программирование

Тема 1.1. Основы алгоритмизации

Лекция№1 Алгоритмы. Свойства и способы описания линейных
алгоритмов.

План лекции

1. Определение алгоритма Свойства

2. Типы алгоритмов

4. Способы описания алгоритмов

5. Примеры

Средства наглядности: презентация

Алгоритм — набор команд (инструкций), определяющих порядок действий исполнителя для решения поставленной задачи,
достижения некоторого результата.

Исполнитель алгоритма устройство, имеющее систему команд. Идеальными исполнителями являются машины, роботы,
компьютеры.

. Свойства алгоритмов:

1.Дискретность

— алгоритм представляет собой последовательность элементарных шагов (команд исполнителя).

2. Детерминированность

— при одних и тех же входных данных получается один и тот же результат, т.е. любое действие должно быть строго и
недвусмысленно определено в каждом случае;

3. Завершаемость (конечность) —

каждый алгоритм завершается за конечное число шагов при любом наборе исходных данных.

4.Результативность — после выполнения алгоритма известно, что считать результатом, алгоритм должен приводить к
правильному результату для всех допустимых входных значениях.

5. Массовость — применимость алгоритма ко множеству исходных данных.

Порядок выполнения алгоритма:

  1. Действия в алгоритме выполняются в порядке их записи
  2. Нельзя менять местами никакие два действия алгоритма
  3. Нельзя не закончив одного действия переходить к следующему

Типы алгоритмов:

1.Линейные (описание действий, которые выполняются однократно в заданном порядке; имеет линейную структуру).

2.Разветвляющиеся (алгоритм, в котором в зависимости от условия выполняется либо одна, либо другая
последовательность действий);

3.Циклические (описание действий, которые должны повторятся указанное число раз или пока не выполнено заданное
условие);

4,Вспомогательные  (алгоритм, который можно использовать в других алгоритмах, указав только его

Способы описания алгоритмов

Способы записи алгоритмов определяются исполнителем. Команды, которые может выполнять исполнитель наз. СИСТЕМОЙ
КОМАНД ИСПОЛНИТЕЛЯ (СКИ). Способы записи бывают:

на естественном языке;

на специальном (формальном) языке (псевдокод);

с помощью формул, рисунков, таблиц;

с помощью стандартных графических объектов (геометрических фигур)

Псевдокод представляет собой систему обозначений и правил, предназначенную для единообразной записи алгоритмов. Он
занимает промежуточное место между естественным и формальным языком.

Правила оформления блок-схем можно посмотреть в ГОСТ 19.701-90.

ГОСТ 19.002-80. Схемы алгоритмов и программ. Правила выполнения.

ГОСТ 19.003-80. Схемы алгоритмов и программ. Обозначения условные

графические.

Каждому действию алгоритма соответствует геометрическая фигура

(блочный символ). Перечень наиболее часто употребляемых символов

приведен в таблице ниже.

Название

Символ (рисунок)

Выполняемая функция (пояснение)

1. Блок вычислений

http://ok-t.ru/studopediaru/baza4/138293625226.files/image005.gif

Выполняет вычислительное действие или группу действий

2. Логический блок

http://ok-t.ru/studopediaru/baza4/138293625226.files/image006.gif

Выбор направления выполнения алгоритма в зависимости от условия

3. Блоки ввода/вывода

http://ok-t.ru/studopediaru/baza4/138293625226.files/image007.gif

Ввод или вывод данных вне зависимости от физического носителя

http://ok-t.ru/studopediaru/baza4/138293625226.files/image008.gif

Вывод данных на печатающее устройство

4. Начало/конец (вход/выход)

http://ok-t.ru/studopediaru/baza4/138293625226.files/image009.gif

Начало или конец программы, вход или выход в подпрограмму

5. Предопределенный процесс

http://ok-t.ru/studopediaru/baza4/138293625226.files/image010.gif

Вычисления по стандартной или пользовательской подпрограмме

6. Блок модификации

http://ok-t.ru/studopediaru/baza4/138293625226.files/image011.gif

Выполнение действий, изменяющих пункты алгоритма

7. Соединитель

http://ok-t.ru/studopediaru/baza4/138293625226.files/image012.gif

Указание связи между прерванными линиями в пределах одной страницы

8. Межстраничный соединитель

http://ok-t.ru/studopediaru/baza4/138293625226.files/image013.gif

Указание связи между частями схемы, расположенной на разных страницах

 Правила построения блок-схем:

1. Блок-схема выстраивается в одном направлении либо сверху вниз, либо слева направо

2. Все повороты соединительных линий выполняются под углом 90 градусов

Пример алгоритма:

Дано: x, y, z.

Найти max

Алгоритм 1. (словесное описание)

Алгоритм 2. (псевдокод)

Пример. А.2., представленный блоксхемой

Контрольные вопросы

1. Дайте определение алгоритма. В каких сферах человеческой

деятельности применимы алгоритмы?

2. Какие свойства алгоритмов вам известны? Объясните на примере

разработанных вами алгоритмов суть этих принципов.

3. Какие существуют формы записи алгоритмов? Опишите их

достоинства и недостатки. В каких случаях они применяются?

4.Перечислите основные правила составления алгоритмов.

.

Лекция№2 Составные команды (следования, ветвления, цикла)

План лекции

1.Определение команды (оператора)

2.Команда следования

3.Команда ветвления

4.Команда цикла

Элементарной структурной единицей любого алгоритма является простая команда (оператор), обозначающая
один элементарный шаг переработки или отображения информации. Простая команда на языке схем алгоритма изображается в
виде функционального блока, имеющего один вход и один выход.

Из простых команд и проверки условий образуются составные команды, имеющие более
сложную структуру. Рассмотрим основные типы составных команд алгоритма.

http://ok-t.ru/studopediaru/baza1/935020306217.files/image027.gif

Команда следования

Эта команда образуется из последовательности команд, следующих одна за другой. Под действием понимается либо простая,
либо составная команда. Эти команды могут записываться либо в строчку, либо в столбец — одна под одной.

Наличие скобок позволяет рассматривать команду следования как единое действие, распадающееся на последовательность
более простых действий.

 Команда ветвления

 http://ok-t.ru/studopediaru/baza1/935020306217.files/image029.gif  http://ok-t.ru/studopediaru/baza1/935020306217.files/image031.gif

б) неполное ветвление а) полное ветвление

 С помощью команды ветвления (развилки) осуществляется выбор одного из двух возможных действий в
зависимости от условия.

Действия, указанные после служебных слов то и иначе, могут быть простыми или составными командами.
При исполнении команды ветвления выполняется только одно из действий: если условие соблюдено, то выполняется
действие 1, в противном случае — действие 2.

В том случае, когда условие соблюдено, продолжение исполнения алгоритма происходит по стрелке «+», в
противном случае — по стрелке «—».

Команда ветвления может использоваться в сокращенной форме (коррекция), когда в случае
несоблюдения условия никакое действие не выполняется.

Циклический алгоритм – Команда повторения (цикл) — описание действий, которые должны повторяться
указанное число раз или пока не выполнено заданное условие.

Большинство алгоритмов содержат серии многократно повторяемых команд. Если такие команды записывать в виде составной
команды следования, то каждую повторяемую команду пришлось бы выписать ровно столько раз, сколько раз она
повторяется.. Поэтому для обозначения многократно повторяемых действий используют специальную конструкцию,
называемую циклом.

Цикл — управляющая структура, организующая многократное выполнение указанного действия.

циклы

Составная команда цикла, называемая также командой повторения, содержит
условие. состоит из двух частей: условия цикла, которое используется для
определения количества повторений, и тела цикла(перечень повторяющихся
действий).
У любого цикла есть параметрПараметр цикла – это
переменная, которая изменяется в теле цикла, а также участвует в условии его окончания. 

Циклические алгоритмы бывают двух типов:
Циклы со счетчиком(параметром), в которых какие-то действия выполняются
определенное число раз; (безусловные циклы или арифметические циклы )
Циклы с условием, в которых тело цикла
выполняется, в зависимости от какого-либо условия. Различают циклы с предусловием и постусловием.

Схема цикла с предусловием

http://ok-t.ru/studopediaru/baza1/935020306217.files/image033.jpg

Под действием, как и прежде, понимается простая или составная команда. Исполнение такой команды повторения состоит в
том, что сначала проверяется условие (отсюда и название — цикл с предусловием), и если оно
соблюдено, то выполняется команда, записанная после служебного слова повторять. После этого снова
проверяется условие. Выполнение цикла завершается, когда условие перестает соблюдаться. Для этого необходимо, чтобы
команда, выполняемая в цикле, влияла на условие. (этот тип цикла называют также циклом «пока»). . Можно сказать что
условие цикла «пока» — это условие входа в цикл. В частном случае может оказаться что действие не
выполнялось ни разу. Условие цикла необходимо подобрать так, чтобы действия, выполняемые в цикле, не привели к
нарушению его истинности, иначе произойдет зацикливание. Зацикливание — бесконечное повторение
выполняемых действий. 

Схема цикла с постусловием

http://ok-t.ru/studopediaru/baza1/935020306217.files/image035.jpg

Команда повторения с постусловием выполняется аналогично, только условие проверяется после
выполнения команды, а повторение выполнения команды происходит в том случае, когда условие не соблюдено, т. е.
повторение производится до соблюдения условия (поэтому этот тип цикла называют также циклом «до»). Таким образом,
тело цикла будет реализовано хотя бы один раз. Если условие не выполняется, то происходит возврат к выполнению
действий. Если условие истинно, то осуществляется выход из цикла. Для предотвращения зацикливания необходимо
предусмотреть действия, приводящие к истинности условия.

Циклы со счетчиком(параметром) используют, когда заранее известно, какое число повторений тела
цикла необходимо выполнить. Например, на уроке физкультуры вы должны пробежать некоторое количество кругов вокруг
стадиона.

В общем случае схема циклического алгоритма с условием будет выглядеть так:
Пока
 условие повторять — действие..Назовите правила с

Для создания циклов со счётчиком ( параметром) необходимо использовать правила:

Параметр цикла, его начальное и конечное значения и шаг должны быть одного типа

Запрещено изменять в теле цикла значения начальное, текущее и конечное для параметра

Запрещено входить в цикл минуя блок модификации

Если начальное значение больше конечного, то шаг — число отрицательное

После выхода из цикла значение переменной параметра неопределенно и не может использоваться в дальнейших
вычислениях

Из цикла можно выйти не закончив его, тогда переменная параметр сохраняет свое последнее значение

Контрольные вопросы

1 Дайте определение команды (оператора).

2. 3.Объясните роль условия в команде ветвления

3.Чтотакое «тело цикла» ?

4.Назовите правила создания цикла со счетчиком.

Лекция№3 Команда присваивания. Заголовок
алгоритма

План лекции

1.Формат команды присваивания

2.Свойства присваивания

3.Пример

4. Заголовок алгоритма.

Команда присваивания — команда исполнителя, в результате которой переменная получает новое значение. Формат
команды:

<имя переменной>:=<выражение>

Исполнение команды присваивания происходит в таком порядке: сначала вычисляется <выражение>, затем, полученное
значение присваивается переменной.

Пример.

Например, запись A:=B+5 читается так: «переменной A присвоить значение выражения B плюс 5».

Знаки присваивания «:=» и равенства «=» — разные знаки:

знак «=» означает равенство двух величин, записанных по обе стороны от этого знака;

знак «:=» предписывает выполнение операции присваивания.

Например, запись A:=A+1 выражает не равенство значений A и A+1, а указание увеличить значение переменной A на
единицу.

При выполнении команды присваивания сначала вычисляется значение выражения, стоящего справа от знака
«:=», затем результат присваивается переменной, стоящей слева от знака «:=». При
этом тип выражения должен быть совместим с типом соответствующей переменной.

Свойства присваивания:

1. пока переменной не присвоено значение, она остаётся неопределённой;

2. значение, присвоенное переменной, сохраняется в ней вплоть до выполнения следующего присваивания этой переменной
нового значения;

3. если мы присваиваем некоторой переменной очередное значение, то предыдущее её значение теряется безвозвратно.

В дальнейшем будет предполагаться, что исполнителем алгоритмов работы с величинами является
компьютер
. Любой алгоритм может быть построен из команд присваивания,
вводавыводаветвления и цикла

Команда присваивания означает следующие действия, выполняемые компьютером: 1) вычисляется выражение; 2) полученное
значение присваивается переменной.

В блок-схемах команды присваивания изображаются в прямоугольниках. Такой блок называется вычислительным.

При описании алгоритмов не обязательно соблюдать строгие правила записи выражений, это можно делать в обычной
математической форме, так как это еще не язык программирования со строгим синтаксисом. В рассматриваемом алгоритме
имеется команда ввода: ввод a, b, c, d. В блок-схемах команда ввода записывается в параллелограмме — блоке
ввода-вывода. При выполнении этой команды процессор прерывает работу и ожидает действий пользователя. Пользователь
должен набрать на устройстве ввода (клавиатуре) значения вводимых переменных и нажать клавишу ввода. Значения
следует вводить в том же порядке, в каком эти переменные рас- положены в списке ввода. Обычно с помощью команды
ввода присваиваются значения исходных данных, а команда присваивания используется для получения промежуточных и
конечных величин. Полученные компьютером результаты решения задачи должны быть сообщены пользователю, для чего и
предназначена команда вывода: вывод m, n. С помощью этой команды результаты выводятся на экран или через устройство
печати на бумагу.

Пример

Составим алгоритм, в результате которого переменные A и B литерного типа обменяются своими значениями.

Решение вида A:=B B:=A неверно, так как после выполнения первой команды присваивания первоначальное значение
переменной A будет безвозвратно утеряно. Вторая команда присвоит переменной B текущее значение переменной A. В
результате обе переменные получат одно и то же значение.

 Для решения исходной задачи введём промежуточную переменную M. . Тогда задачу обмена значениями можно решить
последовательным выполнением трех команд присваивания. Алгоритм обмена значениями переменных A и B запишем так:

1.png

Этой задаче аналогична следующая ситуация. Имеются два стакана: один — с молоком, другой — с водой. Требуется
произвести между ними обмен содержимым. Ясно, что в этом случае необходим третий стакан — пустой. Последовательность
действий при обмене будет такой: 1) перелить молоко из 1-го стакана в 3-й; 2) воду из 2-го стакана в 1-й; 3) молоко
из 3-го стакана во 2-й.

а) Имя алгоритма

При работе на ЭВМ принято давать имена, состоящие из не более 8 символов, без пробелов, на первом месте обязательно
буква, после имени состоящем из восьми символов через точку пишется расширитель имени, состоящем из не более трех
символов на первом месте обязательно буква. Например: KWUR.E, BASIC.COM,
LR4B.SC2 и т.д.
б) Список величин
(входные и выходные величины) с указанием их типа. 
в) аргументы (входные данные) и результаты (выходные
данные).
Общий вид заголовка алгоритма работы с величинами таков:

алг имя алгоритма (список величин с
указанием типов)
~~
дано имена аргументов (имена входных величин)
~~~~
надо имена результатов (имена
выходных величин)
~~~~
нач
~~~
серия

кон

Как мы уже знаем, заголовок алгоритма описывает условие задачи, а тело алгоритма — ее решение. Чтобы записать
заголовок алгоритма, обычно достаточно внимательно изучить условие, не думая пока о решении.

При построении алгоритмов с аргументами важно точно определить количество аргументов и их типы. Для этого нужно
изучить условие задачи и выделить в нем ту информацию, которую необходимо задать, прежде чем приступать к решению.
Этой информации будут соответствовать аргументы алгоритма.

Например, в задаче «квадрат» такой дополнительной информацией была сторона квадрата, поэтому у алгоритма появился
один аргумент.

В общем случае переменным в условии задачи соответствуют аргументы в заголовке алгоритма.

Контрольные вопросы

1.Опишите порядок выполнения команды присваивания.

2.Назовите свойства присваивания.

3.Верно ли решение вида A:=B B:=A ? Почему?

4.Приведите пример заголовка алгоритма

Лекция№4 Табличные величины, виды таблиц

План лекции

1.Виды таблиц.

2. Примеры использования таблиц.

3. Табличные величины в алгоритмах.

Определение. Таблица – это упорядоченная последовательность величин одного типа, имеющая имя. Например;

Расписание звонков:

Таблица умножения Пифагора;

Поля игры “Морской бой”.

Из всего многообразия таблиц можно выделить простые и сложные.

Простые таблицы бывают линейные и прямоугольные. К типу линейных таблиц можно отнести расписание звонков. Таблица
умножения Пифагора относится к типу прямоугольных таблиц.

Сложные таблицы – это такие таблицы, которые состоят из простых.

Например, таблица “Расписание уроков на неделю”:

При решении задач человек очень часто пользуется таблицами. Таблицы бывают разными, но наиболее часто встречаются
линейные и прямоугольные. Эти два вида таблиц мы с вами и будем рассматривать.

И так, таблицы бывают линейные и прямоугольные. В линейной таблице только одна строка, в прямоугольной их несколько.
Каждой таблице дается свое название. Каждый элемент таблицы носит тоже название, что и сама таблица, различают же их
по номерам строк и столбцов, в которых они находятся.

Рассмотрим примеры использования таблиц в практической деятельности человека.

Пример 1. На метеостанции каждый час измеряется температуры воздуха и значения измерения записываются в таблицу:

Время измерения, ч

Температура, 0С

15,5

17,5

Эта линейная таблица содержит 24 элемента, занумерованные от 0 до 23. Второй элемент имеет значение 15,5, а нулевой
элемент – 17. Время измерения в таблице имеет значение номера столбца, в котором находятся показания
температуры.

Пример 2. На метеостанции вычисляют среднюю температуру воздуха каждые сутки и записывают в другую таблицу. Пусть нас
интересует средняя температура с 22 по 28 апреля:

Дата

Средняя температура, 0С

15,5

17,5

Данная линейная таблица содержит семь элементов, занумерованных от 22 до 28.

Очевидно, что при хранении таблицы порядковые номера хранить нет необходимости: зная начало нумерации, можно путем
отсчета найти любой элемент таблицы. Кроме того, полезно знать и самый большой порядковый номер, так как это
позволяет определить заранее размер таблицы. Таким образом, чтобы указать, что некоторая величина является линейной
таблицей, нужно задать тип элементов таблицы, ее имя, начальный и конечный порядковые номера ее элементов.

В первом примере таблицу можно записать так: вещтаб температура [0:23 ], во втором – вещтаб средняя
температура
 [22:28].

Для удобства использования табличных величин в алгоритмах, их обычно обозначают одной буквой латинского алфавита.

Напримеры: вещтаб F[7:12], нат таб D[1:12], лит таб G[5:9].

Таблица F

-2,8

0,69

-23,87

F[7]:=-2,8; F[8]:=0; F[9]:=0,69; F[10]:=8; F[11]:=-23,87; F[12]:=11.

Таблица D

D[1]:=3; D[2]:=12; D[3]:=1; … ; D[12]:=100.

Таблица G

Петров

Иванов

Сидоров

Волков

Курочкин

G[5]:= «Петров»; G[6]:= «Иванов»; … ; G[9]:= «Курочкин».

Рассмотрим примеры использования прямоугольных таблиц. Таблицы сложения и умножения однозначных чисел в различных
системах счисления. Эти таблицы имеют несколько строк, значит они прямоугольные.

Таблица S Таблица Р

+

×

105

105

115

115

105

115

125

115

145

225

105

115

125

135

135

225

315

наттаб S[1:4,1:4] наттаб Р[1:4,1:4]

 При измерении температуры в течение месяца ежедневно каждый час данные можно вводить в таблицу:

время дата

15,5

14,7

17,5

16,5

15,5

14,5

14,3

16,5

..

15,5

14,7

17,5

16,5

15,5

вещтаб температура [1:31,0:23]

При указании нумерации в прямоугольных таблицах на первом месте пишутся строки, а на втором столбцы. Каждый элемент
таблицы носит тоже имя, что и сама таблица, различают же его по номеру строки и столбца, в которых он находится.

Например: S[2,4]:=115; P[3,4]:=225температура[30,5]:=14,7.

Табличные величины удобно использовать в алгоритмах. Рассмотрим примеры таких алгоритмов.

Пример 1.

алг таблица сложения (наттаб S[1:4,1:4]) рез S начнатi,j
i:=1 пока i≤4 нц j:=1 пока j≤4 нц S[i,j]:=i+j еслиS[i,j]≥5 то S[i,j]:=10+
(S[i,j]-5) все j:=j+1 кц i:=i+1 кцкон

Пример 2

алг таблица умножения (наттаб Р[1:4,1:4]) рез Рначнат i,j
i:=1 пока i≤4 нц j:=1 пока j≤4 нц Р[i,j]:=i×jпока Р[i,j]≥5 нц Р[i,j]:= Р[i,j]-5 а:=а+1 кц Р[i,j]:=а×10+
Р[i,j]; j:=j+1 кц i:=i+1 кц кон

Пример 3

алг таблицы сложения и умножения (наттаб S[1:4,1:4],наттаб Р[1:4,1:4 ) рез Р,S начнат i,j
i:=1 пока i≤4 нцj:=1 пока j≤4 нц a:=0 S[i,j]:=i+j Р[i,j]:=i×j пока Р[i,j]≥5нц Р[i,j]:= Р[i,j]-5
а:=а+1 кц если S[i,j]≥5 тоS[i,j]:=10+ (S[i,j]-5) все Р[i,j]:=а×10+ Р[i,j] j:=j+1 кцi:=i+1 кц кон

При сложении или умножении номера строки и столбца мы получаем число в десятичной системе счисления. 5 = 10, значит
необходимо определить количество пятерок в полученной сумме или произведении. Это количество определяется в
алгоритме «таблица умножения» с помощью команды повторения. В алгоритме «таблица сложения» учитывается тот факт, что
4+4=8, т.е. больше одной пятерки при сложении в сумме содержаться не может, поэтому достаточно использовать команду
ветвления. Можно в обоих алгоритмах использовать команду повторения. Более того, оба эти алгоритма можно объединить
в один .

Составим алгоритм для вычисления средней суточной температуры воздуха в течении месяца (Пример 4). Для удобства
записи назовем таблицу «температура» одной буквой «Т». Для сохранения значений средней температуры в течении месяца
создадим линейную таблицу на 31 элемент и назовем ее «С». Каждый элемент первой таблицы будет различаться по номеру
строки и столбца – Т[i,j], а каждый элемент второй таблицы будет различаться по номеру столбца – С[i].
Среднесуточную температуру будем вычислять по правилу вычисления среднего арифметического, и сохранять результат в
созданной нами линейной таблице.

Пример 4

алг среднесуточная температура (вещтаб Т[1:31,0:23], вещтаб С[1:31]) арг Т рез С начнат i,j
i:=1 пока i≤31 нц j:=0 пока j≤23 нц k:=k+ T[i,j] j:=j+1 кц C[i]:=k/24 i:=i+1 кцкон

Контрольные вопросы

1.Виды таблиц.

2. Примеры использования таблиц.

3. Табличные величины в алгоритмах

Лекция№5 Вспомогательные алгоритмы Тестирование ПО

План лекции

1.Вспомогательный алгоритм

2. Процедуры

3. Функции

4.Тестирование

5.Рекомендации по тестированию

5. Виды тестирования

Вспомогательный алгоритм представляет собой модуль, к которому можно многократно обращаться из
основного алгоритма. Использование вспомогательных алгоритмов может существенно уменьшить размер алгоритма и
упростить его разработку. Вспомогательный алгоритм многократно используется в основном алгоритме с различными
значениями некоторых входящих величин, называемых параметрами.

Для реализации вспомогательных алгоритмов служат подпрограммы или процедуры. Подпрограмма —
самостоятельный фрагмент программы, оформленный в виде, допускающем многократное обращение к нему из разных точек
программы. Обращение к подпрограмме — переход к выполнению подпрограммы с заданием информации,
необходимой для ее выполнения и возврата.

Существует два вида подпрограмм: процедуры и функции. Разница между ними состоит в том, что функция через свое имя
возвращает одно значение определенного типа и может, использоваться в выражениях наряду со встроенными функциями
.

Процедура

Алгоритмический язык

Паскаль

алг <имя процедуры>

(<список параметров>)

<операторы>

кон

procedure <имя процедуры>

(<список параметров>);

<описание>

begin

<операторы>

end

Процедура оформляется следующим образом:

Вызов процедуры из основной программы производится оператором вызова процедуры:

<имя процедуры>(<список значеиий>).

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

Для того чтобы передать параметр по ссылке, в Паскале в описании формальных параметров в теле процедуры используется
ключевое слово var:

procedure SubTest(a,b:integer; var c:real, var d:integer);

здесь параметры а и b передаются по значению, а параметры с и d — по ссылке.

Функции

Функции по своей сути похожи на процедуры, но возвращают одно значение через свое имя.

Бейсик

Паскаль

FUNCTION <имя>(<параметры>)

<операторы>

END FUNCTION

function <имя>(<параметры>):<тип результата>;

<описания>

begin

<операторы>

end

Описание функции:

Для того чтобы вернуть значение из функции, необходимо внутри тела функции переменной, имя которой совпадает с именем
функции, присвоить необходимое значение. Эту переменную не надо объявлять в области описания.

Вызов функции производится в выражениях и операторах подобно стандартным функциям языка:

<Переменная> := <Функция> (<Параметры>)

Реализация алгоритмов с помощью подпрограмм — процедур и функций — называется процедурным
программированием
. В последние годы все большую популярность приобретают методы объектного и событийного
программирования.

Тестирование ПО

«Тестирование программ может использоваться для демонстрации наличия ошибок,

но оно никогда не покажет их отсутствие»Эдсгер Вибе Дейкстра

Необходимо различать понятия тестирование и отладка.

Тестирование направлено на выявление ошибок в программе, которая считается работающей. В то время как, отладкой называют процесс локализации и исправления
обнаруженных ошибок.

Программа подвергается постоянному тестированию на протяжении всего процесса работы над ней.

Основным условием для тестирования является наличие известных наборов исходных данных и соответствующих им
результатов выходных данных. Укажем некоторые рекомендации к тестированию программ 

1) Все результаты тестирования необходимо строго фиксировать на бумаге, так чтобы их можно было воспроизвести после
того как будут внесены изменения в программу.

2) Необходимо тестировать граничные условия. Например, необходимо постоянно проверять, что тело цикла повторяется
нужное число раз, а условное выражение корректно разветвляет вычисления.

3) Необходимо тестировать пред- и постусловия. Другими словами, прежде чем использовать данные в вычислениях,
необходимо удостовериться в их корректности. Например, при вычислении частного двух чисел делитель не должен быть
равен 0; индекс массива не должен превышать допустимый диапазон.

4) Следует проверять коды возвратов функций. Например, если по каким-либо причинам вызов библиотечной функции
fopen(), осуществляющей открытие файла, завершилось неудачей, то дальнейшая работа с данным файлом должна быть
прервана.

Альфа-тестирование – тестирование готового продукта на специально созданных задачах.

Бета-тестирование – опробование бесплатной тестовой версии программного продукта на реальных задачах.

Если «альфа-» и «бета-тестирование» относятся к стадиям до выпуска продукта (а также, неявно, к объёму тестирующего
сообщества и ограничениям на методы тестирования), тестирование «белого ящика» и «чёрного ящика» имеет отношение к
способам, которыми тестировщик достигает цели..

При тестировании с использованием стратегии «белого ящика» (иногда
можно встретить термин «прозрачный ящик») полагают, что структура программного обеспечения известна, этим
и объясняется название стратегии. В данном случае тесты подбирают таким образом, чтобы пройти хотя бы один раз по
каждой ветви алгоритма.

При тестировании с использованием стратегии «черного ящика»
полагают, что структура программного обеспечения неизвестна, то есть программа рассматривается как «черный ящик»
при этом известны только наборы входных и выходных данных. В данном случае, тестовые данные формируют только на
основе спецификации программы, без учета информации о ее структуре. Регрессионное тестирование. После внесения
изменений в очередную версию программы, регрессионные тесты подтверждают, что сделанные изменения не повлияли на
работоспособность остальной функциональности приложения.

При тестировании сложных программных систем стратегия «белого ящика» не позволяет выявить пропущенный
маршрут, поэтому, возможно, что некоторые ошибки в программе останутся не обнаруженными. Также эта стратегия не
позволяет выявить ошибки, связанные с обрабатываемыми входными данными. В свою очередь, при использовании стратегии
«черного ящика» невозможно подобрать такие тестовые наборы, чтобы выполнить проверку всех возможных
комбинаций исходных данных. В этой связи, на практике, как правило, используют комбинации двух стратегий.

В заключение отметим, что даже после внедрения в эксплуатацию процесс тестирования не прекращается.

Контрольные вопросы

.Вспомогательный алгоритм

2. Процедуры

3. Функции

4.Тестирование

5.Рекомендации по тестированию

5. Виды тестирования

Тема 1.2. Языки программирования

Лекция№6 Языки программирования, их классификация.

План лекции

1. ЯП: определение, классификация.

2. История ЯП. Презентация

3. Достоинства/ недостатки ЯП.

4. Эволюция ЯП BASIC, Pascal

Средства наглядности: презентации

Язык программирования — это формализованный язык, который представляет собой совокупность алфавита,
правил написания конструкций (синтаксис) и правил толкования конструкций (семантика).

В настоящее время насчитывается несколько сотен языков программирования, рассчитанных на разные сферы применения ЭВМ,
т. е. на разные классы решаемых с помощью ЭВМ задач. Эти языки классифицируют по разным уровням, учитывая степень
зависимости языка от конкретной ЭВМ.

Общепринятой и строгой классификации языков программирования не существует. Поэтому в курсе представлена
классификация наиболее распространенных языков, сложившаяся исторически:

Языки программирования

Низкого уровня

Высокого уровня

Машинный

Машинно-зависимые

Машинно-независимые

Ассемблер

Универсальные

Автокод

Проблемно-ориентированные

Объектно-ориентированные

Командные языки баз данных

На самом нижнем уровне классификации находится машинный язык, т. е. внутренний язык ЭВМ, на котором в конечном итоге
представляется и исполняется программа.

Универсальные языки высокого уровня обеспечивают создание различных программ (задач), например
Алгол, Си, ПЛ/1 и т.д..

Проблемно-ориентированные языки создавались под какие-то конкретные классы задач, например, Фортран
— научные расчеты, Кобол — экономические расчеты, Лисп и Пролог — искусственный интеллект и т.д.

Объектно-ориентированные языки четвертого поколения (4GL — forth-generation
language
) и программирование основаны на создании модели системы, как совокупности объектов и использует
следующие базовые понятия: класс, объект, событие, свойства объекта, метод обработки. Первым языком программирования
этой группы был — Симула-67. В настоящее время к этим языкам относятся — С++, Visual Basic, Java Script и
динамический HTML и другие современные языки программирования.

Командные языки баз данныхпредназначены длярасширения возможностей среды управления базами данных,
для создания собственных функций интерфейса — взаимодействия с пользователем.

История языков программирования.

Неструктурные языки (широко использовались 40-е годы)

Преимущества.

Оптимизация программы под аппаратную архитектуру.

Как следствие, обеспечение высокой эффективности вычислений.

Недостатки

Для каждого типа вычислительной машины должен был быть написан свой вариант исходного кода.

Применение: быстрые численные расчеты, создание драйверов устройств.

Примеры языков: Ассемблеры.

Директивные (структурные) языки (появились в 50-е годы)

Преимущества

Повторное использование ранее написанных блоков кода.

Высокая степень независимости программы от типа вычислительной машины.

Повышение эффективности труда разработчиков, в том числе и за счет абстрагирования от конкретных деталей аппаратного
обеспечения.

Недостатки

Некоторая потеря в скорости вычислений.

Применение: создание операционных систем и системных программ, разработка небольших пользовательских приложений,
научные расчеты.

Примеры языков: FORTRAN, C, Pascal.

Декларативные (функциональные и логические) языки (зародились в 60-е годы)

Программный код на декларативном языке программирования представляет собой описание действий, которые можно
осуществлять, а не последовательный набор команд.

Преимущества

Легче формализуется математическими средствами.

Как следствие, программы проще тестировать, т.е. проверять на наличие ошибок.

Высокая степень абстракции.

Недостатки

Снижение скорости работы программы.

Применение: доказательство теорем, возможность обработки разнородных данных.

Функциональные языки

Программу на функциональном языке можно представить как функцию с одним или несколькими аргументами.

Преимущества

Автоматическое динамическое распределение памяти компьютера для хранения данных.

Программист получает возможность абстрагироваться от представления данных и других рутинных операциях и
сосредоточиться на предметной области.

Недостатки

Нелинейная структура программы, следовательно, такое программирование сложно для понимания.

Относительно невысокая эффективность вычислений.

Применение: обработка рекурсивных структур данных, обработка символьной информации.

Примеры языков: Haskell.

Логические языки

Программа представляет собой совокупность правил или логических высказываний. Преимущества

Возможность откатов, т.е. возвращения к предыдущей подцели при отрицательном результате одного из вариантов в
процессе поиска решения. Это избавляет от необходимости поиска решения путем полного перебора вариантов.

Недостатки

Узкий класс решаемых задач.

Применение: эмуляция искусственного интеллекта, разработка экспертных систем.

Примеры языков: Prolog.

Объектно-ориентированные языки

Программа представляет собой описание объектов, их свойств (или атрибутов), классов и отношений между ними, способов
взаимодействия.

Преимущества

Смысловая близость к предметной области любой структуры и назначения. Механизм наследования свойств и методов
позволяет строить производные понятия на основе базовых, создавая тем самым модели предметной области.

Использование ранее созданных библиотек классов позволяет сэкономить время.

Полиморфизм обеспечивает гибкость и универсальность программного обеспечения.

Удобство разработки ПО группой лиц.

Недостатки

Сложность полной формализации реального мира создает в дальнейшем трудности тестирования созданного ПО.

Применение: разработка больших пользовательских приложений.

Примеры языков (большинство современных языков программирования поддерживают концепцию объектно-ориентированного
программирования): C++, Python.

Языки сценариев

Программа представляет собой совокупность возможных сценариев обработки данных. Выбор конкретного сценария зависит от
наступления того или иного события.

Преимущества

Основные достоинства данного класса языков программирования унаследованы от объектно-ориентированных языков.

Легкость использования с инструментальными средствами автоматизированного проектирования и быстрого создания ПО.

Недостатки

Сложность тестирования.

Большое количество вариантов, которые требуется предусмотреть.

Большая вероятность побочных эффектов.

Применение: интернет технологии. Примеры языков: JavaScript, Python, PHP

Эволюция ЯП BASIC, Pascal

Контрольные вопросы

1.ЯП: определение, классификация.

2. История ЯП. Презентация

3. Достоинства/ недостатки ЯП.

4. Эволюция ЯП BASIC, Pascal . Презентация

Лекция»7 Принципы построения ПО. Трансляторы

План лекции

1.Примеры ПО

2. Состав ПО

3. Разработка ПО

4.Трансляторы

5. Трансляция

Средства наглядности: презентация

Программное обеспечение (ПО)

– (Семакин И.Г., Хеннер Е.К.) это совокупность программ, хранящихся в долговременной памяти компьютера.

ПРИМЕРЫ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ

Системное ПО

Операционные системы: Windows, Linux и др.

Файловые менеджеры: Total Commander, FAR.

Антивирусные программы:DrWeb, Антивирус Касперского, Avast

Архиваторы:Winrar, Winzip, 7-zip

Программы обслуживания дисков: Defrag, Norton Disk Doctor

Инструментальное ПО

Системы программирования: Borland Delphi ,Borland C++ Builder, Microsoft Visual Basic , Microsoft Visual C++

Среды программирования, облегчающие разработчику создание программы: Microsoft Visual Studio.

В программном обеспечении компьютера есть необходимая часть, без которой на нем просто ничего не сделать. Она
называется системным ПО.
Кроме системного ПО в состав программного обеспечения компьютера входят еще прикладные
программы и системы программирования.

Состав прикладного программного обеспечения

Программы, с помощью которых пользователь может решать свои информационные задачи, не прибегая к программированию,
называются прикладными программами.

Программы общего назначения: текстовые и графические редакторы, системы управления базами данных (СУБД), табличные
процессоры, коммуникационные (сетевые) программы.

. Операционная система — это набор программ, управляющих оперативной памятью, процессором, внешними устройствами и
файлами, ведущих диалог с пользователем .

Системное ПО – это комплекс программ, обеспечивающих выполнение общих для всех программ технических задач,
взаимодействие с аппаратурой, диалог с пользователем.

Операционные оболочки — программы, выполняющие роль посредника между пользователем и ПО компьютера

Сервисные — Множество специальных программ обслуживающего (сервисного) характера.

Разрабо́тка ПО (англ. software development) — это род
деятельности) и процесс, направленный на создание и поддержание работоспособности, качества и надежности программного обеспечения, используя
технологии, методологию и практики из информатики, управления проектами, математики, инженерии и других областей знания[

Разработка ПО может быть разделена на несколько разделов. Это:

Требования к
ПО
(извлечение, анализ, спецификация и ратификация )

Проектирование
ПО

Проектирование ПО средствами Автоматизированной
Разработки Программного Обеспечения (CASE) и стандарты формата описаний, такие как Унифицированный Язык
Моделирования (UML), используя различные подходы: проблемно-ориентированное
проектирование и т. д.

Программирование (создание
ПО с помощью языков программирования)

Тестирование программного
обеспечения
( поиск и исправление ошибок в программе)

Сопровождение программного
обеспечения
(программные системы часто имеют проблемы совместимости и переносимости, а
также нуждаются в последующих модификациях)

Управление конфигурацией
ПО
(стандартизированный и структурированный методы)

Управление
разработкой ПО

Процесс разработки
ПО
(основными парадигмами считаются agile или waterfall)

Инструменты разработки ПО, см. CASE: методика оценки сложности
системы, выбора средств разработки и применения программной системы.

Качество программного
обеспечения
: методика оценки критериев качества программного продукта и требований к
надёжности.

Локализация программного обеспечения
— ветвь языковой
промышленности.

Опыт управления разработкой программ отражается в соответствующих руководствах, обычаях и стандартах. Если при
разработке используется несколько стандартов и нормативных документов, то имеет смысл составить профиль.

Участники процесса разработки ПО: пользователь,
заказчик, разработчик,
руководитель проекта, аналитик, тестировщик, поставщик.

Трансляторы

Чтобы вычислительная машина могла выполнить программу, написанную на каком-либо языке программирования, в её
программном обеспечении должна быть программа-транслятор для этого языка.

Интерпретатор переводит каждую команду программы с одновременным её выполнением и, если обнаруживает
ошибку, сообщает о ней и прекращает выполнение программы.

Компилятор переводит всю программу целиком и в конце работы выдаёт список ошибок, если они
обнаружены.

Трансляция — процесс перевода программы, написанной на алгоритмическом языке, на
машинный язык (в коды компьютера).

Транслятор — программа-переводчик.

Компиляция: процесс трансляции и выполнения программы четко разделены во времени.

Интерпретация: последовательно чередуются перевод группы инструкций языка в коды и их выполнение

Компиляция выгодней по времени выполнения и памяти.

Интерпретация удобней для организации диалоговых программ.

По типу выходных данных различают два основных вида трансляторов:

компилирующие окончательный выполнимый код;

компилирующие интерпретируемый код, для выполнения которого требуется дополнительное программное обеспечение.

Окончательным выполнимым кодом являются приложения, реализованные как EXE-файлы, DLL-библиотеки, COM-компоненты. К
интерпретируемому коду можно отнести байт-код JAVA-программ, выполняемый посредством виртуальной машины JVM.

Языки, формирующие окончательный выполнимый код, называются компилируемыми языками (С, C++, FORTRAN, Pascal). Языки,
реализующие интерпретируемый код, называются интерпретируемыми языками(Java, LISP, Perl, Prolog).

В процессе трансляции выполняется анализ исходной программы, а затем синтез выполнимой
формы данной программы. В зависимости от числа просмотров исходной программы, выполняемых компилятором, трансляторы
разделяются на однопроходные, двухпроходные и трансляторы, использующие более двух проходов.

К достоинствам однопроходного компилятора можно отнести высокую скорость компиляции, а к недостаткам — получение, как
правило, не самого эффективного кода.

Широкое распространение получили двухпроходные компиляторы. Они позволяют при первом проходе выполнить анализ
программы и построить информационные таблицы, используемые при втором проходе для формирования объектного кода.

Основные этапы трансляции программы

Рис. 2.1. Основные этапы трансляции программы

На этапе лексического анализа выполняется выделение основных составляющих программы – лексем ( ключевые слова,
идентификаторы, символы операций, комментарии, пробелы и разделители). Составляется таблица символов, в которой
каждому идентификатору сопоставлен свой адрес, чтобы вместо конкретного значения (строки символов) использовать его
адрес в таблице символов. Требует применения сложных контекстно-зависимых алгоритмов.

На этапе синтаксического анализа выполняется разбор полученных лексем с целью получения семантически понятных
синтаксических единиц (выражения, объявление, оператор языка программирования, вызов функции), которые затем
обрабатываются семантическим анализатором. На этапе семантического анализа выполняется обработка синтаксических
единиц и создание промежуточного кода.

К наиболее общим задачам, решаемым семантическим анализатором, относятся:

обнаружение ошибок времени компиляции;

заполнение таблицы символов конкретными значениями;

замена макросов их определениями;

выполнение директив времени компиляции.

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

На фазе синтеза программы производится: генерация кода; редактирование связей.

Процесс генерации кода состоит из преобразования промежуточного кода (или оптимизированного кода) в
объектный код. При этом в зависимости от языка программирования получаемый объектный код может быть представлен в
выполнимой форме или как объектный модуль, подлежащий дальнейшей обработке редактором связей.

Так, процесс генерации кода.

Редактор связей.

Контрольные вопросы

Примеры ПО

2. Состав ПО

3. Разработка ПО

4.Трансляторы

5. Трансляция Презентация

Тема1.2 ЯП

Лекция№ 8 Стадии разработки программного продукта. Этапы решения
задач на ПК.

План лекции

  1. Постановка задачи
  2. Анализ
  3. Проектирование
  4. Программирование
  5. Оформление документации
  6. Испытания Эксплуатация
  7. Этапы решения задачи на ЭВМ.

При разработке программного продукта можно выделить следующие стадии:

Стадия
предпроектных исследований и технического задания
 (постановка задачи)— определение
требований к программному продукту и осуществление формальной постановки задачи.

Часто её называют стадией постановки задачи., чтобы позволить программисту или аналитику однозначно определить, что
будет делать создаваемая программа. Постановка решаемой на компьютере задачи должна включать список ее входных
данных, список требуемых результатов и любые инструкции (правила), которых нужно следовать при решении задачи. В результате согласования между заказчиком и исполнителем всех перечисленных вопросов
составляют техническое задание (ТЗ) в соответствии с ГОСТ 19.201-78, которое служит основанием для дальнейшей
работы.

Стадия
технического предложения
 (анализ)— определение методов решения задачи.

Выполняется анализ задачи – это определение и детализация логического порядка действий, которые нужно выполнить над
исходными данными, чтобы получить требуемое решение.

Стадия эскизного
проектирования
(проектирование) — разработка структуры программного продукта, выбор структур для
хранения данных, построение и оценка алгоритмов подпрограмм и определение особенностей взаимодействия программы с
вычислительной средой (другими программами, операционной системой и техническими средствами).

На этой стадии при использовании процедурного подхода сложные задачи разбиваются на подзадачи, для которых может
строиться своя модель и выбираться свой метод решения. При этом результаты одной подзадачи могут использоваться как
исходные данные в другой.

Целесообразно проверить правильность выбранных моделей и методов, выполнив их вручную для некоторых значений исходных
данных.

Одновременно с написанием алгоритма, необходимо точно определить тип и структуру обработанных данных. В одних случаях
данными могут быть несколько обычных чисел, в других организация данных будет более сложной.

При определении структуры данных с каждым объектом данных должно быть связано осмысленное имя или идентификатор. При
разработке программы идентификаторы будут связаны с расположением данных в памяти.

На данной стадии разрабатываются и оцениваются алгоритмы подпрограмм.

Разработка алгоритма состоит в пошаговом описании предлагаемого решения задачи. Каждый шаг должен быть описан в виде
кратких и точных операторов с использованием структурированного языка или псевдокода.

Каждой процедуре должно быть дано содержательное имя или идентификатор, для того, чтобы ее можно было вызвать по
имени как модуль из другой процедуры:

Пример 1

find_area (Найти площадь),

calc_balance (Вычислить_баланс)

prepare_fit (Подготовить_декларацию)

Разработка алгоритма завершается, когда каждый из операторов может быть записан непосредственно на языке
программирования.

Стадия
технического проектирования
 (программирование)— составление программы на выбранном языке программирования, ее отладка и
тестирование.

Разработанные алгоритмы реализуют, составляя по ним текст программы с использованием конкретного языка
программирования. Далее программу необходимо перевести в последовательность машинных команд (машинный код). Для
этого используется специальная программа — компилятор.

Если исходный текст программы не содержит ошибок, то компилятор создает исполнимый код программы. Далее программа
выполняется. При этом необходимо выявить ошибки выполнения..

Процесс локализации и исправления ошибок получил название отладки программы. При отладке
программы часто используют специальные программы – отладчики, которые позволяют выполнить любой фрагмент программы в
пошаговом режиме и проверить содержимое интересующих нас переменных.

Отлаженная программа подвергается тестированию. Тестирование — это процесс выполнения
программы при различных наборах данных с целью обнаружения логических ошибок. Для поиска логических ошибок также
можно использовать отладчик: по шагам отследить процесс получения результатов.

Стадия рабочего
проектирования
 — оформление документации.

Документация должна включать: описание постановки задачи; описание  анализа задачи; описание определения структуры
данных;

описание алгоритма; текст программы с комментариями;

тесты с входными и выходными данными; записи о процедурах внедрения;

руководство пользователя; записи о всех модификациях.

Стадии испытаний
и внедрения в эксплуатацию
 — всестороннее тестирование программы и сопровождение при
внедрении в эксплуатацию.

Эргономические цели и показатели качества программного продукта

Эргономика включается в процессы разработки и тестирования программного продукта как часть системы качества.
Разработка пользовательского интерфейса (ПИ) ведется параллельно дизайну программного продукта в целом и в основном
предшествует его осуществлению.
 Графический интерфейс пользователя ( англ. graphical user interface, GUI –
система средств для взаимодействия пользователя с компьютером.
С точки зрения эргономики, самое важное в
программе — создать такой пользовательский интерфейс, который сделает работу эффективной и производительной, а также
обеспечит удовлетворенность пользователя от работы с программой.

Этапы решения задачи на ЭВМ.

Работа по решению любой задачи с использованием компьютера включает в себя следующие шесть этапов: 1.постановка
задачи, 2.формализация задачи, 3.построение алгоритма, 4.составление программы на языке программирования, 5.отладка
и 6.тестирование программы.

6. Проведение расчетов и анализ полученных результатов.

Часто эту последовательность называют технологической цепочкой решения задачи на ЭВМ (непосредственно к
программированию из этого списка относятся п. 3 … 5).

На этапе постановки задачи следует четко определить, что дано и что требуется найти. Третий этап — это построение
алгоритма. Опытные программисты часто сразу пишут программы на определенном языке, не прибегая к каким-либо
специальным средствам описания алгоритмов (блок-схемам, псевдокодам), однако в учебных целях полезно сначала
использовать эти средства, а затем переводить полученный алгоритм на язык программирования. Первые три этапа — это
работа без компьютера. Последующие два этапа — это собственно программирование на определенном языке в определенной
системе программирования.

На последнем — шестом — этапе разработанная программа уже используется в практических целях.

Таким образом, программист должен уметь строить алгоритмы, знать языки программирования, уметь работать в
соответствующей системе программирования. Основой профессиональной грамотности программиста является развитое
алгоритмическое мышление.

Контрольные вопросы

  1. Постановка задачи
  2. Анализ
  3. Проектирование
  4. Программирование
  5. Оформление документации
  6. Испытания Экксплуатация
  7. Этапы решения задачи на ЭВМ.

Лекция №9 Величины. Типы данных.

План лекции

  1. Константы и переменные
  2. Простые и структурированные типы данных

3. Основные типы данных

Совокупность величин, с которыми работает компьютер, принято называть данными.

Всякая величина занимает свое определенное место в памяти ЭВМ ( ячейку памяти). тип. В алгоритмах и языках
программирования величины подразделяются на констан-ты и переменные. Константа — неизменная величина, и в алгоритме
она представляется собственным значением, например: 15, 34.7, k, True и др. Переменные величины могут изменять свои
значения в ходе выполнения программы и представляются в алгоритме символическими именами — идентификаторами,
например: X, S2, cod15 и др. Любые константы и переменные занимают ячейку памяти, а значения этих величин
определяются двоичным кодом в этой ячейке.

Типы величин: целые, вещественные, логические и символьные Это понятие является фундаментальным в
программировании.

Рис. 1.1. Уровни данных относительно программы

Типы величин характеризуются множеством допустимых значений, множеством допустимых операций, формой внутреннего
представления (табл. 1.1).

Типы констант определяются по контексту (т.е. по форме записи в тексте), а типы переменных устанавливаются в
описаниях переменных. По структуре данные подразделяются на простые и структурированные. Для простых величин,
называемых также скалярными, справедливо утверждение одна величина — одно значение, а для структурированных — одна
величина — множество значений.

таблица 1.1. Основные типы данных

К структурированным величинам относятся массивы, строки, множества и др.

Любые данные ТП характеризуются своими типами. Тип определяет:

  1. Формат представления данных в памяти компьютера
  2. Множество допустимых значений, принимаемое переменной или константой, принадлежащей к выбранному типу
  3. Множество допустимых операций применимых к этому типу

Тип переменной определяется при ее декларации. Одна из базовых концепций Паскаля заключается в жесткой проверке
соответствия типов в операциях присваивания. 
Типы данных в языке ТП делятся на 5 основных классов:

  1. Простые типы
  2. Структурированные типы
  3. Ссылочные типы
  4. Процедурные типы
  5. Объектные типы

К простым типам относятся: целочисленные типы, логический тип, символьный тип, перечисляемый тип, интервальный тип,
вещественные типы. 
Среди этих видов выделяют подмножества типов, отличных от вещественного, называемых
порядковым типом. 

В TP имеется 5 предопределенных, целочисленных типов. Каждый тип обозначает определенное подмножество целых
чисел: 

Тип

Диапазон

Формат

Короткое целое shortint

-128..127

8 бит со знаком

Целое integer

-32768..32767

16 бит со знаком

Длинное целое longint

-2147483648..2147483647

32 бита со знаком

Длиной в байт byte

0..255

8 бит без знака

Длиной в слово word

0..65535

16 бит без знака

Верхнее граничное значение и нижнее граничное значение целочисленных типов задаются как константы и имеют
соответствующее имя. 
В тексте программы данные целочисленных типов записываются в десятичном или
шестнадцатеричном формате и не должны содержать десятичные точки. 
Над целочисленными данными возможно
выполнение операций сложения, вычитания и умножения, а также операций сравнения.

К логическим типам относятся данные типов Boolean, ByteBool, WordBool, LongBool. 
Значением каждого данного
логического типа могут являться 2 значения: TRUE (1) и FALSE (0). 
Для данных логического типа применимы только
две операции сравнения: равно и не равно. 
Переменные типа Boolean и ByteBool занимают один байт;
переменная WordBool — 2 байта.
Интервальный тип данных определяется посредством задания подмножества значений
одного из ранее определенных типов. Можно использовать все простые типы, за исключением вещественного. При задании
диапазона указывается наименьшее и наибольшее значения, разделенные двумя точками. При этом оба значения обязательно
одного типа. 
К вещественному типу относится подмножество вещественных чисел, представленных в формате с
плавающей точкой и фиксированным числом цифр. 
В ТП имеется 5 видов вещественных типов: 

Тип

Диапазон

Точность

Формат

Real (вещественное)

2.9*10-39..1.7*1038

11-12 знаков

6 байт

Single (с одинарной точностью)

1.5*10-45..3.4*1038

7-8 знаков

4 байта

Double (с двойной точностью)

5.0*10-324..1.7*10308

15-16 знаков

8 байт

Extended (с повышенной точностью)

3.4*10-4932..1.1*104932

19-20 знаков

10 байт

Comp (сложное)

-9.2*1018..9.2*1018

19-20 знаков

8 байт

Действия над типами с одинарной, двойной, повышенной точностью и сложным типом могут выполняться только при
наличии числового сопроцессора. Поэтому считается что постоянно доступным является только тип Real. 

Контрольные вопросы

  1. Константы и переменные
  2. Простые и структурированные типы данных

3. Основные типы данных

Раздел 2. Основные конструкции языков программирования

Тема 2.1. Операторы языка программирования

Лекция№10 Синтаксис языка. Арифметические выражения

План лекции

  1. Описание синтаксиса языка
  2. Синтаксические определения
  3. Арифметические выражения

Язык программирования — это формализованный язык, который представляет собой совокупность алфавита,
правил написания конструкций (синтаксис) и правил толкования конструкций (семантика).

Описание синтаксиса языка включает определение алфавита и
правил построения различных конструкций языка из символов алфавита и более простых конструкций. Для этого обычно
используют форму Бэкуса-Наура (БНФ) или синтаксические диаграммы.

СИМВОЛЫ языка-это основные неделимые знаки, в терминах которых пишутся все тексты на языке.

ЭЛЕМЕНТАРНЫЕ КОНСТРУКЦИИ -это минимальные единицы языка, имеющие

самостоятельный смысл. Они образуются из основных символов языка.

ВЫРАЖЕНИЕ в алгоритмическом языке состоит из элементарных конструкций и символов, оно задает правило вычисления
некоторого значения.

ОПЕРАТОР задает полное описание некоторого действия, которое необходимо выполнить. Для описания сложного действия
может потребоваться

группа операторов. В этом случае операторы объединяются в СОСТАВНОЙ

ОПЕРАТОР или БЛОК.

Действия, заданные операторами, выполняются над ДАННЫМИ. Предложения алгоритмического языка, в которых даются
сведения о типах данных,

называются ОПИСАНИЯМИ или неисполняемыми операторами.

Объединенная единым алгоритмом совокупность описаний и операторов образует ПРОГРАММУ на алгоритмическом языке.

В процессе изучения алгоритмического языка необходимо отличать алгоритмический язык от того языка, с помощью
которого осуществляется

описание изучаемого алгоритмического языка. Обычно изучаемый язык называют просто языком, а язык, в терминах которого
дается описание

изучаемого языка — МЕТАЯЗЫКОМ.

Синтаксические определения могут быть заданы формальными или неформальным способами. Существуют три формальных
способа:

-металингвистическая символика, называемая Бэкуса-Наура формулами;

-синтаксические диаграммы;

-скобочные конструкции.

бом.

О С Н О В Н Ы Е С И М В О Л Ы

Основные символы языка-буквы, цифры и специальные символы-состав-

ляют его алфавит. ТУРБО ПАСКАЛЬ включает следующий набор основных

символов:

1) 26 латинских строчных и 26 латинских прописных букв:

A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

a b c d e f g h i j k l m n o p q r s t u v w x y z

2) _ подчеркивание

3) 10 цифр:

0 1 2 3 4 5 6 7 8 9

4) знаки операций:

+ — * / = <> < > <= >= := @

5) ограничители:

. , ‘ ( ) [ ] (. .) { } (* *) .. : ;

6) спецификаторы:

^ # $

7) служебные (зарезервированные) слова:

ABSOLUTE EXPORTS LIBRARY SET

ASSEMBLER EXTERNAL MOD SHL

AND FAR NAME SHR…

Кроме перечисленных, в набор основных символов входит пробел. Про-

белы нельзя использовать внутри сдвоенных символов и зарезервирован-

ных слов.

Э Л Е М Е Н Т А Р Н Ы Е К О Н С Т Р У К Ц И И

Элементарные конструкции языка ПАСКАЛЬ включают в себя имена, чис-

ла и строки.

Примеры.

0, 1, … 9

называют терминалами (лексемами) — это «конечные символы», т.е. по умолчанию известные в ЯП.

<цифра> так называемый нетерминал (нетерминальный символ).

Он определяется через терминалы, другие нетерминалы и самого себя. Причем в последнем случае правило задания
нетерминала называется рекурсивным (как определение нетерминала <идентификатор>) РБНФ (Расширенные БНФ)

[] — 0 или 1 повторение.

{} — 0 и более повторений

Пример.

Грамматика языка — совокупность всех синтаксических правил данного ЯП, обычно заданных в форме БНФ.

Грамматика не учитывает все виды ошибок, в ЯП формулируются дополнительные семантические правила.

Лексемы Паскаля

спецсимволы: := += *

ключевые слова (begin, end, if, for)

идентификаторы (a, b1)

константы (2, ‘ABC’, #5)

комментарии (3 вида)

{…}

(*…*) //…

Переменные и их описание

Основные сведения

Переменная — это ячейка памяти компьютера, имеющая имя и тип.

Тип определяет размер переменной и множество принимаемых ею значений.

В языке Pascal любая переменная перед использованием должна быть описана. Обычно переменные описываются в разделе
описаний.

Синтаксис в виде РБНФ

Пример секции описания переменных.

Арифметические выражения

Основные сведения

Каждое выражение имеет тип. Выражение называется арифметическим, если его тип — числовой. Выражение строится
посредством операций (унарных или бинарных) и операндов.

В арифметических выражениях если a и b — одного типа, то и a op b принадлежит к тому
же типу. Исключением является операция «/»:

a / b — вещественное.

Если a и b принадлежат к различным типам, то выражение принадлежит к «старшему» типу.
Например:

Стандартные функции

В арифметические выражения могут входить стандартные функции:

Порядок выполнения операций в арифметических выражениях

Операции с большим приоритетом выполняются первыми

Функции вычисляются до операций

Выражение в скобках вычисляется раньше

Операции с одинаковым приоритетом выполняются слева направо, если идут подряд. Операции div и mod для целых

x div y = x / y, округленное до ближайшего целого по направлению к нулю. Это результат от целочисленного деления. x
mod y = x ‐ (x div y) * y. Это остаток от целочисленного деления.

Пример использования

Целочисленные операции часто применяются для определения четности числа:

Контрольные вопросы

  1. Описание синтаксиса языка
  2. Синтаксические определения
  3. Арифметические выражения

Раздел 2 Тема 2.1

Лекция№ 11 Ввод и вывод данных.

План лекции

1.Синтаксис и семантика оператора ввода

2. Обработка ошибок ввода

3. Синтаксис и семантика оператора вывода

4. Форматы вывода

Ввод данных — это передача информации от внешних устройств в оперативную память. Вводятся, как правило, исходные
данные решаемой задачи. Вывод — обратный процесс, когда данные передаются из оперативной памяти на внешние
носители

(принтер, дисплей, магнитные устройства и т.д.). Результаты решения всякой задачи должны быть выведены на один из
этих носителей.

Оператор ввода

Синтаксис

Семантика

Происходит считывание данных с клавиатуры и запись их в переменные из <списка переменных> где <список
переменных>— это последовательность имен переменных, разделенных запятыми. Слово read переводится как
читать(Точнее говоря, Read — это оператор обращения к стандартной процедуре ввода.)

. Вводить данные нужно либо через пробел, либо по нажатию <Enter>, при этом программа не перейдет к
выполнению следующего оператора, пока не будут считаны все данные.

Другой вариант оператора ввода с клавиатуры имеет вид:

Здесь слово ReadLn означает read line — читать строку. Этот оператор отличается от Read только тем, что после
считывания последнего в списке значения для одного оператора ReadLn данные для следующего оператора будут
считываться с начала но

вой строки.

Имеются также стандартные функции ReadInteger, ReadReal, ReadlnInteger, ReadlnReal:

С процедурой ввода связан ряд ошибок времени выполнения (например, если переменная используется в качестве делителя,
и вводится 0, или, если должно быть получено целое число, а вводится ‘ABC’). Эти ошибки нужно уметь
обрабатывать.

Оператор try/except и обработка ошибок ввода

Операторы, которые могут получать ошибку, заключаются специальный охранный блок оператор try.

Синтаксис

Семантика

Если внутри блока try происходит ошибка выполнения, то все последующие операторы в блоке игнорируются, и
выполнение программы переходит к блоку except. По выходе из except программа продолжает
работу.

Если ошибки не происходит, то выполняются все операторы в блоке try, блок except не
выполняется, и программа продолжает работу.

Оператор вывода

Синтаксис

Семантика

Выражения в списке вычисляются, и их значения выводятся на экран. В случае writeln после вывода
осуществляется переход на новую строку.

Форматы вывода

Вывод с помощью write[ln]Format

Пример вывода с использованием форматной строки.

Будет выведено:

В форматной строке тоже можно использовать формат вывода.

{0, 10}: 10 — это ширина поля вывода

{0, 10:f3}: 3 — это количество знаков в дробной части для вещественного числа (показывает это спецификатор
f).

{0, 10:e3} — экспоненциальный формат.

Контрольные вопросы

1.Синтаксис и семантика оператора ввода

2. Обработка ошибок ввода

3. Синтаксис и семантика оператора вывода

4. Форматы вывода

Раздел 2 Тема 2.2 Условный оператор

Лекция№ 12 Условный оператор. Оператор выбора.

План лекции

1.Составной оператор

2 Синтаксис, семантика оператора IF

3.. Правила записи

4. Синтаксис, семантика оператора case

ОПЕРАТОР задает полное описание некоторого действия, которое необходимо выполнить. Для описания сложного действия
может потребоваться группа операторов. В этом случае операторы объединяются в СОСТАВНОЙ ОПЕРАТОР или БЛОК.

Пример 3. Упорядочить по возрастанию значения в двух переменных а, Ь:

В данном примере использован составной оператор — последовательность операторов, заключенная в фигурные скобки. В Си
фигурные скобки выполняют роль операторных скобок по аналогии с Begin, End в Паскале.

Обратите внимание на то, что перед закрывающей фигурной скобкой точку с запятой надо ставить обязательно, а после
скобки точка с запятой не ставится.

Условный
оператор IF

IF a=28 THEN WriteLn (f) ELSE k:=44

Переводится он так:

ЕСЛИ a=28 ТО печатай f ИНАЧЕ присвой переменной k значение 44.

Оператор if можно записывать и без части else. Например, if s<t then w:=a+1. Это означает, что если s<t, то
нужно выполнить оператор w:=a+1, в противном случае ничего не делать, а просто перейти к следующему оператору.

Правила
записи оператора IF

Вспомним правило расстановки точек с запятыми. Они применяются для того, чтобы отделять друг от друга операторы,
выполняющиеся друг за другом. Поэтому и после оператора if мы тоже ставили точку с запятой, если после него шел
какой-нибудь оператор. Перед end точку с запятой ставить не возбраняется, а

перед ELSE точку с запятой ставить запрещено.

IF условие THEN оператор [ ELSE оператор ]

Квадратные скобки здесь означают, что их содержимое можно писать, а можно и не

Примеры работы оператора if:

ФРАГМЕНТ ПРОГРАММЫ

ЧТО НА ЭКРАНЕ

a:=10; if a>2 then WriteLn (‘!!!’) else
WriteLn (‘!’)

!!!

a:=4; if a>5 then a:=a+10 else a:=a-1; WriteLn (a)

3

s:=6; if s-8<0 then s:=s+10; WriteLn (s)

16

s:=6; if s<0 then s:=s+10; s:=s+1; WriteLn (s)

7

Пояснение: Обратите внимание, что в последнем примере оператор if кончается оператором s:=s+10, а не s:=s+1. Поэтому
оператор s:=s+1 будет выполняться всегда, независимо от величины s.

В условии оператора if сравниваемые строки должны совпадать полностью. Научившись выполнять операции над строками, вы
научитесь избегать таких ситуаций.

Синтаксис

Семантика

Примеры использования для решения задач

Пример 1. Нахождение минимума

Дано: x, y

Найти: min

Оператор case выбора варианта

Синтакстис

Семантика

Вначале вычисляется выражение<переключатель>, после чего его значение ищется в одном из

<списков выбора>.

Если значение попадает в какойто <список выбора>, то выполняется соответствующий ему оператор, иначе, если есть
ветвь else, то выполняется оператор по ветке else.

Ограничения выражениепереключатель должно иметь так называемый порядковый тип:

целый символьный перечислимый

НО НЕ строковый или вещественный.

значения в <списках выбора> не должны пересекаться.

Примеры использования оператора выбора

Пример 1. День недели

Пример 2. Цифра или буква

Контрольные вопросы

1.Составной оператор

2. Синтаксис, семантика оператора IF

3. Правила записи

4. Синтаксис, семантика оператора case

Тема 2.3. Операторы цикла

Лекция№13 Циклы с пост и предусловием Цикл с параметром
Вложенные циклы

План лекции

1.Оператор цикла while

2.Оператор цикла repeat (do while)

3.Вложенные циклы

4.Оператор цикла с параметром (for)

Циклы

Цикл — разновидность управляющей конструкции в высокоуровневых языках программирования, предназначенная для
организации многократного исполнения набора инструкций. Основная цель циклов – сократить размер текста
программы.

В языке Си операторы while, do while и for , в языке Pascal операторы while, repeat

Оператор цикла while называется циклом с предусловием и имеет следующий формат: while (выражение)
оператор

В качестве выражения допускается использовать любое выражение языка Си, а в качестве тела любой оператор, в том числе
пустой или составной. Схема выполнения оператора while следующая:

1. Вычисляется выражение.

2. Если выражение ложно, то выполнение оператора while заканчивается и выполняется следующий по порядку оператор.
Если выражение истинно, то выполняется тело оператора while.

3. Процесс повторяется с пункта 1.

В операторе while вначале происходит проверка условия продолжения цикла, которая предваряет непосредственно
циклические вычисления, поэтому оператор while удобно использовать в ситуациях, когда тело оператора не всегда нужно
выполнять, а также когда заранее неизвестно количество необходимых для выполнения шагов цикла.

Синтаксис цикла while Семантика цикла while

В качестве примера использования оператора цикла рассмотрим программу вычисления факториала целого положительного
числа NL Сопоставим программу решения этой задачи, написанную на Паскале, с программой на Си. Пример…см.учебник
СемакинаИ.Г. стр65/стр.202, метуказ. Лясина Д.В. ОП лаб2

Синтаксис цикла repeat (ЯП Паскаль), цикла do whil (ЯП С++)

Циклы с постусловием (repeat) — сначала делается повторение цикла, а потом проверяется условие и если оно
выполняется, то происходит следующее повторение цикла.

Исполнение цикла повторяется до того момента, когда станет равным true.
Семантика цикла repeat

Оператор цикла do while называется оператором цикла с постусловием и используется в тех случаях, когда необходимо
выполнить тело цикла хотя бы один раз. Формат оператора имеет следующий вид:

do {тело} while (выражение);

Схема выполнения оператора do while (рис.2):

1. Выполняется тело цикла (которое может быть составным оператором).

2. Вычисляется выражение.

3. Если выражение ложно, то выполнение оператора do while заканчивается и выполняется следующий по порядку оператор.
Если выражение истинно, то выполнение оператора продолжается с пункта 1.

Зацикливание происходит, если:

условие цикла с предусловием всегда истинно

условие цикла с постусловием всегда ложно, иными словами равно нулю.

Пример

Использование в качестве выражения константы 1 приводит к тому, что условие повторения цикла все время остается
истинным и работа цикла никогда не заканчивается. Тело в этом цикле представляет собой пустой оператор. При
исполнении такого оператора программа будет «топтаться на месте». см. учебник Семакина стр.202

Итерация — однократное повторение тела икла. Отличия между циклами while и repeat while тело может не выполниться ни
разу ,repeat тело выполнится хотя бы один раз.

Пример 1. Сумма нечетных двузначных чисел

С использованием while С использованием repeat

Моделирование repeat с помощью while Моделирование while с помощью repeat

Вложенные циклы

Операторы while и do while могут быть вложенными.

Пример:

int i,j,k;

i=0; j=0; k=0;

do { i++;

j—;

while (a[k] < i) k++;

}

while (i<30 && j<-30);

Следующий фрагмент программы на Си++ содержит два вложенных цикла for. В нем запрограммировано получение на экране
таблицы умножения.

Вывод. При наличии нескольких вложенных циклов, в первую очередь, нужно оптимизировать самый внутренний.

Оператор цикла с параметром (for)

Формат оператора цикла с параметром:

for (выражение_1; выражение_2; выражение_3) оператор;

Выражение 1 выполняется только один раз в начале цикла. Обычно оно определяет начальное значение параметра цикла
(инициализирует параметр цикла). Выражение 2 — это условие выполнения цикла. Выражение 3 обычно определяет изменение
параметра цикла, оператор — тело цикла, которое может быть простым или составным. В последнем случае используются
фигурные скобки.

Синтаксис

Семантика

Ограничения:

выражения 1 и 2 должны быть совместимы по присваиванию с переменной

переменная должна иметь порядковый тип (такой же, как и в case — целый, символьный или перечислимый) переменная цикла
for не должна меняться внутри цикла for переменная цикла for должна быть описана в той же п/п, где используется
цикл

:

Контрольные вопросы

  1. Оператор цикла while
  2. Оператор цикла repeat (do while)
  3. Вложенные циклы
  4. Оператор цикла с параметром (for)

Раздел 3. Структурное и модульное программирование

Тема 3.1. Процедуры и функции

Лекция№14 Общие сведения о подпрограммах Определение и вызов
подпрограмм

План лекции

  1. Вспомогательные алгоритмы
  2. Процедуры Описание и вызов процедуры
  3. Функции Описание и вызов функции
  4. Функции обратного вызова (callback)

.

Вспомогательные алгоритмы

Вспомогательный алгоритм — это алгоритм, который используется для реализации другого алгоритма. Вспомогательные
алгоритмы имеют: имя, список параметров. Некоторые параметры являются входными, а некоторые — выходными

Если один из выходных параметров возвращается особым образом, так что алгоритм можно использовать в выражении, то
такой алгоритм называется алгоритмомфункцией.

В программировании вспомогательные алгоритмы называются подпрограммами и делятся на: процедуры и функции.

Подпрограммы позволяют избежать дублирования кода при решении однотипных задач. Алгоритм один раз описывается, а
затем может быть многократно вызван с различным набором параметров из другого алгоритма.

Процедуры

Пример. Даны 3 пары положительных чисел.

Найти их среднее арифметическое и среднее геометрическое.

Очевидно, удобно сделать подпрограмму, которой бы на вход подавались два числа, а выходными параметрами являлись их
среднее арифметическое и среднее геометрическое соответственно.

Строка называется заголовком процедуры.

Теперь можем многократно использовать описанную процедуру в основной программе:

Оператор вызова процедуры

Синтаксис описания процедуры

Замечание. Pascal допускает внутренне описание подпрограмм (вложенность подпрограмм)

Синтаксис вызова процедуры

Семантика вызова процедуры

имя должно быть именем процедуры, описанной ранее (или именем текущей процедуры) количество фактических параметров
должно совпадать с количеством формальных параметров фактические параметры переменные должны быть именами
переменных, типы которых совпадают с типами соответствующих формальных параметров

фактические параметры значения должны быть выражениями, типы которых совместимы по присваиванию с типами
соответствующих формальных параметров

Входно выходные параметры описываются с ключевым словом var, как и выходные.

Пример 1. Увеличение значения переменной на заданное число.

Функции

Функции являются другой разновидностью подпрограмм. Это подпрограмма, возвращающая одно значение особым образом так,
что ее вызов можно использовать в выражении. Точнее, — вызов процедуры является оператором, а вызов функции —
выражением. Пример. Функция sign(x) — знак числа


называется заголовком функции, а integer — это тип возвращаемого значения.

В каждой функции неявно определена переменная Result, хранящая возвращаемое значение функции и имеющая тот
же тип. Присваивание значения Result в теле функции обязательно по всем ветвям алгоритма

Функции очень похожи на процедуры. Но функция в отличие от процедуры обладает некоторыми свойствами переменной
величины и поэтому описание функции отличается от описания процедуры следующими двумя вещами:

  • В заголовке функции после скобок с формальными параметрами должен быть указан тип функции (у нас это Integer).
  • Внутри описания функции между BEGIN и END ей хотя бы раз должно быть присвоено какое-нибудь значение (у нас это
    perimetr:=2*(dlina+shirina)).

Параметры по умолчанию

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

Forward объявление делается для подпрограмм, которые обязательно будут описаны ниже. Если программа не будет описана
в этом же файле, то, в конце компиляции этого файла, мы получим ошибку компилятора о forward, который был
объявлен, но не описан.

Процедурные переменные

Процедурный тип и переменные

Переменная называется процедурной если ей можно присваивать процедуры или функции указанного типа. После присваивания
процедурной переменной имени процедуры, эта процедура может быть вызвана через переменную:

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

Замечание. До первого присваивания процедурная переменная имеет тип nil. В этот момент вызывать процедуру
через переменную нельзя — будет ошибка выполнения.

Функции обратного вызова (callback)

Процедурные переменные могут являться параметрами других процедур.

При вызове этих процедур им на вход в качестве параметров передаются имена процедур, которые будут вызваны позже
внутри основной процедуры. Другими словами, мы передаем в процедуру действие, которое должно быть вызвано (будет
вызвано) в определенный момент в этой процедуре. (обратный вызов ( callback)).

Примечание. Прямой вызов — это передача процедуры в качестве параметра.

Контрольные вопросы

  1. Вспомогательные алгоритмы
  2. Процедуры Описание и вызов процедуры
  3. Функции Описание и вызов функции
  4. Функции обратного вызова (callback)

История создания структурного программирования (реферат)

Тема 3.2. Структуризация в программировании

Лекция№15 Основы и методы структурного программирования

План лекции

1. Основные положения структурного программирования

2. Элементы структурного программирования

3. Метод разработки «сверху вниз»

4. Метод разработки «снизу вверх»

Технология структурного программирования базируется
на процедурной декомпозиции, при которой программа представляется в виде иерархической структуры блоков. Структурный
подход к программированию был предложен в 70-ых годах ХХ века Э. Дейкстрой, разработан и дополнен Н. Виртом , Х.Д.
Милсом, Д. Е. Кнутом и др. Цель структурного программирования — повышение качества и надежности разрабатываемых
программ, сокращение сроков разработки. см. учебник Семакина И.Г. стр.268

Основные положения структурного программирования

  • Программа должна содержать только основные структуры алгоритмов: базовые (следование, ветвление, цикл-пока) и дополнительные к базовым (выбр, цикл-до,счетный цикл). Эти конструкции могут быть вложены
    друг в друга, но никакие другие средства управления последовательностью выполнения операций не должны
    использоваться (например, оператор
    безусловного перехода).
  • Повторяющиеся фрагменты программы или фрагменты, представляющие
    из себя логически целостные вычислительные блоки, оформляются как подпрограммы (функции). Тогда в тексте основной программы
    вместо самих фрагментов будут присутствовать вызовы соответствующих функций. При вызове функции управление передается
    на выполнение этой функции. После чего управление возвращается на оператор, следующий за вызовом функции.
  • Разработка программы ведется пошагово, методом «сверху-вниз».

Сначала разрабатывается структура основной программы, которая должна состоять в основном из вызовов функций, каждая
из которых выполняет определенное действие. Вместо самих функций, в программу вставляются «заглушки».
«Заглушка»- это функция, имеющая «пустое» тело, то есть «заглушка» ничего не делает.
Полученная программа отлаживается. После того, как программист убедился, что функции вызываются в правильном
порядке, то есть структура основной программы верна, последовательно разрабатываются функции-«заглушки».
При этом разработка каждой функции ведется также, как и основной программы. Разработка программы заканчивается
тогда, когда не останется ни одной «заглушки». Такая последовательность разработки программы позволяет
программисту отлаживать небольшой логически законченный фрагмент программы. При этом ошибки локализуются именно в
отлаживаемой функции. К разработке следующей функции можно переходить только тогда, когда данная функция будет
работать безошибочно.

Кроме этого программы должны быть «самодокументированы». Это предполагает широкое и грамотное
использование комментариев и идентификаторов.

При подготовке текста программы необходимо использовать отступы, которые должны отражать вложенность операторов. Это
позволяет визуально отслеживать структуру программы.

Структурное программирование позволяет быстро и качественно не только разрабатывать программы, но и модифицировать их
в процессе эксплуатации.

.

Элементы структурного программирования

Структуризованная программа (или подпрограмма) — это программа, составленная из фиксированного множества базовых
конструкций. Рассмотрим основные определения и способы образования этих конструкций в схемах алгоритмов.

{}

Из операций, развилок и слияний строятся базовые конструкции: следование, ветвление, цикл. Применяя только эти три
конструкции, можно реализовать алгоритм решения любой задачи.

Конструкция, представляющая собой последовательное выполнение двух или более операций, называется следованием.

Конструкция, состоящая из развилки, двух операций и слияния, называется ветвлением. Одна из операций может
отсутствовать.

Конструкция, имеющая линии управления, ведущие к предыдущим операциям или развилкам, называется циклом.

Конструкции следование, ветвление и цикл можно представить как операции, так как они имеют единственный вход и
единственный выход.

Произвольную последовательность операций можно представить как одну операцию.

Операция может быть реализована любым оператором языка ПАСКАЛЬ (простым или составным), либо группой операторов, за
исключением оператора перехода GOTO.

В языке ПАСКАЛЬ количество базовых конструкций увеличено до шести, это:

-следование, -ветвление; -цикл с предусловием; -цикл с постусловием;

-цикл с параметром; -вариант.

Методы разработки подпрограмм

1.Метод разработки «сверху вниз»

Сначала строится основной алгоритм, затем вспомогательные алгоритмы.

Этот метод используется, когда: основной алгоритм понят, и его можно сразу записать; задача четко поставлена; имеется
ровно одна задача, которую необходимо решить.

Замечание. В коде главной программы имеются вызовы других подпрограмм, которые реализуются позже (возможно, другими
разработчиками);

На период, пока они не написаны, вместо них могут использоваться «заглушки» (подпрограммы с тривиальными телами).

Код каждой разрабатываемой подпрограммы также может разрабатываться методом сверху вниз.

2.Метод разработки «снизу вверх»

Вначале составляется «нижняя» подпрограмма, она всесторонне тестируется, и потом пишется основная программа или
подпрграмма.

Метод используется, когда: на момент начала решения задача нечетко поставлена; когда задача — большая; нет ясно
выраженного главного алгоритма, а есть множество взаимосвязанных задач (примером может служить программа,
реализующая деятельность университета).

Первый подход еще называют методом последовательной детализации, второй — сборочным методом.

Вспомогательные алгоритмы самого нижнего уровня состоят только из простых команд.

Метод последовательной детализации применяется в любом конструировании сложных объектов. Методика последовательной
детализации позволяет организовать работу коллектива программистов над сложным проектом.

Если между главным алгоритмом и «нижними» подпрограммами имеется несколько уровней, то имеет смысл сочетать оба
метода разработки.

Контрольные вопросы

1.Основные положения структурного программирования

2. Элементы структурного программирования

3. Метод разработки «сверху вниз»

4. Метод разработки «снизу вверх»

Тема 3.3. Модульное программирование

Лекция№16 Понятие и структура модуля. Компиляция и компоновка
программы

План лекции

  1. Модуль Примеры
  2. Синтаксис модуля Семантические ограничения
  3. Схема компиляции программы с модулями
  4. Компоновка

Модуль — это совокупность взаимосвязанных процедур, функций, типов, переменных и констант, предназначенных для
решения ряда однотипных задач, и помещенных в специальным образом оформленный файл.

Модули разбивают большой проект на относительно независимые части, при этом, каждая часть «живет своей жизнью»:
модуль, написанный для одного программного проекта, может быть использован в другом программном проекте.

Различают модули в виде исходных текстов и откомпилированные модули.

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

Приме: Модуль MyLib

Модуль в языке Object Pascal состоит из двух разделов:

раздел интерфейса, раздел реализации

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

В разделе реализации содержится

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

Синтаксис модуля

Семантические ограничения

тем не менее, если A ссылается на B в разделе интерфейса, а B ссылается на A в разделе реализации, то это
допустимо:

потому что модули компилируются в два этапа: интерфейс, реализация.

1. Компилируется файл основной программы. 2. Если в нем встречена секция uses, то компилируются модули из этой секции
слева направо. 3. Каждый модуль компилируется так же, как и основная программа по пунктам 12:

Если в модуле подключаются другие модули, то компилируются они,

и так происходит до тех пор, пока компилятор не дойдет до модулей, не содержащих подключения других модулей.

По окончании компиляции модуля его откомпилированный вариант (.pcu в PascalABC.NET) записывается на диск.

После записи откомпилированного модуля на диск компилятор возвращается к основному модулю (вызывающему) или
программе, и докомпилирует его до конца. Основная программа после компиляции хранится в оперативной памяти.

Первый этап компиляции закончен. Начинается заключительный этап компиляции — линковка (компоновка). Специальная
программа — линковщик — собирает из откомпилированных модулей единый исполняемый файл (.exe в Windows).

Стандартные откомпилированные модули хранятся в специальной папке, например, в PascalABC.NET — в папке \LIB. Если
модуль претендует на звание стандартного, его можно туда поместить.

Контрольные вопросы

  1. . Модуль Примеры
  2. Синтаксис модуля Семантические ограничения
  3. Схема компиляции программы с модулями Компоновка

Раздел 4. Структуры данных

Тема 4.1. Массивы

Лекция №17 Понятие массива. Особенности программирования
массивов

План лекции

  1. Определение массива
  2. Виды массивы
  3. Динамические массивы
  4. Сортировка массивов

Массив — упорядоченная структура, предназначенная для хранения однотипных данных.

Упорядочение элементов в массиве происходит по их индексам.

Индекс — порядковый номер элемента. Индексов может быть несколько. Такие массивы называются многомерными (с одним
индексом — одномерными соответственно).

Массив задается именем (заглавные латинские буквы), типом данных и размерностью.

Размерность — максимально возможное количество элементов в массиве. В один момент времени можно обратиться только к
одному элементу массива. Для этого указывается имя массива и в скобках индекс элемента.

Массивы делятся на одномерные (линейные) и двумерные.

Прообразом в математике для одномерного массива является вектор. Для двумерного – матрица.

Массивом можно назвать ряд ячеек памяти, отведенных для хранения значений индексированной
переменной.

Какие бывают массивы

Массивы могут быть одномерные, двумерные, трехмерные, четырехмерные и т.д.:

array [1..10] of Integer -одномерный массив 10 ячеек

array [1..10, 1..5] of Integer -двумерный массив 50 ячеек

array [1..10, 1..5, 1..2] of Integer -трехмерный массив 100 ячеек

array [1..10, 1..5, 1..2, 1..3] of Integer -четырехмерный массив 300 ячеек

Массивы бывают не только числовые, но и символьные, строковые и прочие. Подходит любой известный нам тип.
Например:

array [1..50] of Char

Это означает, что в каждой из 50 ячеек должно находиться не число, а произвольный символ.

Пример.

Как и диапазонный тип, индексы могут иметь типы: целый, символьный, перечислимый.

Кроме того, в качестве индекса может выступать порядковый тип, например:

Обращение к элементам массивов

Чтобы обратиться к элементу массива, нужно использовать конструкцию

В некоторых компиляторах можно специальными директивами отключить проверку выхода за границы диапазона, это
увеличивает скорость выполнения.

Динамические массивы

Динамическим называется массив, память под который выделяется в процессе работы программы. В pascalABC.NET имеются
встроенные динамические массивы, которые описываются следующим образом:

Динамические массивы индексируются с нуля, тип индекса только целое.

Выделение памяти

Для выделения памяти динамическому массиву имеется два варианта. Объектный стиль:

Процедурный стиль:

Здесь n может быть не только константой, но и переменной.

В обоих случаях элементы массивов заполняются нулями.

Сортировки массивов

Сортировкой называется процесс расположения элементов массива в порядке убывания (возрастания) из
значений. 
Пример : 
http://www.chemisk.narod.ru/images/pict40.gif 
Алгоритм
выполнения сортировки называется методом сортировки. К наиболее распространенным методам относятся:

  1. Простым выбором
  2. Простой перестановкой
  3. Пузырьковый метод
  4. На каждом шаге находится минимальный (максимальный) неотсортированной части. Он меняется с первым элементом в
    неотсортированной части, после чего отсортированная часть увеличивается на один элемент. На первом шаге весь
    массив считается неотсортированным. Сортировка заканчивается за (n-1) шаг. Это самый компактный алгоритм
    сортировки. Его можно оптимизировать, проверяя случай

«холостого» прохода по элементам массива. Т.е. если за проход ни один элемент не изменил позицию, значит
массив уже отсортирован и проверять дальше нет смысла
1. Пример: 241795

1 шаг: 1 | 42795 
2 шаг: 12 | 4795 
3 шаг: 124 | 795 
4 шаг: 1245 | 97 
5 шаг:
124579

http://www.chemisk.narod.ru/images/pict41.gif

Контрольные вопросы

  1. Определение массива
  2. Виды массивы
  3. Динамические массивы
  4. Сортировка массивов

Тема 4.2. Строки

Лекция№18 Символьный и строковый типы. Объявление типов.

План лекции

1. Объекты символьного типа

2. Кодирование управляющих символов

3. Инициализация переменных

4. Функция gets Терминатор

Символьная информация очень часто является предметом обработки в программах на языках высокого уровня. Примером могут
служить как простой вывод текстовой информации на экран для информирования пользователя о ходе вычислительного
процесса или результатах его работы, так, например, обработка информации из текстового файла, требующая выполнения
специфических операций слияния строк, удаления подстрок из текста, изменения порядка следования слов или фраз и т.п.
Для решения задач подобного класса в языке Си поддерживается работа со строками – объектами, хранящими символьную
информацию.

Фактически, строки рассматриваются как массивы, элементами которых являются объекты символьного типа (char или
unsigned char). Однако, смысловая связь элементов строки, объединяющая буквы в слова, а слова в предложения,
обособляет строки от массивов других типов, поэтому для них предусмотрены как специальные способы обозначения, так и
алгоритмы обработки в виде специализированных функций.

Строковые константы в языках Си и Си++ помещаются в кавычки:

“Это строка на языке Си”

Этот объект имеет в программе тип char * и указывает на то место в памяти программы, где расположена
данная строка. При этом размер выделенного под строку участка памяти (при условии кодировки информации в стандарте
ANSI) равен количеству символов строки и еще один символ (терминатор строки ‘\0’).

Символьные константы заключаются в апострофы:

‘A’ – символ А, ‘ ‘ – символ пробел.

Эти объекты имеют тип char и их значение – код соответствующего символа в кодировке ASCII. Если
известен ASCII-код символа, то его можно представить в программе в виде ‘\код8’ или ‘\xкод16′,
где код8 – код символа в восьмеричной системе счисления, а код16 – в
шестнадцатеричной. Например, следующий код:

cout<<“\x48\x45\x4c\x4c\x4f”;

выведет на экран строку HELLO, поскольку ‘\x48’-код символа ‘H’,
‘\x45’ – символа ‘E’ и т.д.

Для кодирования управляющих символов в языке Си используются также специализированные Esc-последовательности:‘\n’
–перевод строки

‘\t’ – горизонтальная табуляция

‘\a’ – сигнал-звонок

‘\r’ –возврат курсора к началу строки

‘\b’ – возврат на одну позицию

‘\\’ – обратный слеш

‘\f’ – перевод страницы

‘\» – апостроф

‘\v’ – вертикальная табуляция

‘\”’ – кавычка

Если строковые данные изменяются в процессе выполнения программы, то их необходимо хранить в переменных. Строковая
переменная определяется в языке Си как массив:

char str[20];

Как всякую переменную, строку можно инициализировать при определении с помощью константной строки:

char str[20]=”Привет”;

Инициализацию можно осуществлять и поэлементно, но такая форма записи неудобна:

char str[20]={‘П’, ’р’, ‘и’, ‘в’, ‘е’ ‘т’, ‘\0’};

Обращает на себя внимание необходимость в таком случае обязательно указывать терминатор ‘\0’ (символ, определящий
конец полезной информации в строке) в конце строки. В константных строках терминатор добавляется в конец строки
автоматически.

После такого определения можно работать с каждым символом строки как с обычным элементом массива:

str[0]=’п’; //теперь строка начинается со строчной буквы

cout<<str[2]; //выводим на экран букву и

Несмотря на схожесть строк с определением обычных массивов, они имеют ряд уникальных свойств. Так, например,
ввод-вывод элементов целочисленного массива всегда осуществляется поэлементно:

int mas[20];

for (i=0; i<20; i++)

cin >> mas[i]; //вводим очередной элемент массива

Однако, поэлементный (побуквенный) ввод текстовой информации, когда каждый символ необходимо подтверждать клавишей
Enter был бы неудобен. В этой связи функции ввода вывода языков Си и Си++ поддерживают работу со
строками, позволяя вводить или выводить содержимое строки целиком:

Ввод строки с клавиатуры

char str[20];

cin >> str;//или scanf(”%s”, str)

Вывод содержимого строки на экран

cout << str; //или printf(”%s”, str);

Необходимо сразу отметить, что ввод текстовой информации с использованием функции scanf или объекта
cin не всегда допустим, поскольку эти объекты считают пробел за разделитель вводимых объектов и
поэтому позволяют вводить строку до первого пробела. Если необходим ввод данных, содержащих пробелы, лучше
воспользоваться специальной функцией gets:

char *gets(char *s);

В отличие от стандартных средств ввода данных, gets допускает ввод пробельных символов (пробел,
символ табуляции).

char str[20];

gets( str); // можно вводить строку с пробелом

Использование функции gets небезопасно: пользователь может ввести символов больше, чем
зарезервировано под строку, и это приведет к порче областей данных, смежных с занимаемой строкой. Безопасной версией
функции является gets_s:

char *gets(char *s, size_t sizeInCharacters);

где параметр sizeInCharacters задает максимально возможное количество считываемых из входного потока
символов:

char str[20];

gets_s( str, 20); //безопасно от переполнения буфера

На практике можно использовать также функцию fgets в форме:

fgets(str, sizeof(str), stdin); /* считать из входного потока stdin(c клавиатуры) не более sizeof(str) символов в
строку str */

Вывод содержимого строки с использованием стандартных средств (cout, printf) не вызывает проблем,
но существует и специализированная функция для вывода строк puts:

int puts(const char *s);

char str[20];

puts( str ); //выводим содержимое строки на экран

Важную роль в обработке данных в строке играет так называемый терминатор — символ с нулевым кодом,
завершающий информационную часть строковой переменной. Рассмотрим фрагмент программы:

char str[20]=”Hello”, str1[30];

puts( str );

gets_s(str1, 30);

fputs(str1);

Что будет выведено на экран в первом и втором случае? Все 20 символов строки str или только строка “Hello”,
занимающая ее первые несколько символов? Во втором случае на экран выведется 30 символов строки str1 или
только та строка, которую перед этим введет пользователь? Очевидно, что на экран должна выводиться лишь полезная,
информационная часть строки, а ее хвост, заполненный компьютерным «мусором», должен игнорироваться при выводе и
выполнении других функций обработки строки.

Для отделения информационной строки от неинициализированной ее части используется терминатор ‘\0’. Все
функции для работы со строками языка Си учитывают наличие терминатора. Когда строка вводится с клавиатуры, после
всех введенных символов в строку добавляется терминатор. Запись константной строки ”…” предполагает
наличие терминатора на месте закрывающейся кавычки. Функции обработки строк (объединения, поиска, сравнения и т.д.)
просматривают содержимое строки до терминатора. Поэтому непредсказуемо закончится действие такого фрагмента:

char str[6]=”Hello”; //5 символов строки+ терминатор

str[5]=’!’; //изменяем символ с индексом 5 – это был терминатор

fputs(str); /* строка выводится, пока не встретится терминатор, но мы его удаили из строки */

Приведенный пример будет выводить информацию, начиная с адреса начала строки в памяти, до тех пока не встретит байт с
нулевым значением. Данный пример подчеркивает необходимость осторожного использования операций посимвольного
изменения данных в строке.

Контрольные вопросы

1. В какой форме можно представить строковую информацию в языке Си?

2. Что такое терминатор строки и какую роль он играет при обработке данных в строке?

3. Почему при вводе информации в строку предпочтительнее использовать функцию fgets?

Лекция№19 Поиск, удаление, замена и добавление символов в
строке.

План лекции

  1. Получение длины строки
  2. Копирование строки
  3. Конкатенация
  4. Лексикографическое сопоставление

Переменная типа строка предназначена для обработки цепочек символов. Каждый символ является элементом типа char.
Строки могут вводиться с помощью стандартных операторов read/readln и выводиться стандартными
операторами write/writeln. 
Объявляются переменные типа строка в разделе var. При объявлении указываются
идентификатор переменной, зарезервированное слово string и, в квадратных скобках, целое число — максимально
возможная длина строки. Наибольшая длина строки составляет 256 символов. Если переменная имеет значение с
максимальной длиной строки, то при объявлении переменной ограничиваются зарезервированным словом. 
Пример: 
var 
   identificator_1:
string; 
   identificator_2: string[20]; 
   identificator_3: string[255]; 
Значение строкового типа
также как и значение типа char при записи внутри программы заключаются в апострофы. 
Пример: 
   identificator_1:=’это
— компьютер’; 
Для обработки текстовой информации типичными являются операции вставки и замены подстрок, их
поиска и удаления, слияния и сравнения строк. Для реализации этих операций удобно использовать специализированные
функции из библиотек string.h, stdlib.h, stdio.h. Например, для получения длины строки (ее информационной части до
терминатора) используется функция strlen библиотеки string.h:

int strlen(char * string);

Рассмотрим задачу копирования одной строки в другую. Простое копирование с использованием операции присваивания
недопустимо.

Гораздо удобнее воспользоваться стандартной функцией копирования строк strcpy:

char *strcpy(char *dest, const char *src);

Эта функция копирует содержимое строки src в строку dest, как результат возвращает адрес строки приемника dest.

char str[100]=“One, two, three”, temp[50];
strcpy(temp, str); //копируем содержимое строки str в temp
puts(temp);

strcpy(temp, “four, five”);

puts(temp);

Использование функции strcpy в программе небезопасно, если источник копируемой строки ненадежен
если пользователь введет больше 49 символов, то копирование строки str приведет к переполнению строки temp,
объем копируемой информации превысит объем зарезервированной под строку памяти и это приведет к изменению смежных с
занимаемыми temp областями памяти.

Безопасной версией функции копирования строк является функция

errno_t strcpy_s(char *strDestination, size_t numberOfElements,

const char *strSource );

Функция strcpy_s копирует содержимое в адресе  strSource, включая конечный
символ-терминатор строки, в строку-приемник, указанную параметром  strDestination. Строка назначения должна
быть достаточно велика для хранения строки источника и его конечного нуль-символа. 

Еще одной часто используемой операцией со строками является их объединение (конкатенация). Операцию можно реализовать
с использованием функции strcat

char *strcat(char *dest, const char *src);

Объединяет исходную строку src и результирующую строку dest, присоединяя первую к последней.
Возвращает адрес приемника dest.

char str[100]=“One, two, three”;

strcat(str, “, four”);
puts(str); //на экран выведет One, two, three, four

Использование функции strcat также может быть небезопасным, поскольку отсутствует контроль над
количеством копируемых символов и результирующая строка способна переполнить приемник.

Еще одной функцией, позволяющей контролировать количества добавляемых к строке символов, язвлеятся
strncat:

char *strncat(char *dest, const char *src, int maxlen);

Эта функция объединяет результирующую строку dest и не более maxlen символов строки src.

Таким образом, должно соблюдаться неравенство:

strlen ( dest ) + maxlen + 1 ≤ sizeof ( dest )

Важной и очень часто используемой операцией в программе является процедура сравнения строк. Под сравнением здесь
понимается лексикографическое сопоставление строк, и меньшей при таком сравнении будет та строка, которая в условном
словаре будет стоять выше (раньше). Такое сравнение должно выполняться попарным последовательным сравнением кодов
символов строк слева направо до первого несовпадения или до конца одной из строк.

Выполнить сравнение строк может функция strcmp:

int strcmp(char *s1, char *s2);

Эта функция сравнивает две строки и возвращает отрицательное значение, если s1<s2; нуль, если s1=s2; положительное
значение, если s1>s2. Отношение s1>s2носит лексикографический характер, по которому, например:

“abc”>”aaa” “bcd”>“abc”

“aaa”>”aa” “abc”>”Abc”

Используя данную функцию, можно, например, защитить свою программу паролем. На практике часто можно встретить вариант
сравнения, не использующий операции отношения:

if (!strcmp(str, “мой пароль”))

Функция сравнения имеет ряд модификаций:

int stricmp(char *s1, char *s2);

Операцию поиска подстроки в строке можно реализовать с использованием функции strstr:

char *strstr(char *s1, const char *s2);

Функция ищет в строке s1 строку s2. Возвращает адрес первого символа вхождения строки s2.
Если строка отсутствует — возвращает нуль.

char str1[20]=“One, two, three, two”;

char str2[10]=“two”;
cout<<strstr(str1,str2); //на экран выведет two, three, two

В приведенном примере функция strstr найдет первое вхождение строки “two” в str1 и вернет
адрес первого символа ‘t’. Далее выводится содержимое строки str с этой позиции.

В состав стандартных библиотек языка Си не входит функция удаления подстроки. Но ее можно реализовать с помощью
других функций. Удалить подстроку длинною k символов, начиная с позиции i, можно вызовом strcpy:

strcpy(str+i, str+i+k);

Контрольные вопросы

  1. Почему использование функций strcpy и strcat может быть потенциально опасным для программы?
  2. . Что такое лексикографический порядок следования строк? Как реализуется лексикографическое сравнение строк в
    языке Cи?

Лекция№20 Операции со строками. Функции и процедуры. Решение
задач.

План лекции

1.Таблица функций языка Си для строк

2. Функции языка Си для преобразования

3. Функциия strtok

В таблице 1 приведены некоторые дополнительные функции, которые могут быть использованы для обработки информации в
строках

Таблица 1. Функции языка Си для работы со строками

Прототип функции

Выполняемое действие

char *strchr(const char *s, int c);

Ищет в строке s первое вхождение символа c, начиная с начала строки. В
случае успеха возвращает указатель на найденный символ, иначе возвращает нуль.

char *strrchr(const char *s, int c);

Аналогично предыдущему, только поиск осуществляется с конца строки.

int strcspn(const char *s1, const char *s2);

Возвращает длину максимальной начальной подстроки строки s1, не содержащей символов из
второй строки s2.

char *strdup(const char *s);

Копирует строку во вновь выделенный блок памяти, самостоятельно выделяя из кучи
необходимое для размещения копии количество байтов. Возвращает указатель на сдублированную строку. Удалить
эту строку можно с помощью операции delete, указав в качестве параметра указатель на эту строку. Если памяти
недостаточно — возвращается нуль.

char *strlwr(char *s);

Преобразует все прописные (большие) буквы в строчные (малые) в строке s.

char *strupr(char *s);

Преобразует все строчные (малые) буквы в прописные (большие) в строке s.

char *strnset(char *s, int c, int n);

Заполняет строку s символами c. Параметр n задает
количество размещаемых символов в строке.

char *strpbrk(const char *s1, const char *s2);

Ищет в строке s1 первое вхождение любого символа из строки s2.
Возвращает указатель на первый найденный символ или нуль — если символ не найден.

char *strrev(char *s);

Изменяет порядок следования символов в строке на обратный (кроме завершающего нулевого символа). Функция
возвращает строку s.

char *strset(char *s, int c);

Заменяет все символы строки s заданным символом c.

int strspn(const char *s1, const char *s2);

Вычисляет длину максимальной начальной подстроки строки s1, содержащей только символы из
строки s2.

Еще один тип часто использующихся при работе со строками операций — преобразование числовых данных в строковые и
обратно. Функции, реализующие эти операции, представлены в таблице 2.

Таблица 2. Функции языка Си для преобразования числовых данных в строковые и обратно

Прототип функции

Выполняемое действие

double atof(const char *s);

Преобразует строку s в число с плавающей точкой типа double

int atoi(const char *s);

Преобразует строку s в число типа int. Возвращает значение или нуль,
если строку преобразовать нельзя.

char *itoa(int value, char *s, int radix);

Преобразует значение целого типа value в строку s. Возвращает указатель
на результирующую строку. Значение radix — основание системы счисления, используемое при
преобразовании (от 2 до 36)

char *ecvt(double value, int ndig, int *dec, int *sign);

Преобразует значение value типа double в завершающуюся нулем строку.
Возвращает адрес статического буфера, который перезаписывается при каждом вызове этой функции. Чтобы
сохранить результат, можно воспользоваться, например, функцией strcpy(). Значение ndig
– требуемое количество цифр результата. Значение dec — указатель на целое значение, где
размещается позиция десятичной точки (результирующая строка не содержит символа десятичной
точки
). Если число отрицательное, sign получает значение 1, если
положительное – 0.

Для преобразования данных из числового типа в строку можно использовать также функцию sprintf, а для
обратного – sscanf:

char str[10], str1[10];
int x=-30;

double y=123.45678;

sprintf(str, “%d”, x);

puts(str); //выведет -30

sprintf(str1, “%5.2lf”, y);

puts(str1); //выведет 123.46

При работе со строками зачастую встает задача разбиения строки на лексемы – подстроки с использованием одного или
нескольких разделителей. Так, например, может быть поставлена задача разбить строку на предложения – тогда
разделителями будут служить знаки пунктуации, завершающие предложения: ‘.’, ‘!’, ‘?’. Если же
встанет задача разбить предложения на слова, то в качестве разделителей придется использовать символы ‘ ’,
‘,’, ‘:’,
‘-’, ‘»’, ‘”’, ‘;’. Разбиение строки на лексемы можно выполнить
алгоритмически, отыскивая в строке символы-разделители и занося подстроки, заключенные между ними в отдельные
элементы массива строк-лексем. Но гораздо удобнее будет воспользоваться специализированной функцией
strtok, которая выполнит подобное разбиение автоматически. Эта функция имеет следующий прототип:

char * strtok( char * string, const char * delims );

Как уже упоминалось, эта функция ищет в строке string лексемы, представляющие собой последовательность
символов, разделенных знаками-разделителями. Для поиска последовательности лексем функцию strtok необходимо
вызвать несколько раз, каждый вызов будет возвращать адрес очередной найденной лексемы.

При первом вызове функции необходимо передать адрес строки для поиска в качестве первого аргумента (string).
Функция начинает поиск с первого символа переданной строки. При последующих вызовах функции передается нулевой
указатель, что заставляет ее искать следующую лексему начиная с позиции окончания последней найденной лексемы.
Позиция окончания лексемы определяется по совпадению очередного символа строки string с одним из символов
строки разделителей delims. Этот конечный маркер лексемы заменяется нулевым символом, и адрес лексемы
возвращается функцией. Следующий вызов функции strtok начинаются нулевого символа — маркера конца
предыдущей лексемы. Если функция strtok при очередном вызове не найдет ни одной лексемы – она
вернет нулевой указатель. Из приведенного описания понятно, что исходная строка string при обработке
функцией strtok претерпевает изменения (в нее добавляются множество символов-терминаторов для
обозначения конца лексемы), поэтому, возможно, имеет смысл сначала сделать копию строки для использования в функции
strtok. Рассмотрим пример разбиения строки на отдельные слова с использованием функции strtok:

char str[51];

char seps[]=» ,.!?-\n»;

puts(«Введите строку»);

gets_s(str, 50);

char *pWord;

//находим первую лексему

pWord = strtok(str, seps);

//пока находятся новые лексем (слова в строке)

while (pWord) {

//выводим лексему на экран

puts(pWord);

//ищем следующую лексему

pWord = strtok(NULL, seps);

}

//Выводм на экран исходную строку

puts(str);

Если запустить этот код и ввести с клавиатуры строку

Делу время – потехе час!

На экране получим список слов этой строки:

Делу

время

потехе

час

Делу

Необходимо обратить внимание, что при попытке вывести исходную строку после ее обработки функцией
strtok, получаем только первое слово. Это связано с тем, что функция заменила вхождения в строку
разделителей из строки seps на символы конца строки.

Приведенные выше определения и примеры ориентированы на работу с кодировкой символов ASCII, где каждый символ
кодируется одним байтом. Однако, эта кодировка постепенно перестает быть общеупотребимой, уступая более
универсальным, многобайтовым. Примером здесь может служить кодировка Unicode. Стандарт Unicode был предложен
некоммерческой организацией Unicode Consortium, образованной в 1991 г. Для представления каждого символа в этом
стандарте используются два байта, что позволяет закодировать очень большое число символов из разных письменностей: в
документах Unicode могут соседствовать русские, латинские, греческие буквы, китайские иероглифы и математические
символы.

Для хранения символов Unicode необходимо два байта, из-за чего их называют широкими символами (wide characters). В
языке Си им соответствует тип wchar_t.

wchar_t wstr=L”Hello”;

Объявленная строка wstr в общем случае может иметь разный размер в различных компиляторах, при программировании под
Win32 в средах C++ Builder и Microsoft Visual Studio она будет иметь размер 12 байт (2 байта на каждый символ и
двухбайтовый терминатор). Лексемные широкие строки предваряются символом L : L ”содержимое строки ”.
Для работы с широкими символами в библиотеке string.h имеется набор специальных функций, схожих по названию и
выполняемым действиям рассмотренным выше однобайтным вариантам: wcscat (конкатенация строк),
_wcspcpy (копирования строк), wcscmp (сравнение строк) и т.п. Полный перечень
функций для работы с многобайтовыми строками можно посмотреть в документации по библиотеке string.h.

Контрольные вопросы

1 Преобразования числовых данных в строковые и обратно

2. Разбиения строки на лексемы

Тема 4.3. Множества

Лекция№21 Понятие и объявление множества. Операции над
множествами.

План лекции

  1. Свойства множеств
  2. Операции объединения, пересечения, разности
  3. Множестваконстанты. Пустое множество.

Множеством в Паскале называется набор значений какого-нибудь порядкового типа, подчиняющийся специфическим правилам,
о которых мы поговорим дальше. В программе множество записывается в виде списка этих значений в квадратных скобках.
Например, [7,5,0,4] или [‘п’ , ’ж’ , ’л’]. Множество не должно состоять более, чем из 256 элементов и не должно
содержать элементов с порядковыми номерами меньше 0 и больше 255.

Если в множестве элемент повторяется, то считается, что он входит туда только один раз. Например, множества [2,5,2] и
[2,5] эквивалентны.

Порядок элементов в множестве не играет роли. Множества [2,5] и [5,2] эквивалентны.

В описании тип множества задается словами set of. Например, конструкция

VAR a : set of Byte

говорит о том, что задана переменная, значением которой может быть любое множество из любого числа элементов типа
Byte. Так, в некоторый момент процесса выполнения программы значением a может быть множество [210, 3, 92], а через
пару секунд — [8, 5, 3, 26, 17].

Конструкция VAR c: set of (april, may, june) говорит о том, что переменная c может иметь значением
любое множество из имен april, may, june. Например, [april, june].

Конструкция VAR d: set of 10..18 говорит о том, что переменная d может иметь значением любое
множество целых чисел из диапазона от 10 до 18.

Над множествами определено несколько операций. Рассмотрим три из них: объединение (+), пересечение
(*) и разность (-).

Операция

Результат

Пояснение

[1,4,4,5] + [1,2,3,4]

[1,2,3,4,5]

В результирующее множество входят элементы, имеющиеся хотя бы в одном из исходных множеств

[1,4,4,5] * [1,2,3,4]

[1,4]

В результирующее множество входят только те элементы, которые имеются в каждом из исходных множеств

[1,2,3,4] [1,3,5]

[2,4]

В результирующее множество входят те элементы “уменьшаемого”, которые не встречаются в “вычитаемом”

Операция [1,2]*[3,4] будет иметь результатом [ ], то есть пустое множество.

Вот операции сравнения множеств:

if a = b then …

Если множества a и b состоят из одинаковых элементов …

if a <> b then …

Если множества a и b отличаются хотя бы одним элементом …

if a <= b then …

Если a является подмножеством b, то есть все элементы a являются элементами b …

if a >= b then …

Если b является подмножеством a, то есть все элементы b являются элементами a …

Операция проверки вхождения элемента E в множество a:

if E in a then …

Например, a:= [1,2,4]; if 2 in a then … {Если 2 входит в множество a ….}

К сожалению, Паскаль не желает выводить множества на печать, точно так же, как он не желает печатать перечислимые
типы. Поэтому просто так узнать, из каких элементов состоит множество, не удастся. Вот один из обходных путей:

Пусть задано множество a, описанное, как set of Byte. Будем пробовать уменьшать его на все элементы подряд, от 1 до
255, и каждый раз, когда это удается, распечатывать соответствующее число. Вот подходящий фрагмент, в котором мне
понадобится “для транзита” еще одно множество b:

for i:=1 to 255 do begin
b:=a-[i]; if a<>b
then begin WriteLn(i); a:=b end
end
{for}

Вот гораздо более короткий и естественный путь:

for i:=0 to 255 do if i in a
then WriteLn(i)

Я думаю, что работа с множествами Паскаля — любопытное и полезное занятие. Например, она нужна математикам, чтобы
проверять свои теоремы. Я проиллюстрирую работу с множествами на простеньком примере:

Медиум загадывает шестерку чисел, каждое в диапазоне от 0 до 10 (числа могут и совпадать). Экстрасенс отгадывает их,
называя свою шестерку. Есть ли между шестерками совпадающие числа? Если есть, то распечатать их.

Сначала решим задачу традиционными методами, а именно с применением массивов, а не множеств:

CONST razmer = 10; kol = 6;

VAR Medium, Extrasens :array[1..kol] of 0..razmer;
i, j, k
:Integer;
BEGIN
{Формируем случайным образом две шестерки:}
Randomize;

for i:= 1 to kol do begin
Medium[i]
:=Random(razmer+1); Extrasens[i] :=Random(razmer+1)

end {for};
{Проверяем две шестерки на совпадение:}
k:=0; {Нам придется
подсчитывать количество совпадений. k — счетчик}
for i:= 1 to kol
do
for j:= 1 to kol do
if Medium[i] = Extrasens[j] then begin
k:=k+1;
WriteLn(Medium[i]) {Распечатываем совпадения}
end {if};
if k=0 then
WriteLn(‘Не угадал ни разу‘)
END.

У данной программы есть недостатки. Пусть медиум загадал числа 2 4 1 5 4 8, а экстрасенс назвал 1 4 9 6 1 4.
Программа распечатает числа 4 4 1 1 4 4, а достаточно было бы только 1 4. К тому же пришлось организовывать счетчик
совпадающих чисел, чтобы иметь возможность ответить, угадано ли хоть одно число.

А теперь применяем множества:

CONST razmer = 10; kol = 6;

VAR Medium, Extrasens, a :set of 0..razmer;
i
:Integer;
BEGIN
{Формируем случайным образом две шестерки:}

Randomize;
Medium:=[ ]; Extrasens:=[ ]; {Начинаем формировать “с нуля”, то есть с пустых множеств}
for i:= 1 to kol do begin
Medium := Medium
+ [Random(razmer+1)]; {Наращиваем по одному элементу в множестве медиума}
Extrasens := Extrasens +
[Random(razmer+1)] {Наращиваем по одному элементу в множестве экстрасенса}
end {for}

a:= Medium * Extrasens; {Множество a содержит совпадающие числа. Вот так – одним махом.}
if
a=[ ] then WriteLn(‘Не угадал ни разу‘)
else begin
WriteLn(‘Есть совпадения, вот они: ‘);
{Распечатываем элементы множества a:}
for i:=0 to razmer do if i in a
then WriteLn(i);

end {else}
END.

Описание множеств. Множестваконстанты. Пустое множество.

Операции над множествами:

Вывод множеств.

Цикл foreach по множеству.

Пример использования множеств: решето Эратосфена. Алгоритм.

Лекция 25

Алгоритм Эратосфена

Код алгоритма Эратосфена

Контрольные вопросы

  1. Свойства множеств
  2. Операции объединения, пересечения, разности
  3. Множестваконстанты. Пустое множество.

Тема 4.4. Записи

Лекция№22 Определение типа записи. Правила работы с записями.

План лекции

1.Объявление записи

2. Обращение к записи

3.Поля записи

Пример: 
http://www.chemisk.narod.ru/images/pict47.gif
Для реализации объединения
данных разного типа в языке Pascal существует специальная структура — запись. Объявление записи
начинается с зарезервированного словаrecord, за которым перечисляются имена и типы всех составляющих записей ее
полей. Заканчивается объявление скобкой end. 
Пример: 
type 
   karta = record 
      family:
string[20]; 
      name: string[15]; 
      age: integer; 
   end; 
При обращении к записи в
программе указывается имя записи и через точку имя поля. 
Пример: 
   karta.family:=’Иванов’; 
   karta.name:=’Иван’; 
   karta.age:=20; 
Для
упрощения обращения к записи может быть использован оператор работы со структурой with. 
Пример: 
with karta
do 
   begin 
      family:=’Иванов’; 
      name:=’Иван’; 
      age:=20; 
   end; 
Полями
записи наряду с простыми типами могут быть и данные структурированных типов, например, массивы или записи. 
Пример
1: 
var z: record 
      pole1: string; 
      pole2: array [1..10] of
byte; 
   end; 
Begin 
   for i:=1 to 10 do 
   read (z.pole2[i]); 
End. 

Пример 2:
объявите запись, содержащую сведения о фамилии, дате рождения и адресе студента. 
var student: record 
      fam:
string[15]; 
      data: record 
            day: 1..31; 
            mes: 1..12; 
            year:
integer; 
      end; 
      adres: record 
            street: string[15]; 
            dom:
byte; 
            kvart: byte; 
      end; 
   end; 
Begin 
   with student do 
      begin 
         fam:=
‘Иванов’; 
         with data do 
            begin 
               day:= 30; 
               mes:=
4; 
               year:= 1987; 
            end; 
         with adres do 
            begin 
               street:=
‘Туполева’; 
               dom:= 22; 
               kvart:=
154; 
            end; 
      end; 
End. 
Для использования в программе набора с одинаковыми полями
используются массивы записей. 
Пример: объявить массив из десяти записей. 
1 вариант решения: 
var A:
array [1..10] of record 
      fam: string; 
      name: string; 
   end; 
2 вариант решения: 
type
student = record 
      fam: string; 
      name: string; 
   end; 
var A: array [1..10] of student;

Контрольные вопросы

1. Объявление записи

2. Обращение к записи

3.Поля записи

Тема 4.5. Файлы

Лекция№23 Типы файлов. Файлы последовательного доступа.

План лекции

  1. Определение
  2. Классификация
  3. Понятие файловой переменной, файлового указателя
  4. 2 способа открытия файла
  5. Буферизация в файлах

Файлы

Файл — именованная область на диске, содержащая некоторую информацию.

Преимущества:

  1. Хранят данные в промежутках между запусками программ.
  2. Размер данных в файле может существенно превышать оперативную память компьютера.

Классификация файлов

Файлы обычно классифицируют по двум признакам: 1. По типу компонент:

текстовые;

двоичные:

типизированные; бестиповые.

2. По способу доступа:

последовательный; произвольный.

Текстовые файлы

Тип text. Состоят из строк переменной длины, в конце каждой из которых находится символ перехода на новую
строку (#13#10 в Windows, #10 в Linux). В

PascalABC.NET это константа NewLine.

Двоичные файлы: информация хранится в виде двоичного кода.

Типизированные файлы

Тип file of <type>. Содержат данные фиксированного типа <type>.

Бестиповые файлы

Тип file. Могут хранить данные различных типов.

В двоичных файлах информация хранится в том виде, как она хранится в оперативной памяти, а в текстовых числовая
информация преобразуется к строковому виду и обратно, что занимает больше времени.

Файл называется

файлом произвольного доступа, если можно перейти к его iму элементу за время, не зависящее от размеров файла («за
константное время»), файлом последовательного доступа, если переход к iму элементу требует количество операций,
пропорциональное i («требует линейного времени»).

Все файлы, содержащие элементы разного размера могут иметь только последовательный доступ к элементам. Таковыми
являются:

текстовые, бестиповые файлы.

Типизированные файлы имеют произвольный доступ.

Понятие файловой переменной, файлового указателя

Перед тем, как работать с информацией в файле, его надо открыть. После этого можно выполнять операции чтения из файла
и записи в файл. По окончании работы его нужно закрыть.

Закрытый файл можно:

переименовывать перемещать копировать удалять

С каждым открытым файлом связан так называемый файловый указатель, который указывает на текущую позицию в файле.

Файловый указатель создается при открытии файла, и, как правило, устанавливается на 1й элемент файла.

После каждой операции чтения или записи файловый указатель продвигается вперед на размер считанных элементов.

Паскальпрограмма

2 способа открытия файла

  1. Reset(f) — открытие текстового файла на чтение, а двоичного — на чтение и запись; файл должен
    существовать; файловый указатель — на начало файла;
  2. Rewrite(f) — создание нового файла (если такого файла не существовало) или обнуление существующего;
    файловый указатель — в начало;

текстовые файлы при этом открываются только на запись, а двоичные — на чтение и запись;

Функция Eof(f) [расшифровывается как End Of File] возвращает true, если файловый указатель находился за
концом файла.

После работы с данными в файле его необходимо закрыть с помощью Close(f).

Если, не закрывая, выполнить Reset(f), то файловый указатель просто перейдет к началу.

Буферизация в файлах

С каждым файлом связан некий буфер памяти, в который информация из файла частично считывается, и, из которого
записывается в нужную часть файла.

Наличие буфера ускоряет операции чтения и записи, поскольку они выполняются преимущественно не с внешним устройством
(файлом), а с участком оперативной памяти.

Если забыть закрыть файл, открытый на запись, то можно потерять лишь данные, сохраненные в буфере.

Подпрограммы для работы с закрытыми файлами

Типичные ошибки вводавывода при работе с файлами

  1. Файл открыли, но забыли выполнить Assign.
  2. Открыли, но файла нет на диске (или нет прав доступа на чтение).
  3. Попытка считывания за концом файла.

Все эти ошибки нужно обрабатывать с помощью исключений.

Пример 1. Файл не существует.

Оператор try..finally

Этот оператор отличается тем, что не обрабатывает исключение, а лишь выполняет некоторое завершающее действие,
которое должно быть совершено в любом случае. Для обработки нужен внешний блок try..except.

Пример 2. Попытка считывания за концом файла.

Контрольные вопросы

  1. Определение
  2. Классификация
  3. Понятие файловой переменной, файлового указателя
  4. 2 способа открытия файла
  5. Буферизация в файлах

Лекция№24 Файлы произвольного доступа. Создание структуры записи.

План лекции

Файлы произвольного доступа

Структура описания файловой переменной

Чтение элементов файла

Последовательность действий для создания и заполнения файла

Файл называется

файлом произвольного доступа, если можно перейти к его iму элементу за время, не зависящее от размеров файла («за
константное время»), файлом последовательного доступа, если переход к iму элементу требует количество операций,
пропорциональное i («требует линейного времени»).

Все файлы, содержащие элементы разного размера могут иметь только последовательный доступ к элементам

Прямой доступ к записям файла. В стандарте языка Паскаль до

пустим только последовательный доступ к элементам файла. Од

ной из дополнительных возможностей, реализованных в Турбо

Паскале, является прямой доступ к записям файла.

Как уже отмечалось, элементы файла пронумерованы в порядке

их занесения в файл, начиная с нуля. Задав номер элемента файла,

можно непосредственно установить на него указатель. После этого

можно читать или перезаписывать данный элемент. Установка ука

зателя на нужный элемент файла производится процедурой

Seek(FV,n)

Здесь F V — имя файловой переменной, п — порядковый номер

элемента. В следующем примере эта процедура будет использована. Пример 2. Имеется файл, сформированный программой из
пре

дыдущего примера. Пусть некоторые студенты пересдали экзамен

и получили новые оценки. Составить программу внесения резуль

татов переэкзаменовки в файл. Программа будет запрашивать но

мер студента в ведомости и его новую оценку. Работа заканчивает

ся, если вводится несуществующий номер (9999).

Пример требует некоторых пояснений. Список студентов в ве

домости пронумерован, начиная от 1, а записи в файле нумеру

ются от 0. Поэтому, если п — это номер в ведомости, то номер

соответствующей записи в файле равен п-1 . После прочтения

записи «номер п-1» указатель смещается к следующей п-й запи

си. Для повторного занесения на то же место исправленной запи

си повторяется установка указателя.

Файловый тип переменной — это структурированный тип, представляющий собой совокупность однотипных элементов,
количество которых заранее (до исполнения программы) не определено.

Структура описания файловой переменной:

Var <имя переменной>: Fil e Of <тип элемента>;

где <тип элемента> может быть любым, кроме файлового.

Например:

Var Fi: File Of Integer;

Fr: File Of Real;

Fc: File Of Char;

Файл можно представить как последовательную цепочку элементов (эл.), пронумерованных от 0, заканчивающуюся
специальным кодом, называемым маркером конца (<м. к.>):

Количество элементов, хранящихся в данный момент в файле, называется его текущей длиной. Существует специальная
ячейка памяти, которая хранит адрес элемента файла, предназначенного для текущей обработки (записи или чтения). Этот
адрес называется указателем или окном файла.

Для того чтобы начать запись в файл, его следует открыть для записи. Это обеспечивает процедура Rewrite (FV) ; где FV
— имя файловой переменной. При этом указатель устанавливается на начало файла. Если в файле есть информация, то она
исчезает.

Схематически выполнение процедуры Rewrite можно представить так:

Стрелка внизу отмечает позицию указателя.

Запись в файл осуществляется процедурой Write (FV, V); где v — переменная того же типа, что и файл FV. Запись
происходит туда, где установлено окно (указатель). Сначала записывается значение, затем указатель смещается в
следующую позицию. Если новый элемент вносится в конец файла, то сдвигается маркер конца.

Схема выполнения оператора:

Пример 1. В файловую переменную Fx занести 20 вещественных

чисел, последовательно вводимых с клавиатуры.

Для чтения элементов файла с его начала следует открыть файл для чтения. Это делает процедура Reset (FV). В
результате указатель устанавливается на начало файла. При этом вся информация в файле сохраняется. Схема выполнения
процедуры:

Чтение из файла осуществляется процедурой Read (FV, v) ; гдеv — переменная того же типа, что и файл FV. Значение
текущегоэлемента файла записывается в переменную v; указатель смещается к следующему элементу.

Пример 1. В файловую переменную Fx занести 20 вещественных

чисел, последовательно вводимых с клавиатуры.

Для чтения элементов файла с его начала следует открыть файл для чтения. Это делает процедура Reset (FV). В
результате указатель устанавливается на начало файла. При этом вся информация в файле сохраняется. Подведем итог сказанному. Для создания и заполнения файла
требуется следующая последовательность действий:

1. Описать файловую переменную.

2. Описать переменную того же типа, что и файл.

3. Произвести назначение (Assign).

4. Открыть файл для записи (Rewrite).

5. Записать в файл данные (Write).

6. Закрыть файл (Close).

Ее результат — целое число, равное текущей длине файла.

Замечание: согласно стандарту Паскаля в файл, открытый опе

ратором Rewrite, можно только записывать информацию, а файл,

открытый оператором Reset , можно использовать только для чте

ния. В Турбо Паскале допускается запись (Write) в файл, откры

тый для чтения (Reset). Это создает определенные удобства для

модификации файлов.

Контрольные вопросы

Тема 4.6. Указатели

Лекция№ 25. Указатели и применение динамически распределяемой
памяти.

План лекции

  1. Определение указателя
  2. Типы указателей
  3. Бестиповые указатели
  4. Динамическая память

Оперативная память состоит из последовательный ячеек. Каждая ячейка имеет номер, называемый адресом. В 32битных
системах можно адресовать 232 байт ( 4Гб) памяти, в 64битных — 2 64
соответственно.

Переменная (или константа), хранящая адрес, называется указателем.

Для чего нужны указатели

Указатели повышают гибкость доступа к данным:

Вместо самих данных можно хранить указатель на них. Это позволяет хранить данные в одном экземпляре и множество
указателей на эти данные.

Через разные указатели эти данные можно обновлять (пример — корпоративная БД).

Указателю можно присвоить адрес другого объекта (вместо старого появился новый телефонный справочник).

С помощью указателей можно создавать сложные структуры данных.

Типы указателей

Указатели делятся на:

1.Типизированные (указывают на объект некоторого типа)

Имеют тип: ^<тип> Пример. ^integer — указатель на integer

2.Бестиповые (хранят адрес ячейки памяти неизвестного типа)

Преимущество: могут хранить что угодно Имеют тип: pointer Пример кода.

@ — унарная операция взятия адреса

Операция разадресации (разыменования)

^ — операция разыменования pi^ — то, на что указывает pi, т.е. другое имя i или ссылка на i.

Тут надо вспомнить определение ссылки: Ссылка — другое имя объекта.

Нулевой указатель

Все глобальные неинициализированные указатели хранят специальное значение nil, что говорит о том, что они
никуда не указывают. Указатель, хранящий значение nil называется нулевым.

Попытка разыменовать нулевой указатель приводит к ошибке времени выполнения.

Бестиповые указатели

Бестиповому указателю можно присвоить адрес переменной любого типа, т.е. бестиповой указатель совместим по
присваиванию с любым типовым указателем.

Попытка разыменовать бестиповой указатель приводит к ошибке компиляции. Т.е. он может только хранить адреса.

Оказывается, любой типизированный указатель совместим по присваиванию с бестиповым, т.е. следующий код верен:

Вопрос. Нельзя ли интерпретировать память, на которую указывает p, как принадлежащую к определенному типу?
Ответ — да, можно. Вот как это сделать:

Доступ к памяти, имеющей другое внутреннее представление

Замечание. Важно, что типы real и Rec имеют один размер.

Переменная типа динамический массив является указателем на данные массива, хранящиеся в динамической памяти.

Динамическая память

Особенности динамической памяти

Память, принадлежащая программе, делится на:

1.Статическую (память, занимаемая глобальными переменными и константами)

2. Автоматическую (память, занимаемая локальными данными, т.е. стек программы)

3.Динамическую (память, выделяемая программе по специальному запросу)

В дополнение к статической и автоматической памяти, которые фиксированы после запуска программы, программа может
получать нефиксированное количество динамической памяти. Ограничения на объём выделяемой динамической памяти связаны
лишь с настройками операционной системы и объемом оперативной памяти компьютера.

Основная проблема — явно выделенную динамическую память необходимо возвращать, иначе не хватит памяти другим
программам.

Для явного выделения и освобождения динамической памяти используются процедуры:

По окончании работы программы, вся затребованная программой динамическая память возвращается ОС.

Но лучше освобождать динамическую память явно! Иначе в процессе работы программы она может занимать большие объёмы
(ещё не освобождённой) памяти, что вредит общей производительности системы. Ошибки при работе с динамической
памятью

1.

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

2.

Утечка памяти (память, которая выделилась в результате первого вызова New(p), принадлежит программе, но не
контролируется никаким указателем.

2a.

Утечка памяти в подпрограмме: обычно если динамическая память выделяется в подпрограмме, то она должна в этой же
подпрограмме возвращаться. Исключение составляют т.н. «создающие» п/п:

Ответственность за удаление памяти, выделенной в подпрограмме, лежит на программисте, вызвавшем эту подпрограмму.

Out of Memory (очень большие утечки памяти, в результате которых динамическая память может «исчерпаться»).

Контрольные вопросы

  1. Определение указателя
  2. Типы указателей
  3. Бестиповые указатели
  4. Динамическая память

Тема 4.6

Лекция№26. Структуры данных на основе указателей.

План лекции

  1. Определение ДСД
  2. Виды ДСД
  3. Стеки
  4. Очереди
  5. Линейные списки

Динамические структуры данных – связные структуры данных, память под которые выделяется (и освобождается при
необходимости) динамически в процессе работы программы. В качестве динамически объединяемых элементов выступают
всегда объекты структурного типа данных, поскольку основной принцип формирования динамических структур — наличие в
объекте полей двух типов: один для хранения полезной информации (информационный блок), другой для связывания
структур между собой (адресный блок). На языке Си структурный тип для объектов, объединяемых в динамическую
структуру, определяется следующим образом:

struct Node
{ … //информационный блок
Node *field1, *field2, *mas[10];//адресный блок

};

Здесь информационный блок включает в себя полезную информацию, хранящуюся в элементе, а адресный блок может включать
в себя набор указателей, позволяющих связать отдельные элементы между собой в единый список, дерево, очередь и
другие типы динамических структур. Количество указателей и способ их интерпретации могут существенно отличаться для
различных типов динамических структур. К динамическим структурам относятся:

  • однонаправленные (односвязные) списки;
  • двунаправленные (двусвязные) списки;
  • многосвязные списки;
  • стеки;
  • деки;
  • очереди;
  • циклические списки (кольца);
  • бинарные деревья;
  • графы.

Рассмотрим основные правила работы с динамическими структурами данных типа стек, очередь и список, базируясь на
приведенное описание компоненты.

СТЕКИ

Стеком называется динамическая структура данных, добавление компоненты в которую и исключение компоненты из которой
производится из одного конца, называемого вершиной стека. Стек работает по принципу

LIFO (Last-In, First-Out)

поступивший последним, обслуживается первым.

Обычно над стеками выполняется три операции:

-начальное формирование стека (запись первой компоненты);

-добавление компоненты в стек;

-выборка компоненты (удаление).

Для формирования стека и работы с ним необходимо иметь две переменные типа указатель, первая из которых определяет
вершину стека, а вторая — вспомогательная. Пусть описание этих переменных имеет вид:

var pTop, pAux: Pointer;

где pTop — указатель вершины стека;

pAux — вспомогательный указатель.

ОЧЕРЕДИ

Очередью называется динамическая структура данных, добавление компоненты в которую производится в один конец, а
выборка осуществляется с другого конца. Очередь работает по принципу:

FIFO (First-In, First-Out) —

поступивший первым, обслуживается первым.

Для формирования очереди и работы с ней необходимо иметь три переменные типа указатель, первая из которых определяет
начало очереди, вторая — конец очереди, третья — вспомогательная.

Описание компоненты очереди и переменных типа указатель дадим сле-

дующим образом:

type

PComp=^Comp;

Comp=record

D:T;

pNext:PComp

end;

var

pBegin, pEnd, pAux: PComp;

где pBegin — указатель начала очереди, pEnd — указатель конца очереди, pAux — вспомогательный указатель.

Тип Т определяет тип данных компоненты очереди.

ЛИНЕЙНЫЕ СПИСКИ

Виды списков

Линейный односвязный список

Циклический односвязный список

Двусвязный линейный список

Циклический двусвязный список

В стеки или очереди компоненты можно добавлять только в какой — либо один конец структуры данных, это относится и к
извлечению компонент.

Связный (линейный) список является структурой данных, в произвольно выбранное место которого могут включаться
данные, а также изыматься оттуда.

Каждая компонента списка определяется ключом. Обычно ключ — либо число, либо строка символов. Ключ располагается в
поле данных компоненты, он может занимать как отдельное поле записи, так и быть частью поля записи.

Основные отличия связного списка от стека и очереди следующие:

-для чтения доступна любая компонента списка;

-новые компоненты можно добавлять в любое место списка;

-при чтении компонента не удаляется из списка.

Для формирования списка и работы с ним необходимо иметь пять пере-

менных типа указатель, первая из которых определяет начало списка,

вторая — конец списка, остальные- вспомогательные.

Описание компоненты списка и переменных типа указатель дадим сле-

дующим образом:

type

PComp= ^Comp;

Comp= record

D:T;

pNext:PComp

end;

var

pBegin, pEnd, pCKey, pPreComp, pAux: PComp;

где pBegin — указатель начала списка, pEnd — указатель конца списка,

pCKey, pPreComp, pAux — вспомогательные указатели.

Контрольные вопросы

  1. Определение ДСД
  2. Виды ДСД
  3. Стеки
  4. Очереди
  5. Линейные списки

Раздел 5. Объектно-ориентированное программирование

Тема 5.1 Основные принципы объектно-ориентированного
программирования (ООП)

Лекция№27. Базовые понятия ООП. Основные принципы ООП.

План лекции

  1. Концепция ООП
  2. Принципы ООП
  3. Элементы ООП
  4. История

Объе́ктно-ориенти́рованное программи́рование (ООП) — методология программирования, основанная на
представлении программы в виде совокупности объектов, каждый из которых является экземпляром определенного
класса[1], а классы образуют иерархию наследования

Необходимо обратить внимание на следующие важные части этого определения: 1) объектно-ориентированное
программирование использует в качестве основных логических конструктивных элементов объекты, а не
алгоритмы; 2) каждый объект является экземпляром определенного класса; 3) классы
образуют иерархии. Программа считается объектно-ориентированной, только если выполнены все три указанных требования.
В частности, программирование, не использующее наследование, называется не объектно-ориентированным, а
программированием с помощью абстрактных типов данных

Концепция объектно-ориентированного программирования

Концепцию ООП характеризует следующее:

  1. В качестве строительных блоков разрабатываемых приложений используются объекты.
  2. Каждому классу соответствует некоторый объектный тип, представляющий собой совокупность элементов данных и
    методов (для операций над данными), скомпонованных вместе для удобства использования.
  3. Каждый объект – переменная, являющаяся представителем (экземпляром) определённого класса.
  4. Классы связаны друг с другом соотношениями, с помощью которых объекты могут расширяться; при этом описания
    существующих объектов могут многократно использоваться при описании новых объектов.
  5. Представителями класса могут быть представители, как непосредственного класса, так и любого класса предка.

Концепция ООП базируется на трёх основных принципах:

         инкапсуляция;

         полиморфизм;

         наследование.

 Инкапсуляция

Инкапсуляция – объединение данных и действий над ними в одном объектном типе.

 Наследование

Наследование – это способность одного класса использовать характеристики (описание) другого. Наследование
устанавливает между двумя классами отношение «предок – потомок». Предок – это класс, предоставляющий свои
возможности и характеристики (описание) другим классам через механизм наследования. Класс, который использует
характеристики класса посредством наследования, называется потомком. Непосредственный предок, от которого происходит
данный класс, называется родителем.

В Object Pascal используется модель простого наследования, т.е. класс-потомок может иметь только одного родителя,
класс-предок может иметь несколько потомков.

Полиморфизм

Полиморфизм – это возможность определения единого по имени действия (метода в виде процедуры или функции),
применимого ко всем объектам иерархии наследования, т.е. возможность иметь несколько методов с одним и тем же именем
для различных объектов одной иерархии. Это средство для развития объектов в потомках. Оно реализуется тем, что
объект-потомок может добавлять и переопределять методы, т.е. заменять методы предка на новые с теми же именами.

Класс 

Класс является описываемой на языке терминологии исходного кода моделью ещё не существующей сущности (объекта).
Фактически он описывает устройство объекта, являясь своего рода чертежом. Говорят, что объект — это экземпляр класса.
При этом в некоторых исполняющих системах класс также может представляться некоторым объектом при выполнении
программы посредством динамической
идентификации типа данных. Обычно классы разрабатывают таким образом, чтобы их объекты соответствовали
объектам предметной области.

Объект 

Сущность в адресном пространстве вычислительной системы,
появляющаяся при создании экземпляра класса (например, после запуска результатов компиляции исвязывания исходного кода на выполнение)

История

ООП возникло в результате развития идеологии процедурного
программирования, где данные и подпрограммы (процедуры, функции) их обработки формально не связаны. Для
дальнейшего развития объектно-ориентированного программирования часто большое значение имеют понятия события (так
называемое событийно-ориентированное
программирование) и компонента (компонентное
программирование, КОП).

Взаимодействие объектов происходит посредством сообщений. Результатом дальнейшего развития ООП, по-видимому, будет агентно-ориентированое программирование,
где агенты — независимые части кода на уровне выполнения. Взаимодействие агентов происходит посредством
изменения среды, в которой они находятся.

Языковые конструкции, конструктивно не относящиеся непосредственно к объектам, но сопутствующие им для их безопасной
(исключительные ситуации, проверки) и эффективной
работы, инкапсулируются от них в аспекты (в аспектно-ориентированном
программировании). Субъектно-ориентированное
программирование расширяет понятие объекта посредством обеспечения более унифицированного и независимого
взаимодействия объектов. Может являться переходной стадией между ООП и агентным программированием в части
самостоятельного их взаимодействия.

Первым языком программирования, в котором были предложены основные понятия, впоследствии сложившиеся в парадигму,
была Симула, но термин «объектная ориентированность» не
использовался в контексте использования этого языка. Взгляд на программирование «под новым углом» (отличным от
процедурного) предложили Алан Кэй и Дэн Ингаллс в
языке Smalltalk. Здесь понятие класса стало основообразующей
идеей для всех остальных конструкций языка (то есть класс в Смолтоке является примитивом, посредством которого
описаны более сложные конструкции).

Наиболее распространённые в промышленности языки (С++, Delphi, C#, Java и др.) воплощают объектную модель Симулы.
Примерами языков, опирающихся на модель Смолтока, являются Python, Ruby.

Контрольные вопросы

  1. Концепция ООП
  2. Принципы ООП
  3. Элементы ООП

4. История

Тема 5.1

Лекция№28. Классы объектов. Компоненты и их свойства.

План лекции

  1. Определение класса
  2. Объявление класса
  3. Поля
  4. Свойства
  5. Палитра компонентов

Класс – это структура языка, включающая, помимо описания данных, описание процедур и функций, которые могут
быть выполнены над представителем класса – объектом.

Переменные в зависимости от предназначения именуются полями или свойствами. Процедуры и функции класса – методами.
Соответствующий классу тип называется объектным типом.

 Пример объявления простого класса:

type

TPerson = class (TObject)

private

fname: string[15]; faddress: string[35];

public

procedure Show;

end;

TPerson – это имя класса, fname и faddress – имена полей, show – имя метода.

Согласно принятому в Delphi соглашению, имена полей должны начинаться с буквы f (от слова field – поле).

Описание класса помещают в программе в раздел описания типов (type).

Тексты на Object Pascal представляются в виде модулей (pas – файлов). Классы могут быть объявлены в секции интерфейса
(interface) или в секции реализации (implementation) модуля. Определение классов внутри подпрограмм и других блоков
не допускается.

Объект или экземпляр объекта – это конкретный экземпляр, созданный в соответствии с его объявлением с помощью
класса.

Объект может содержать другой объект. Например, объект формы может содержать объект кнопки.

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

Переменная типа класс – это переменная объектного типа и называется экземпляром класса или объектом.

 Объекты как представители класса объявляются в программе в разделе var, например:

Var student: TPerson; professor: TPerson;

 Поля

Поля – это данные, уникальные для каждого экземпляра класса. Они предназначены для хранения данных во время
работы экземпляра класса (объекта). Поле объявляется как обычная переменная и может быть любого типа. В описании
класса поля должны предшествовать методам и свойствам.

При создании новых классов на базе ранее созданных класс-потомок наследует все поля класса-родителя. Удаление и
переопределение полей невозможно. Допускается добавление новых полей.

Поля и методы у разных объектов одного типа одни и те же. Методы – это процедуры и функции, определённые внутри
класса и предназначенные для операций над полями и свойствами.

В Delphi у всех стандартных классов все поля недоступны и заменены базирующимися на них свойствами. Свойства
компонентов Delphi определяют их внешний вид и поведение.

Свойства

Свойства – это высокоуровневые атрибуты компонентов класса.

В объектах Delphi пользователь полностью отгорожен от полей объекта с помощью свойств. Внешне свойства напоминают
поля, но внутри содержат методы, обеспечивающие доступ к свойствам. При каждом обращении к такому методу выполняются
соответствующие действия, т.е. к свойствам класса доступ возможен только через методы.

Каждому свойству соответствует поле, содержащее значение свойства, и два метода, обеспечивающих доступ к значению
поля.

Методы

Метод – это подпрограмма (процедура или функция), которая определена как элемент класса. Описание метода
аналогично описанию обычной подпрограммы модуля. Внутри одного класса можно объявить столько методов, сколько надо.

 Компоненты и палитра компонентов

Палитра компонентов – это каталог, состоящий из визуальных и невизуальных компонентов. Компонент –
это структурная единица Delphi. Основу ООП в Delphi составляет набор компонентов, который позволяет Delphi с помощью
компонентов использовать множество возможностей, присущих Windows.

Окно формы – это окно Windows.. Сама форма также является компонентом. Новая форма, которая создаётся при загрузке
Delphi или при создании нового проекта, является главной формой приложения.

Палитра компонентов расположена в правой части главного окна и имеет вид многостраничного блокнота, где на каждой
странице размещён набор пиктограмм её компонентов. Активизировать группу компонентов требуемой страницы надо щелчком
мыши на её закладке.

Компоненты Delphi

 Библиотека визуальных компонентов (Visual Component Library — VCL) Delphi содержит множество предопределенных типов
компонентов, из которых пользователь может строить свою прикладную программу. Палитра компонентов расположена справа
в полосе инструментальных панелей интегрированной среды разработки Delphi.

 Поскольку число страниц в палитре велико и не все закладки видны на экране одновременно, в правой части палитры
компонентов имеются две кнопки со стрелками, направленными влево и вправо. Эти кнопки позволяют перемещать
отображаемую на экране часть палитры.

Имена компонентов, соответствующих той или иной пиктограмме, можно узнать из всплывающей подсказки, появляющейся,
если задержать над этой пиктограммой курсор мыши. Если выбрать в палитре компонент и нажать клавишу F1, то
отобразится справка по типу данного компонента.

 Имена на ярлычках выглядят, например, так: MainMenuButton и т.д. Однако, в
Delphi все имена классов в действительности начинаются с символа «Т», например, TMainMenuTButton.

 Все компоненты системы Delphi можно разделить на:

        визуальные, т.е. те, которые будут представлены на форме во время выполнения приложения в том же виде, что и
при разработке приложения (например, кнопки, метки и пр.);

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

Контрольные вопросы

  1. Определение класса
  2. Объявление класса
  3. Поля
  4. Свойства
  5. Палитра компонентов

Тема 5.2 Интегрированная среда разработчика

Лекция№29. Интерфейс среды разработчика: основные окна,
интегрированной среде

План лекции

  1. Определение
  2. Преимущества интегрированной среды

3. Окна интегрированной среды

Интерфейс (interface) – это средства взаимодействия, средства связи, сопряжения, согласования. Этим
термином в информатике обозначают довольно широкий круг понятий:

  • физический (аппаратный) интерфейс (на уровне электронных компонентов),
  • интерфейс программиста (комплекс правил и соглашений о стыковке программных модулей),
  • интерфейс пользователя как набор средств диалога, взаимодействия программы (машины) с человеком.

Интегрированная среда разработки — это совокупность программных средств, поддерживающая все этапы разработки
программного обеспечения от написания исходного текста программы до ее компиляции и отладки, и обеспечивающая
простое и быстрое взаимодействие с другими инструментальными средствами (программным
отладчиком-симулятором, внутрисхемным
эмулятором, эмулятором
ПЗУ и программатором).

.

При традиционном подходе, начальный этап написания программы строится следующим образом:

Исходный текст набирается при помощи какого-либо текстового редактора. По завершении набора, работа с текстовым
редактором прекращается и запускается кросс компилятор. Как правило, вновь написанная программа содержит
синтаксические ошибки, и компилятор сообщает о них на консоль оператора.

Вновь запускается текстовый редактор, и оператор должен найти и устранить выявленные ошибки, при этом сообщения о
характере ошибок выведенные компилятором уже не видны, так как экран занят текстовым редактором.

И этот цикл может повторяться не один раз. Если программа имеет большой объем, собирается из различных частей, и
подвергается длительному редактированию или модернизации, то даже этот начальный этап может потребовать много сил и
времени. После этого наступает этап отладки программы и к редактору с компилятором добавляется эмулятор или
симулятор, за работой которого хотелось бы следить прямо по тексту программы в текстовом редакторе.

Избежать большого объема однообразных действий и тем самым существенно повысить эффективность процесса разработки и
отладки позволяют т.н. интегрированные среды (оболочки) разработки (Integrated Development Environment, IDE).

Работа в интегрированной среде дает программисту:

Возможность использования встроенного многофайлового текстового редактора, специально ориентированного на работу с
исходными текстами программ;

Диагностика выявленных при компиляции ошибок, и исходный текст программы, доступный редактированию, выводятся
одновременно в многооконном режиме;

Возможность организации и ведения параллельной работы над несколькими проектами. Менеджер проектов позволяет
использовать любой проект в качестве шаблона для вновь создаваемого проекта;

Перекомпиляции подвергаются только редактировавшиеся модули;

Возможность загрузки отлаживаемой программы в имеющиеся средства отладки, и работы с ними без выхода из оболочки;

Возможность подключения к оболочке практически любых программных средств.

В последнее время, функции интегрированных сред разработки становятся стандартной принадлежностью программных
интерфейсов эмуляторов и отладчиков-симуляторов.

Окно Конструктора формы первоначально находится в центре экрана и имеет заголовок В нем выполняется проектирование
формы, для чего на форму из Палитры компонентов помещаются необходимые компоненты. При этом проектирование
заключается в визуальном конструировании формы, а работа разработчика похожа на работу в среде простого графического
редактора. Сам Конструктор формы во время ее проектирования остается «за кадром», и разработчик имеет дело
с самой формой, поэтому часто окно Конструктора также называют окном формы или просто формой.

Окно Редактора кода (заголовок Unitl.pas) после запуска системы программирования находится под окном Конструктора
формы и почти полностью перекрывается им. Редактор кода (Редактор) представляет собой обычный текстовый редактор, с
помощью которого можно редактировать текст модуля и другие текстовые файлы приложения, например, файл проекта.
Каждый редактируемый файл находится в окне Редактора на отдельной странице, доступ к которой осуществляется щелчком
на соответствующем ярлычке. Первоначально в окне Редактора кода на странице Code содержится одна закладка исходного
кода модуля формы разрабатываемого приложения.

Переключение между окнами Конструктора формы и Редактора кода удобно выполнять с помощью клавиши <F12>.

Окно Проводника кода (Exploring Unitl.pas) пристыковано слева от окна Редактора кода. В нем в виде дерева
отображаются все объекты модуля формы, например, переменные и процедуры (рис. 1.2). В окне Проводника кода можно
удобно просматривать объекты приложения и быстро переходить к нужным объектам, что особенно важно для больших
модулей. Вызов окна Проводника кода выполняется по команде Code Explorer (Проводник кода) меню View (Вид).

Окно Инспектора объектов находится в левой части экрана и отображает свойства и события объектов для текущей формы
Formi. Его можно вызвать на экран командой View | Object Inspector (Просмотр | Инспектор объектов) или нажатием
клавиши <F11>.

Окно Инспектора объектов имеет две страницы: Properties (Свойства) и Events (События).

Страница Properties отображает информацию о текущем (выбранном) компоненте в окне Конструктора формы и при
проектировании формы позволяет удобно изменять многие свойства компонентов.

Страница Events определяет процедуру, которую компонент должен выполнить при возникновении указанного события. Если
для какого- либо события существует процедура, то в процессе выполнения приложения при возникновении этого события
процедура вызывается автоматически. Такие процедуры служат для обработки соответствующих событий, поэтому их
называют процедурами-обработчиками или обработчиками. Отметим, что события также являются свойствами, которые
указывают на свои обработчики.

В конкретный момент времени Инспектор объектов отображает свойства и события текущего (выбранного) компонента, имя и
тип которого отображаются в списке под заголовком окна Инспектор объектов. Компонент, расположенный на форме, можно
выбрать щелчком мыши на нем или выбором в списке Инспектора объектов. Каждый компонент имеет свой набор свойств и
событий, определяющих его особенности.

Начиная с 4-й версии, Delphi поддерживает технологию Dock-окон, которые могут стыковаться (соединяться) друг с другом
с помощью мыши. Стыкующимися окнами являются инструментальные (не диалоговые) окна интегрированной среды разработки,
в том числе окна Инспектора объектов и Проводника кода. Со стыкованными окнами удобнее выполнять такие операции, как
перемещение по экрану или изменение размеров.

Для соединения двух окон следует с помощью мыши поместить одно из них на другое, и после изменения вида рамки
перемещаемого окна отпустить его, после чего это окно автоматически пристыкуется сбоку от второго окна. Разделение
окон выполняется перемещением пристыкованного окна за двойную линию, размещенную под общим заголовком. После
соединения окна представляют собой одно общее окно, разделенное на несколько частей. При стыковке/расстыковке окно
изменяет свое название. Так, окно Проводника кода, состыкованное с окном Редактором кода, имеет общее с ним
название, например, Unitl.pas, в то время как при отстыковке название изменяется на Exploring Unitl.pas. Окна
Инспектора объектов и Обозревателя дерева объектов при стыковке объединяют свои названия (через запятую указываются
названия каждого

Скрытое окно вызывается на экран командой пункта View (Просмотр) главного меню. Например, окно Проводника кода
выводится на экран командой View | Code Explorer (Просмотр | Проводник кода).

Контрольные вопросы

  1. Определение
  2. Преимущества интегрированной среды

3. Окна интегрированной среды

Тема 5.3 Этапы разработки приложения

Лекция№30. Проектирование, тестирование и отладка приложения.

План лекции

1.Определение

2. Создание приложения в среде Delphi

3. Создание приложения в среде Visual Basic

Процесс разработки новых приложений состоит из 4-х основных этапов:
1. Проектирование. Определяются цели и
задачи, способы их решения, а также определяется структура данных и язык программирования, на котором будет написано
приложение.
2. Создание интерфейса. В программную среду разработки вводятся необходимые управляющие элементы:
кнопки, текстовые поля, флажки, переключатели и другие элементы.
3. Отладка. Все управляющие элементы
связываются программным кодом и путем ввода конкретных значений происходит проверка работоспособности кода и
отлавливание возможных ошибок. Логические ошибки самые коварные в этом плане. Этот этап по времени самый длительный.
4.
Заключительный этап. Идет компиляция кода и создание дистрибутива. Компиляция — процесс перевода программного кода в
машинный язык, понятный каждому компьютеру. Здесь же идет подключение необходимых программных библиотек для полной
работоспособности приложения. На выходе получаем законченный продукт — файл с расширением «.ехе».

Создание приложения в среде Delphi можно условно разделить на несколько этапов:

1. Создание графического интерфейса будущего приложения

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

2. Задание значений свойств объектов графического интерфейса

С помощью окна «Свойства объекта» задаются значения свойств управляющих элементов, помещенных ранее на форму.

3. Создание и редактирование программного кода

Для создания заготовки событийной процедуры необходимо осуществить двойной щелчок мышью по управляющему элементу. В
окне «Редактор кода» появится заготовка событийной процедуры, имя которой состоит из двух частей: имени формы,
содержащий управляющий элемент, и имени объекта и имени события (например,TForm1.Button1Click). Затем в окне
«Редактор кода» производится ввод и редактирование программного кода процедуры.

4. Сохранение проекта

Т.к. проект включает в себя несколько файлов, рекомендуется для каждого проекта создать отдельную папку на диске.
Сохранение проекта производится с помощью меню File:

– Сначала необходимо сохранить форму и связанный с ней программный модуль (файл с расширением pas) с помощью команды
Save As.… По умолчанию для файла формы предлагается имя Unit1.pas.

– Далее необходимо сохранить файл главного модуля, который содержит описание проекта (файл с расширением dpr) с
помощью команды Save Project As…

– В процессе сохранения в папку проекта записываются вспомогательные файлы: файл с расширением res, описывающий
ресурсы; файл с расширением dfm, описывающий форму, и некоторые другие файлы.

5. Компиляция проекта в приложение

Сохраненный проект может выполняться только в самой системе программирования Delphi. Для того чтобы
преобразовать проект в приложение, которое может выполняться непосредственно в среде операционной системы,
необходимо сохранить проект в исполнимом файле (типа exe). Для компиляции проекта в исполнимый файл используется
команда [Project-Compile].

Среда разработки Delphi ориентирована на создание самых разнообразных приложений баз данных. Это и небольшие
локальные программы, и многоуровневые распределенные системы, использующие новейшие технологии. Но, несмотря на
сложность приложения, в его основе всегда лежит базовый механизм обеспечения доступа к данным. Он создается триадой
компонентов:

Компонент Набора данных (TTable, TQuery, TStoredProc);

компонент TDataSource;

один или несколько компонентов отображения данных..

В целом, благодаря компонентному подходу, разработка простого приложения баз данных оказывается ничуть не сложнее
создания обычного приложения. Достаточно разместить на форме несколько компонентов, настроить их свойства и вы
получаете работающее приложение баз данных.

.

 Интегрированная среда разработки Visual Basic

Visual Basic — это система программирования, предназначенная для написания программ, работающих под
управлением операционной системы Windows. Используя Visual Basic, можно разрабатывать очень сложные приложения
практически для любой области современных компьютерных технологий: бизнес-приложения, игры, мультимедиа, базы данных

В Visual Basic реализована модель объектно-ориентированного событийно — управляемого программирования.

Программы, работающие в среде Windows, называются приложениями. На этапе разработки приложения в среде Visual Basic
называются проектами. Проект содержит набор взаимодействующих форм, программных модулей, модуль проекта и
вспомогательные файлы.

Форма – основной элемент внешнего интерфейса проекта, аналог окна Windows. Она имеет строку заголовка с кнопками
управления и системным меню, а также возможности управления мышью. Все это не надо программировать, форма,
включённая в проект, обладает этими свойствами. Обычно в проекте бывает несколько форм.

. Обычно в проекте один программный модуль, он хранится в файле с расширением bas.

.

Этапы разработки приложения в среде Visual Basic

Создание интерфейса (этап проектирования)

На этом этапе необходимо сначала продумать ожидаемый алгоритм работы пользователя с будущим приложением, возможные
события при работе приложения, порядок их возникновения. Кроме того, надо выявить будущих пользователей, максимально
точно описать предъявляемые ими требования к проекту. Тогда можно приступать непосредственно к проектированию, но и
здесь вопросов много: какие меню понадобятся, какого размера окно требуется для приложения, сколько всего будет
окон, должен ли пользователь иметь возможность изменять размеры окна, какие элементы управления рационально
использовать для решения задачи и как их разместить максимально удобно для пользователя?… В результате на форму с
помощью мыши помещаются те или иные управляющие элементы, а в окне Properties задаются их свойства. После того как
разработка интерфейса завершена, кнопки управления, поля и другие элементы, размещенные на форме, автоматически
будут распознавать действия пользователя, такие, например, как движение мыши или щелчок ее кнопки.

Создание программного кода

Теперь начинается процесс, похожий на традиционное программирование: создание программного кода для активизации
визуального интерфейса, подготовленного на первом этапе. Смысл состоит в том, что объекты Visual Basic только
распознают события типа щелчков мыши, а то, как они реагируют на эти события, зависит от программного кода,
написанного программистом. При этом, алгоритмическая часть Visual Basic практически ничем не отличается от
традиционного языка Basic.

Для создания или редактирования кода надо вызвать окно Редактора кода. Окно используется для размещения, просмотра и
редактирования всех текстовых элементов программы — описания констант, переменных, массивов, процедур и пр.

Отладка, тестирование, компиляция

Для выполнения отладки (проверки правильности функционирования проекта и исправления найденных ошибок) в Visual Basic
существует набор специальных инструментов, в первую очередь команды меню Debug. Отладка и тестирование – непременные
этапы работы над любым проектом, особенно большим и сложным. Проект может функционировать лишь в среде Visual Basic.
После его создания, отладки и тестирования выполняется компиляция: создается исполняемый модуль с расширением exe,
независимый от среды Visual Basic. Так получается готовое приложение.

Контрольные вопросы

. 1.Определение

2. Создание приложения в среде Delphi

3. Создание приложения в среде Visual Basic

Тема 5.4 Иерархия классов

Лекция№31. Классы объектно-ориентированного языка
программирования.

План лекции

1.Определение класса ООП

2.Виды классов

3. Отношения между классами

Иерархия классов в информатике означает
классификацию объектных типов, рассматривая объекты как реализацию классов (класс похож на заготовку, а
объект — это то, что строится на основе этой заготовки) и связывая различные классы отношениями наподобие
«наследует», «расширяет», «является его абстракцией», «определение интерфейса».

Класс — разновидность абстрактного
типа данных в объектно-ориентированном
программировании (ООП), характеризуемый способом своего построения. Класс определяет одновременно как интерфейс,
так и реализацию для всех своих экземпляров, а вызов метода-конструктора обязателен.

В объектно-ориентированной программе с применением классов каждый объект является «экземпляром» некоторого
конкретного класса, и других объектов не предусмотрено. То есть «экземпляр класса» в данном случае означает
не «пример некоторого класса» или «отдельно взятый класс», а «объект, типом которого является какой-то класс». В
современных объектно-ориентированных
языках программирования (в том числе в php, Java, C++, Oberon, Python, Ruby, Smalltalk, Object Pascal) создание класса сводится к написанию
некоторой структуры, содержащей набор полей и методов (среди последних особую роль играют конструкторы, деструкторы,
финализаторы). Практически класс может пониматься как некий шаблон, по которому создаются объекты — экземпляры
данного класса. Все экземпляры одного класса созданы по одному шаблону, поэтому имеют один и тот же набор полей и
методов.

Например, абстрактный тип данных «строка текста» может быть оформлен в виде класса, и тогда все строки текста в
программе будут являться объектами — экземплярами класса «строка текста».

. Сам класс в итоге определяется как список своих членов, а именно полей (свойств) и методов/функций/процедур. В зависимости от
языка программирования к этому списку могут добавиться константы, атрибуты и внешние определения.

Как и структуры, классы могут задавать поля — то есть переменные, принадлежащие либо непосредственно самому классу
(статические), либо экземплярам класса (обычные).

В ООП при использовании классов весь исполняемый код программы (алгоритмы) будет оформляться в виде так называемых
«методов», «функций» или «процедур», что соответствует обычному структурному программированию, однако
теперь они могут (а во многих языках обязаны) принадлежать тому или иному классу.

Как и поля, код в виде методов/функций/процедур, принадлежащих классу, может быть отнесен либо к самому классу, либо
к экземплярам класса. Метод, принадлежащий классу и соотнесенный с классом (статический метод) может быть вызван сам
по себе и имеет доступ к статическим переменным класса. Метод, соотнесенный с экземпляром класса (обычный метод),
может быть вызван только у самого объекта, и имеет доступ как к статическим полям класса, так и к обычным полям
конкретного объекта (при вызове этот объект передастся скрытым параметром метода). Объектно-ориентированный подход
за время своего развития накопил множество рекомендаций (паттернов) по созданию классов и иерархий классов.

Виды классов

1.Базовый (родительский) класс (суперкласс) —
 класс, на основе которого создаются другие
классы. Классы, полученные на основе суперкласса, называются дочерними классамипроизводными
классами
 или подклассами.

Суперкласс позволяет создавать обобщенный интерфейс, заключающий в себе настраиваемую функциональность за счет
использования виртуальных функций.

Механизм суперклассов широко используется в объектно-ориентированном
программировании благодаря возможности
повторного использования, что достигается благодаря общим возможностям, инкапсулированным в модульные объекты.

Базовый класс — это класс, не имеющий суперкласса, и поэтому находится в основании дерева подклассов.
Большинство объектно-ориентированных систем программирования обеспечивает библиотеку классов, на основании которых
разработчик создает свои собственные.

В случае, когда язык или библиотека имеют лишь один базовый класс, то он именуется высшим типом.

В языке UML класс может иметь собственный набор корневых (root)
свойств для обозначения, что это именно базовый класс.

В C++-стиле (который используется в C# и других языках) термин «базовый класс» используется вместо термина
«суперкласс».

Языки программирования могут поддерживать абстрактные и конкретные суперклассы.

В ряде языков программирования все классы явно или неявно наследуются от некого базового класса. Smalltalk был одним из первых языков, в которых
использовалась эта концепция. К таким языкам Java (java.lang.Object), C# (System.Object), Delphi (TObject).

2. Производный класс (наследник, потомок)- это класс, наследующий некоторые (или все)
свойства от своего суперкласса.

Подклассы и суперклассы часто обозначаются как производные или порождённые (derived)
и базовые (base) классы соответственно, причём эти термины закреплены создателем C++ — Бьёрном Страуструпом, который нашёл эти термины
более интуитивно понимаемыми по сравнению с традиционной номенклатурой названий.

3. Абстрактный класс в объектно-ориентированном
программировании — базовый класс, который
не предполагает создания экземпляров. Абстрактные классы реализуют на практике один из принципов ООП — полиморфизм. Абстрактный класс можно
рассматривать в качестве интерфейса к
семейству классов, порождённому им, но, в отличие от классического интерфейса, абстрактный класс может иметь
определённые методы, а также свойства.

Абстрактные методы часто являются и виртуальными, в
связи с чем понятия «абстрактный» и «виртуальный» иногда путают.

В Delphi может быть объявлен абстрактный
класс с абстрактными методами:

TAbstractClass = class

procedure NonAbstractProcedure;

procedure AbstractProcedure; abstract;

end;

Для такого класса может быть создан объект, но обращение к методу AbstractProcedure этого объекта во время выполнения
вызовет ошибку.

.Интерфе́йс (от лат. inter — «между»,
и face — «поверхность») — синтаксическая конструкция
в коде программы, используемая для специфицирования услуг,
предоставляемых классом или компонентом.

Интерфейсы позволяют наладить множественное
наследование объектов и в то же время решить проблему ромбовидного наследования. В языке C++ она
решается через наследование классов с использованием ключевого слова virtual.

Отношения между классами

  • Наследование (Генерализация) —
    объекты дочернего класса наследуют все свойства родительского класса.
  • Ассоциация — объекты классов вступают во взаимодействие между собой.
  • Агрегация — объекты одного класса
    входят в объекты другого.
  • Композиция — объекты одного класса входят в объекты другого и зависят друг от друга по времени жизни.
  • Класс-Метакласс — отношение, при котором экземплярами
    одного класса являются другие классы.

Контрольные вопросы

1.Определение класса ООП

2.Виды классов

3. Отношения между классами

Лекция№32. Наследование. Перегрузка методов

План лекции

  1. Определение наследования
  2. Типы наследования
  3. Единый базовый класс
  4. Перегрузка (методов

Наследование — механизм языка, позволяющий описать новый класс на основе уже существующего
(родительского, базового) класса или интерфейса. Потомок может добавить собственные методы и свойства, а также
пользоваться родительскими методами и свойствами. Позволяет строить иерархии. Является одним из основных
принципов объектно-ориентированного
программирования.

Наследование обеспечивает в ООП полиморфизм и абстракцию данных.

Типы наследования

Простое наследование

Класс, от которого произошло наследование,
называется базовым или родительским (англ. base class). Классы, которые
произошли от базового, называютсяпотомкаминаследниками или производными классами (англ. derived class).

В некоторых языках используются абстрактные
классы. Абстрактный класс — это класс, содержащий хотя бы один абстрактный метод, он описан в программе, имеетполя, методы и не может использоваться для
непосредственного создания объекта. То есть от
абстрактного класса можно только наследовать.

Множественное наследование

При множественном наследовании у класса может быть более одного предка. В этом случае класс наследует методы всех предков. Достоинства такого
подхода в большей гибкости. Множественное наследование реализовано в C++. Из других языков, предоставляющих эту возможность,
можно отметить Python и Eiffel. Множественное наследование поддерживается в языке UML.

Множественное наследование — потенциальный источник ошибок, которые могут возникнуть из-за наличия одинаковых имен
методов в предках

Большинство современных объектно-ориентированных языков программирования (C#, Java, Delphi и др.) поддерживают возможность
одновременно наследоваться от класса-предка и реализовать методы нескольких интерфейсов одним и тем же классом. Этот
механизм позволяет во многом заменить множественное наследование — методы интерфейсов необходимо переопределять
явно, что исключает ошибки при наследовании функциональности одинаковых методов различных классов-предков.

Единый базовый класс

В ряде языков программирования все классы явно или неявно наследуются от некого базового класса. Smalltalk был одним из первых языков, в которых
использовалась эта концепция. К таким языкам Java (java.lang.Object), C# (System.Object), Delphi (TObject).

Абсолютно все классы в Delphi являются потомками класса TObject. Если
класс-предок не указан, то подразумевается, что новый класс является прямым потомком класса TObject.

Множественное наследование в Delphi частично поддерживается за счёт использования классов-помощников (Сlass
Helpers).

Python

Python поддерживает как одиночное, так и множественное
наследование.

Перегрузка методов (процедур и функций)

 — возможность использования одноимённых подпрограмм: процедур или функций в языках программирования.

Перегружаемые функции имеют одинаковое имя, но разное количество или типы аргументов. Это разновидность статического полиморфизма, при которой вопрос о том, какую
из функций вызвать, решается по списку её аргументов. Этот подход применяется в статически типизированных языках, которые
проверяют типы аргументов при вызове функции. Перегруженная функция фактически представляет собой несколько разных
функций, и выбор подходящей происходит на этапе компиляции. Перегрузку функций не следует путать с формами
полиморфизма, где правильный метод выбирается во время выполнения, например, посредством виртуальных функций, а не
статически.

Метод — это не что иное, как набор выполняемых инструкций. Методы также определяют интерфейс данных объекта. Ещё они
помогают обеспечивать структурный подход к программированию. Программа может быть разделена на различные методы,
которые является только логической группировкой связанных выполняемых инструкций. Методы помогают при отладке
программы, поскольку отладчик может непосредственно перейти к специфическому методу и сделать необходимые
исправления. Если программа размером в 1 КБ не содержит ни одного метода, то отладить такую программу будет
достаточно трудно. 

Обратите внимание: Методы также называются функциями. 

Преимущества
методов: 
Есть два типа методов, а именно перегруженные методы и переопределённые методы. 

Перегруженные
методы — это методы, которые находятся в том же самом классе и имеют то же самое имя, но различные списки
параметров. Переопределённые методы — это методы, которые находятся в суперклассе так же как и в подклассе. 

Обратите внимание: Перегруженные методы постоянно находятся в одном классе. Они имеют одну и ту же область видимости
с классом. 

Перегрузка ценна тем, что она позволяет обращаться к схожим методам по общему имени. Таким образом, имя abs
представляет общее действие, которое должно выполняться. Выбор нужной конкретной версии для данной ситуации — задача
компилятора. Программисту нужно помнить только об общем выполняемом действии. Полиморфизм позволяет свести несколько
имен к одному. Хотя приведенный пример весьма прост, если эту концепцию расширить, легко убедиться в том, что
перегрузка может облегчить выполнение более сложных задач.

При перегрузке метода каждая версия этого метода может выполнять любые необходимые действия. Не существует никакого
правила, в соответствии с которым перегруженные методы должны быть связаны между собой. Однако со стилистической
точки зрения перегрузка методов предполагает определенную связь. Таким образом, хотя одно и то же имя можно
использовать для перегрузки несвязанных методов, поступать так не следует. Например, имя sqr можно было бы
использовать для создания методов, которые возвращают квадрат целочисленного значения и квадратный корень значения с
плавающей точкой. Но эти две операции принципиально различны. Такое применение перегрузки методов противоречит ее
исходному назначению. В частности, следует перегружать только тесно связанные операции.

Контрольные вопросы

  1. Определение наследования
  2. Типы наследования
  3. Единый базовый класс
  4. Перегрузка (методов

Тема 5.5. Визуальное событийно-управляемое программирование

Лекция№33. Основные компоненты интегрированной среды разработки

План лекции

1.Преимущества Visual Basic

2. Элементы среды разработчика

.

Visual Basic — это система программирования, предназначенная для написания программ, работающих под
управлением операционной системы Windows. Используя Visual Basic, можно разрабатывать очень сложные приложения
практически для любой области современных компьютерных технологий: бизнес-приложения, игры, мультимедиа, базы
данных.

Причины столь широкой популярности и у Visual Basic, и у системы Windows примерно одинаковы: фирма Microsoft сумела
такую сложную технологию, как написание компьютерных программ, сделать доступной широкому кругу пользователей путем
применения графического интерфейса..

Одним из типов объектов Visual Basic являются элементы управления — это элементы, которые используются при разработке
пользовательского интерфейса. С их помощью можно дополнять программы новыми функциями, не вникая при этом в суть их
работыТаким образом, языки визуального программирования обладают неоспоримым преимуществом — можно
сконцентрироваться на том, что вы хотите получить от программы, а не на том, как это все запрограммировать.

Одним из основных преимуществ языка Visual Basic является возможность очень быстрого создания работоспособных
приложений. С появлением версии Visual Basic 6.0 сбылась мечта программиста — простые приложения можно создавать,
практически не прибегая к написанию программного кода, а в сложных приложениях рутинный процесс его создания сведен
к минимуму. Мастера, включенные в состав Visual Basic, дают возможность быстро создавать прототипы приложений,
готовых для обсуждения и согласования с заказчиком. Данная реализация языка ставит его практически в один ряд с
такими средствами разработки, как Visual C++, Delphi и другими.

Простота и мощность языка Visual Basic позволили сделать его встроенным языком для приложений Microsoft Office.
Многие независимые разработчики, например, известная своими программами в области бухгалтерского учета фирма «1C»,
приобретают лицензии на использование языка Visual Basic в качестве внутреннего языка своих приложений.

Фирма Microsoft интегрировала также специальную версию Visual Basic, известную под именем Visual Basic for
Application (VBA) во все компоненты пакета Microsoft Office, Microsoft Project и некоторые другие программы. Кроме
того, фирма Microsoft продала лицензию на VBA очень многим фирмам — производителям программного обеспечения. Поэтому
в настоящее время Basic уже не считается учебным языком — знание Visual Basic и его диалектов (VBA, VBScript)
становится необходимостью для современного программиста любого уровня

Среда Visual Basic является интегрированной: она предоставляет разработчику широкие возможности конструирования
графического интерфейса приложения, редактирования методов и свойств объектов, отладки, тестирования и выполнения
проекта.

Основными элементами среды являются:

А) Главное окно среды напоминает окна Windows: есть строка заголовка, главное меню и панель инструментов.

Заголовок состоит из названия системы программирования Microsoft Visual Basic, левее этих слов расположено название
проекта — Project1. Это название Visual Basic присвоил автоматически, его можно заменить каким-либо более
осмысленным. В правой части Строка меню и панель инструментов во многом совпадают с меню и панелью Windows, однако,
в них имеются меню и инструменты, которые обеспечивают доступ к специальным средствам Visual Basic.

Строка меню состоит из заголовков меню, которые содержат все команды, необходимые при работе с Visual Basic. Меню
File, View, Edit, Window и Help являются характерными для Windows и приложений Windows, но имеют ряд
особенностей.

Б) Окно конструктора форм: В серединной части экрана расположено окно проектов, озаглавленное Project1 — Form1
(Form). Оно является основным во время создания интерфейса будущего приложения. Внутри этого окна размещено окно
дизайнера (конструктора) форм, чаще его называют просто окном форм. Его название Form1, автоматически присваивается
Visual Basic, и должно быть впоследствии изменено. На этапе конструирования проекта на поверхности окна форм
размещают необходимое количество объектов, предназначенных для управления приложением. Поверхность окна форм в
режиме конструирования покрыта точками. Эти точки являются узлами координатной сетки и служат для облегчения
размещения объектов на форме.

В) Панель элементов (ToolBox): В левой части экрана вертикально расположена панель или палитра объектов (элементов).
Она содержит набор специальных инструментов — графических объектов, которые можно размещать в окне форм.

Г) Окно Свойства объекта (Properties): используется, чтобы задать свойства формы и размещенных на ней объектов на
этапе проектирования. Это окно содержит перечень тех свойств объекта, которые пользователь может изменить. Значения
свойств можно изменять непосредственно в окне Properties. Способы изменения свойств объекта:

в правое поле можно ввести значение свойства. Свойство будет изменено, если новое значение допустимо;

значение свойства можно выбрать из предложенного списка, нажав в правом поле кнопку с треугольником;

щелчок по кнопке с многоточием в правом поле вызовет стандартное диалоговое окно Windows, позволяющее выбрать
допустимое значение свойства.

Д) Окно Проводник проекта (Project Explorer): позволяет анализировать структуру проекта и его
состав. Приложение Visual Basic на этапе разработки состоит из нескольких файлов, которые все вместе составляют
проект.. Окно проводника содержит три кнопки — View Code — показать окно кодов, View Object — показать окно форм и
Toggle Folders — открыть/закрыть папку, содержащую список объектов.

Е) Еще одно окно — Code — окно Редактора кода в исходном состоянии среды не видно. Оно предназначено для создания и
редактирования кода программы и вызывается на экран по мере необходимости.

Контрольные вопросы

1.Преимущества Visual Basic

2. Элементы среды разработчика

Тема 5.5.

Лекция№34. События компонентов Процедуры, определенные
пользователем.

План лекции

  1. Интерфейсные объекты
  2. Графический интерфейс
  3. Событийная процедура

Рассмотрим простую и естественную модель событийно-управляемого и визуального программирования, характерную для языка
и среды Visual С++. В этой модели у приложения три составляющие: визуальная, системная и обработчик событий.
Визуальная составляющая задает образ на экране, с которым будет работать пользователь. Она, как правило,
разрабатывается визуальным инструментарием, позволяющим программисту создавать из элементов нужный образ на экране.
Эти элементы являются объектами со своими свойствами и поведение.

Визуальная составляющая определяет интерфейс пользователя. Такие элементы интерфейса, как кнопки, окна
редактирования, окна списков, называют элементами управления (controls). Эти и другие элементы интерфейса
стандартизированы в стандарте пользовательского интерфейса CUA (Common User Access) в рамках общего стандарта SSA
(system Application Architecture) фирмы IBM. Поэтому в разных средах разработки (Visual Basic, Visual C++,
Delphi и др.) визуальный инструментарий содержит одни и те же элементы интерфейса. Такие же элементы интерфейса
содержат разные приложения.

Элементы управления являются объектами, свойства и поведение которых определяется их переменными и методами. Они
относятся к интерфейсным объектам.

Пользователь — это возмутитель спокойствия в мире объектов приложения. Он «нажимает» на кнопки, выбирает
элементы списков, печатает тексты в окнах редактирования. Каждому его действию соответствует
некоторое событие. Системная составляющая приложения, которая включает в себя средства операционной системы
и средства среды программирования, определяет тип и параметры события и формирует сообщение объекту, с которым
связано событие. Иначе говоря, системная составляющая находит нужный объект и запускает функцию-обработчик сообщения
— соответствующий метод этого объекта. Таким образом, пользователь может взаимодействовать с элементами визуальной
составляющей, а само взаимодействие обеспечивается системной составляющей.

Обработчики событий и связанных с ними сообщений составляют третий компонент приложения. Когда пользователь
действует на элемент управления, происходит событие, распознаваемое системной составляющей, которая вызывает
обработчик события. В работе системной составляющей важную роль играют сообщения, связанные с происшедшими
событиями. В обработке события (т.е. в методе объекта) программист волен предусмотреть самые разные действия: может
изменять свойства других объектов, вызывать методы других объектов, добавлять или удалять объекты визуальной
составляющей, даже полностью изменить ее облик.

Программирование на Visual С++ полностью соответствует концепциям визуального и событийно-управляемого
программирования. Чтобы создать приложение на Visual С++, нужно сделать две вещи: разработать с помощью визуального
инструментария интерфейс пользователя и написать реакции на действия пользователя, т.е. для каждого возможного
события — обрабатывающий его метод.

 В языках визуального объектно-ориентированного программирования (например, Visual Basic) применяется визуальный
метод создания графического интерфейса приложения и объектный метод построения его программного кода.

        
Графический интерфейс. Визуальное программирование позволяет делать графический интерфейс разрабатываемых приложений
на основе форм и управляющих элементов.
         В роли основных объектов при визуальном программировании
выступают формы (Forms). Форма представляет собой окно, на котором размещаются управляющие элементы. Управляющие
элементы — это командные кнопки (CommandButton), переключатели, или «флажки» (Checkbox), поля выбора, или
«радиокнопки» (OptionsButton), списки (ListBox), текстовые поля (TextBox) и др.

         Событийная
процедура. Важное место в технологии визуального объектно-ориентированного программирования занимают события. В
качестве события могут выступать щелчок кнопкой мыши на объекте, нажатие определенной клавиши, открытие документа и
т. д. В качестве реакции на события запускается определенная процедура, которая способна изменять свойства объекта,
вызывать его методы и т. д.     Например, если пользователь производит какое-либо воздействие на элемент
графического интерфейса (нажимает командную кнопку), в качестве отклика     выполняется некоторая последовательность
действий (событийная процедура).

     Имя процедуры включает в себя имя объекта и имя события.

     Объект_Событие

     Каждая процедура представляет собой отдельный программный модуль, в начале и в
конце которого ставятся ключевые слова Sub и End:

         Sub Объект_Событие() Программный код End
Sub
     Разрабатываемое на языке Visual Basic приложение называется проектом. Проект включает в себя не
только форму с размещенными на ней управляющими элементами, но и программные модули событийных процедур, которые
описывают поведение объектов приложения и взаимодействие объектов между собой.

Контрольные вопросы

  1. Интерфейсные объекты
  2. Графический интерфейс
  3. Событийная процедура

Тема 5.6. Разработка оконного приложения

Лекция№35. Создание интерфейса оконного приложения. Компиляция и
запуск приложения.

План лекции

  1. Программы с оконным интерфейсом на Linux
  2. Этапы создания программы с оконным интерфейсом

Программы с оконным интерфейсом на Linux

Многие современные программы имеют оконный интерфейс (или просто GUI – Graphical User Interface). Он делает намного
удобнее общение с пользователем, позволяет ускорить выполнение ряда рутинных процедур, да и просто GUI – это
эстетично и современно. Мы создадим одну очень короткую программу. Задача не в том, чтобы научиться создавать
программы с оконным интерфейсом (этому будут потом посвящены отдельные руководства), а в том, чтобы
продемонстрировать, что их сборка и распространение принципиально не отличаются от того, что мы видели в случае с
консольными программами.

Ключевым звеном оконных программ является X-сервер. Он отвечает за прорисовку графических элементов. Программы,
имеющие оконный интерфейс должны обращаться к X-серверу. Для обращения к нему служит специальный интерфейс (он
называется Xlib). Однако существуют средства, позволяющие избежать непосредственного обращения к низкоуровневому
интерфейсу (а работа с ним занимает длительное время). Два наиболее распространённых таких средства – это библиотеки
GTK и Qt.

Напишем очень короткую программу с оконным интерфейсом с использованием библиотеки GTK+ 2.0.

Чтобы простым способом её скомпилировать, нужно воспользоваться обычным компилятором gcc, сообщив ему, что надо
подключить библиотеку GTK+. Для этого мы вызываем утилиту pgk-config. Эта утилита ищет установленные в системе
библиотеки и возвращает путь к ним. В данном случае нам нужна библиотека gtk+, что мы и указываем в параметре.

gcc main.c -o gtkdemo `pkg-config —cflags —libs gtk+-2.0`

Теперь давайте подготовим эту программку для распространения.

Создайте каталог проекта. Назовите его gtkdemo. В нём, как обычно, каталог src. В каталоге src – вышеуказанный файл
main.c.

В корневом каталоге создайте файл configure.ac

Вы, конечно, заметили, что, помимо уже знакомых строк мы сюда включаем директиву PKG_CHECK_MODULES. Эта директива
запускает уже знакомую утилиту pkg-config. Путь к заголовочным файлам библиотеки gtk+ сохраняется в переменной
DEPS_CFLAGS. Путь к библиотечным файлам – в переменной DEPS_LIBS.

Ещё в корневом каталоге создайте файл Makefile.am

SUBDIRS = src

А в каталоге src – другой файл Makefile.am

bin_PROGRAMS = gtkdemo

gtkdemo_SOURCES = main.c

gtkdemo_LDADD = $(DEPS_LIBS)

AM_CPPFLAGS = $(DEPS_CFLAGS)

Здесь указывается, что адреса, найденные и сохранённые в этих двух переменных, должны быть подключены к проекту.

Всё! Собираем, как обычно.

aclocal

autoconf

touch NEWS README AUTHORS ChangeLog

autoheader

automake -a

./configure

make

make dist

Далее можете при желании инсталлировать программу.

make install

Или подготовить дистрибутив.

make dist

В этот дистрибутив будет входить и файл проекта (qtdemo.pro). Поэтому пользователи, получив такой пакет не должны
запускать configure. Всё, что им надо, это дать следующие команды:

qmake

make

Хотя qmake не требует обязательного присутствия в дистрибутиве файла README, желательно такой файл создать, и описать
подробно, как правильно устанавливать программу. Будет неприятно, если пользователь будет источать на вас весь запас
бранных слов только из-за того, что у него не установлена библиотека Qt, или из-за того, что его не предупредили,
что в данном пакете не надо запускать ./configure.

Курьёзно, что никто вам не запрещает пользоваться утилитой qmake для сборки самых обычных консольных программ, не
имеющих никакого отношения к Qt.

Если мы возьмём нашу последнюю версию, то там к программе требовалось подключить библиотеку libcalculate.

Однако не забывайте, что для сборки программы из архива, полученного таким путём, пользователь также должен иметь
программу qmake на своём компьютере. Поэтому пользуйтесь такими нестандартными возможностями с большой
осторожностью.

Контрольные вопросы

  1. Программы с оконным интерфейсом на Linux
  2. Этапы создания программы с оконным интерфейсом

Список литературы

  1. Семакин И.Г. Основы алгоритмизации и программирования. Учебник для студентов учреждений среднего
    профессионального образования — 3-е изд., стер. — М. : Издательский центр «Академия», 2013. 400 с.
  2. Семакин И., Шестаков А. Основы алгоритмизации и

программирования. Практикум. Учебное пособие М.: Академия, 2013г. – 144с.

  1. Голицына О.Л., Попов И.И. Основы алгоритмизации и

программирования: учебное пособие. М.: Форум, 2014г. – 432с.

  1. С. Скиена. Алгоритмы. Руководство по разработке. СПб.: БХВ-

Петербург, 2011г. – 720с.

  1. Т.Х. Кормен. Алгоритмы. Вводный курс. М.: Вильямс. 2014г. – 208с.
  2. Кнут Д. Искусство программирования. Том 1. Основные алгоритмы.

М.: Вильямс, 2010г.-720с.



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



Какие читать?
Начиная путь в программировании, следует обзавестись настольными книгами для новичков общего характера. Такая литература введет вас в курс дела, объяснит общие принципы работы компьютерных систем. По мере приобретения опыта стоит пополнять свою библиотеку более узкоспециализированными изданиями.

В статье рассказывается:

  1. 5 полезных книг по программированию для начинающих разработчиков
  2. 5 книг по программированию, которые должен прочесть каждый разработчик
  3. 12 лучших книг по программирования на Python
  4. Топ-8 книг по программированию на HTML/CSS
  5. 17 лучших книг по программированию на JavaScript
  6. Пройди тест и узнай, какая сфера тебе подходит:
    айти, дизайн или маркетинг.

    Бесплатно от Geekbrains

5 полезных книг по программированию для начинающих разработчиков

Эндрю Хант, Дэвид Томас «Программист-прагматик. Путь от подмастерья к мастеру»

Книгу можно отнести к наиболее передовым и продвинутым изданиям, при том, что авторы не углубляются в тонкости программирования, а делают акцент на сути процесса. Они прекрасно понимают, с какими сложностями и проблемами придется столкнуться разработчикам, и поэтому рассказывают лишь о том, как создать работоспособную и поддерживаемую программу.

5 полезных книг по программированию для начинающих разработчиков

Эндрю Хант и Дэвид Томас в своей книге рассказывают о базовых подходах, которыми пользуются профессиональные программисты. Благодаря такой организации работы можно не только писать эффективные коды для решения бизнес-задач, но и взаимодействовать с другими инженерами и пользователями.

Эндрю Таненбаум «Архитектура компьютера»

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

«Архитектура компьютера» – первая книга из цикла работ Таненбаума об организации вычислительных машин. Знающие люди советуют после ее изучения прочитать «Компьютерные сети» и «Современные операционные системы» из этого цикла, чтобы возникло устойчивое понимание того, как будет работать написанный вами код.

Джейсон Шрейер «Кровь, пот и пиксели. Обратная сторона индустрии видеоигр»

Почему Blizzard чуть с треском не провалился после выпуска Diablo III? Как Halo стала стратегией? Как сложилась судьба студии, создавшей Uncharted? Ответы на эти вопросы, а также все, что вы хотели знать о разработке Witcher-3 и Destiny, и еще множество других эксклюзивных историй автор книги узнал напрямую от тех, кто разрабатывал самые популярные игры последнего десятилетия.

Вам знакомы яркие образы героев и сложная стратегия игр, а Джейсон Шрейер предлагает взглянуть на мир игровой индустрии изнутри. Оказывается, что это не только престижное место работы и высокая зарплата, но и серьезная проверка на стрессоустойчивость и выносливость, пройти которую удается далеко не всем.

Максим Дорофеев «Джедайские техники»

Программированию эта книга не учит, но без тех навыков и умений, о которых в ней рассказывается – умении концентрироваться, учиться, эффективно применять свои знания – стать настоящим разработчиком будет сложно. Автор рассказывает о том, как устроено мышление человека, как работает его память, как правильно ставить задачи и набираться сил для продуктивной работы, можно ли применять полученные знания в жизни и как не наступать на одни и те же грабли. На эту тему у Максима Дорофеева есть еще одна книга «Путь джедая».

pdf иконка

Топ-30 самых востребованных и высокооплачиваемых профессий 2023

Поможет разобраться в актуальной ситуации на рынке труда

doc иконка

Подборка 50+ бесплатных нейросетей для упрощения работы и увеличения заработка

Только проверенные нейросети с доступом из России и свободным использованием

pdf иконка

ТОП-100 площадок для поиска работы от GeekBrains

Список проверенных ресурсов реальных вакансий с доходом от 210 000 ₽

Уже скачали 22645 pdf иконка

Кори Альтхофф «Сам себе программист. Как научиться программировать и устроиться в Ebay?»

Освоить за год программирование – серьезное достижение. Но Кори Альтхофф решил, что этого мало, и после того, как научился программировать, пошел и устроился на работу в компанию Ebay разработчиком кодов. Как ему удалось стать сотрудником одной из самых крупных современных IT-компаний – читайте в этой книге. Здесь же рассказывается об уникальной авторской методике изучения программирования на языке Python. Изучайте, применяйте на практике – и у вас тоже многое получится!

5 книг по программированию, которые должен прочесть каждый разработчик

  • С. Макконнелл «Совершенный код»

Каждый уважающий себя программист-разработчик обязательно прочитал солидный труд (чуть менее 900 страниц) Стива Макконнелла «Совершенный код». В этой книге собрана практически вся информация по разработке ПО: от инструкций по составлению высококачественных кодов, механизмов тестирования и отладки программ до продуманных стратегий оптимизации кода и оценки психологического состояния, влияющего на разработку.

Достаточно сказать, что для размещения библиографии книги потребовалось 20 страниц, на которых подробно указаны более 500 источников. «Совершенный код» – одно из самых полезных и полных изданий по разработке ПО. Его популярность обозначена стабильной верхней строчкой любого рейтинга книг по программированию. Доступное изложение, особый стиль и чувство юмора автора помогают легко осилить почти тысячу страниц его произведения.

  • М. Фаулер «Рефакторинг»

В своей книге автор сумел добиться невозможного – в простой и понятной форме рассказать читателям о том, что такое рефакторинг, его назначение, особенности и методы реализации. Любое другое издание по данной теме в обязательном порядке ссылается на эту книгу Мартина Фаулера.

После прочтения произведения программисты меняют свое мнение о том, как надо писать коды. Полученные знания делают их более грамотными, аккуратными и требовательными к своей работе. Книгу должны прочитать все программисты, которые хотят достичь совершенства в своей профессии.

  • Э. Гамма, Р. Хелм, Р. Джонсон, Д. Влиссидес «Паттерны проектирования»

5 книг по программированию, которые должен прочесть каждый разработчик

Каждый опытный разработчик посоветует начинать изучение объектно-ориентированного программирования именно по этому изданию. Это даже не бестселлер, а нечто большее – с момента появления книги в мире продано уже более пятисот тысяч экземпляров, и не только на английском, но и на 13 других языках.

  • Р. Мартин «Чистый код»

«Чистый код» – это 360 страниц увлекательного описания процесса создания высококачественного кода. Книга написана простым, доступным языком, легко читается, что крайне важно при объяснении столь сложной темы. Добрый друг всех разработчиков, «дядюшка» Боб доверительно делится секретами о том, по каким принципам составляется хороший код. В книге очень много примеров из реальных приложений, с которыми автор имел дело в своей практике. Это такие известные продукты, как JUnit, FitNesse, JDepend, Ant и TomCat.

  • Д. Кнут «Искусство программирования»

Монография Дональда Кнута хорошо известна не только современным молодым разработчикам, но и их родителям, которые учились по ней программированию еще на заре всеобщей компьютеризации. Так что ее по праву называют «Библия программиста». В книге подробно описаны и проанализированы важнейшие алгоритмы, ставшие фундаментом информатики, приведено множество практических задач и упражнений для глубокого усвоения и запоминания изложенного материала.

По версии журнала «American Scientist» академическое издание Кнута, наряду с работой Эйнштейна по теории относительности, входит в список 12 лучших физико-математических монографий XX века. Книга получила всемирное признание благодаря высокому качеству изложения и глубине анализа общих вопросов программирования.

12 лучших книг по программирования на Python

  • К. Сваруп «A Byte of Python (Укус Питона)», (перевод — Владимир Смоляр), (2020)

Книга вполне способна стать учебником по изучению языка программирования Python для начинающих. Она легко читается, все основные понятия разбираются на конкретных примерах. Отсюда ее популярность у тех, кто решил углубиться в рассматриваемую профессию.

  • Эл Свейгарт «Большая книга проектов Python», (2021)

После изучения синтаксиса Python самое время начать программировать. Закрепите свои знания языка и получите практические навыки при решении самых интересных задач. В книге даны готовые проекты по созданию графических изображений, разработке игр, анимации и многому другому. Можно нарабатывать опыт на готовом материале или поэкспериментировать с добавлением собственных деталей.

  • Эл Свейгарт «Python. Чистый код для продолжающих», (2021)

Эта книга пригодится профессиональным программистам, но не в качестве набора полезных советов и подсказок по созданию чистого кода. В ней содержится описание основных инструментов разработчика – командной строки, средств форматирования кода, статических анализаторов и контроле версий.

Книги по Golang, с которыми обязательно стоит ознакомиться

Читайте также

В процессе чтения «Python. Чистый код для продолжающих» вы научитесь настраивать среду разработки, обозначать переменные и функции именами, которые делают код удобным для чтения, грамотно комментировать и документировать ПО, оценивать быстродействие программ и сложность алгоритмов, сможете познакомиться с ООП. Подобные навыки превратят вас в опытного программиста, способного работать не только на Python, но и на любом другом языке.

  • Джульен Данжу «Путь Python. Черный пояс по разработке, масштабированию, тестированию и развертыванию», (2019)

Книга для профессиональных программистов и опытных разработчиков. «Путь Python» – это как черный пояс в каратэ. Все нюансы и тонкости языка, анализ распространенных ошибок и другие советы, которые специалисты почерпнут из этой книги, помогут научиться в короткие сроки создавать лучшие программы и писать коды без ошибок.

Скачать
файл

  • Никола Лейси «Python, например», (2019)

В книгу включены 150 задач, которые помогут читателю плавно перейти от изучения основ языка к решению более сложных вопросов. Руководство написано простым, понятным языком без технического сленга и многословных объяснений.

  • Тарек Зиаде, Михал Яворски «Python. Лучшие практики и инструменты», (2019)

В начале книги авторы знакомят с новыми возможностями Python 3.7 и более продвинутым синтаксисом языка. Затем дают советы, как реализовать наиболее популярные направления программирования – объектно-ориентированное, функциональное и событийно-ориентированное. Здесь же приведены примеры наилучших практик именования, какими способами можно автоматически разворачивать программы на удаленных серверах. Вам расскажут, как создавать полезные расширения для Python на C, C++, Cython и CFFI.

  • Эрик Мэтиз «Изучаем Python: программирование игр, визуализация данных, веб-приложения», (2021)

В первую часть книги для изучения программирования авторы включили основные понятия: переменные, списки, классы, циклы, и дополнили их простыми упражнениями с применением шаблонов чистого кода.

Вы научитесь превращать свои программы в интерактивные и узнаете, как протестировать код, прежде чем включить его в проект. Во второй части произведения авторы предлагают применить полученные знания на практике и воплотить в жизнь три проекта: аркадную игру в стиле Space Invaders, визуализацию данных с удобными библиотеками Python и сделать простое веб-приложение, которое можно быстро развернуть онлайн.

  • Джейми Чан «Python. Быстрый старт», (2020)

12 лучших книг по программирования на Python

Книга рассчитана на читателей, которые никогда раньше не занимались программированием: все сложные понятия, входящие в изучение языка Python, разбиты на простые понятные шаги, изложение базовых концепций подкреплено реальными примерами.

Дарим скидку от 60%
на курсы от GeekBrains до 24 сентября

Уже через 9 месяцев сможете устроиться на работу с доходом от 150 000 рублей

Забронировать скидку


В результате вы получаете полное представление о данном языке программирования: как выглядят структуры управления, какие существуют методы обработки ошибок, что входит в концепцию объектно-ориентированного программирования и т. д. В конце авторы подготовили интересный проект, который поможет усвоить полученные знания.

  • Наоми Седер «Python. Экспресс-курс», (2018)

Книга поможет быстро перейти от основ языка к управлению и структурам данных, что позволит в полной мере освоить создание, тестирование и работу полноценных приложений. Автор знакомит читателя не только с основными особенностями данного языка, но и с его объектно-ориентированными возможностями, которые появились в Python 3.

  • Тимур Машнин «Создание настольных Python приложений с графическим интерфейсом пользователя», (2021)

В книге представлены различные фреймворки Python, необходимые для создания приложений с графическим интерфейсом пользователя, такими как PyQt, PySide, Tkinter, Kivy, WxPython и Dear PyGUI.

  • Гэддис Тони «Начинаем программировать на Python» 5-е издание, (2022)

В книге доступным языком излагаются основные принципы программирования, изучив которые читатель освоит навыки составления алгоритмов и решения задач на языке Python, даже если он никогда раньше этим не занимался.

Кратко дано введение в компьютеры и программирование. Рассказано, как происходит ввод, обработка и вывод данных, описаны управляющие структуры и булева алгебра, структуры с повторением, функции, файлы и исключения, списки и кортежи, строковые данные, словари и множества, классы и ООП, наследование, рекурсия, программирование интерфейса, функциональное программирование и др.

  • Майер К. «Однострочники Python: лаконичный и содержательный код», (2022)

Если вы уже знакомы с основами программирования, то в этой книге вы найдете для себя дополнительные приемы и хитрости написания кода, стандартные выражения и полезные алгоритмы. В книге подробно объясняются важнейшие понятия computer science, изучение которых позволит вам заметно вырасти как программисту и аналитику.

Топ-8 книг по программированию на HTML/CSS

  • Эрик Фримен, Элизабет Робсон «Изучаем HTML, XHTML и CSS», (2012)

Возможно, книга слегка устарела, поскольку ряд советов в ней потерял актуальность. Но она написана настолько просто и доходчиво, что ее поймет даже 6-летний ребенок и начнет верстать свои сайты. Поэтому она до сих пор относится к книгам must have для тех читателей, которые очень хотят создать свой собственный веб-ресурс, но не знают с чего начать.

  • Грэг Сидельников «Наглядный CSS», (2018)

В этой книге собраны и доходчиво описаны все свойства CSS, так что она вполне может претендовать на звание идеального справочника. Все данные в ней актуальны, плюс бонусом добавлена глава про SCSS. Это издание должно в обязательном порядке стоять на полке начинающего программиста.

  • Джон Дакетт «HTML и CSS. Разработка и дизайн веб-сайтов», (2011)

Хотите быстро и легко изучить HTML и CSS? Тогда эта книга для вас. Материал изложен доступным языком с интересными живыми примерами. Совершенно неважно, какая задача стоит перед вами: разработать сайт с нуля или довести до совершенства уже действующий веб-ресурс. С помощью этой книги вы сможете создать привлекательный для пользователя контент.

Топ-8 книг по программированию на HTML/CSS

Визуализированная информация с небольшим фрагментом кода в качестве наглядного примера на каждом развороте книги преподносит новую тему. Автор дает практические советы, с помощью которых у вас получится правильно организовать и спроектировать страницы вашего сайта. После того, как вы прочитаете эту книгу по программированию с нуля, у вас обязательно получится разработать собственный веб-сайт на профессиональной основе с удобным интерфейсом и быстрой загрузкой.

  • Кит Грант «CSS для профи», (2018)

Если вы уже получили основные навыки работы с CSS, то с помощью этой книги сможете двинуться дальше и прокачать свои знания до профессионального уровня. С помощью примеров, приведенных на ее страницах, вы более подробно узнаете о поведении разных единиц измерения и правилах управления Gird-сеткой.

Лучшие книги по Python: с нуля и до профи

Читайте также

  • Николай Прохоренок «Bootstrap и CSS-препроцессор Sass. Самое необходимое», (2021)

Автор демонстрирует разработку адаптивных веб-сайтов для всех типов устройств с использованием библиотеки Bootstrap и CSS-препроцессора Sass. В книге описана система сеток на основе flex-контейнера, с помощью которой можно задавать ширину, количество и порядок следования колонок. Автор дает описание стилевого оформления стандартных элементов и большое количество готовых компонентов Bootstrap – это адаптивная панель навигации, карточки, панели с вкладками, карусель, всплывающие подсказки и уведомления, модальные диалоговые окна и др.

В книге также описана сборка SCSS-файлов библиотеки Bootstrap под свой проект с использованием CSS-препроцессора Sass, а также создание собственного проекта без использования этой библиотеки. Приведенные в книге практические примеры помогают начать работу самостоятельно. Благодаря тщательно подобранному материалу, хорошо продуманной структуре и компактному изложению книгу можно использовать в качестве удобного справочника.

  • Купер Нейт «Как создать сайт. Комикс-путеводитель по HTML, CSS и WordPress», (2019)

Книга сделана в формате увлекательного комикса, которые так любят дети. Художница Ким, пытаясь сделать сайт для своего портфолио, попадает на необычную планету. Она сможет вернуться домой только в том случае, если выучит основы HTML, победит дракона 404, подружится с веб-гуру и доброй колдуньей CSS, а также выяснит, что находится за высокими стенами WordPress-сити. В процессе чтения комикса дети познакомятся с языками HTML и CSS, а также с конструктором сайтов WordPress.

  • Кириченко А., Хрусталев А. «HTML5+CSS3. Основы современного WEB-дизайна», (2019)

Книга в легкой и непринужденной форме дает базовые основы курса HTML5 и CSS3. Уровень подачи материала подойдет как новичку, так и более опытному специалисту, который решил прокачать свои навыки веб-программирования и веб-дизайна.

  • Фрэйн Б. «Отзывчивый дизайн на HTML5 и CSS3 для любых устройств», (2022)

Необходимость переиздания книги возникла с появлением новых возможностей современного веб-дизайна. Теперь «отзывчивый дизайн» – это не новая технология, а стандарт разработки на HTML5 и CSS3. Неформальный, свободный стиль автора помогает быстро освоить новые разработки.

17 лучших книг по программированию на JavaScript

  • Робин Никсон «Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS иHTML5», (2018)

Не знаете, какой учебник по HTML выбрать? Устали от чтения книг, понятных только профессионалам? Предлагаем вам второе издание «Изучаем HTML, XHTML и CSS». С его помощью вы сможете изучить HTML на таком уровне, что легко создадите сайт своей мечты и сможете наладить продуктивное общение не только с родными и друзьями, но и с привередливыми клиентами.

Только до 28.09

Скачай подборку материалов, чтобы гарантированно найти работу в IT за 14 дней

Список документов:


ТОП-100 площадок для поиска работы от GeekBrains


20 профессий 2023 года, с доходом от 150 000 рублей


Чек-лист «Как успешно пройти собеседование»

Чтобы получить файл, укажите e-mail:

Введите e-mail, чтобы получить доступ к документам

Подтвердите, что вы не робот,
указав номер телефона:

Введите телефон, чтобы получить доступ к документам


Уже скачали 52300

В книге Робина Никсона собраны все секреты создания веб-страниц. Когда вы прочитаете ее, то узнаете, как профессиональные разработчики добиваются визуально привлекательного дизайна, и как эффективно использовать знания по HTML, CSS и XHTML для создания таких веб-страниц, мимо которых не пройдет ни один пользователь. Адаптировать работу вашего сайта во всех браузерах и мобильных устройствах поможет новейший стандарт HTML5. Его использование поможет поддерживать ваши веб-страницы в соответствии с современными требованиями.

  • Джон Дакетт «Javascript и jQuery. Интерактивная веб-разработка», (2014)

Если вы хотите на хорошем уровне изучить JavaScript и jQuery, то это издание станет для вас самым простым и удобным решением. В нем собрана вся полезная информация по созданию привлекательного контента. На каждой странице освещается новая тема с использованием понятных примеров и небольшим фрагментом кода. После того, как книга будет прочитана, вы сможете без особого труда спроектировать удобный в использовании веб-сайт с нуля или доработать уже действующий ресурс до профессионального вида.

  • Эрик Фримен, Элизабет Робсон «Изучаем программирование на JavaScript», (2014)

Вы действительно узнаете из этой книги все о языке программирования JavaScript: от переменных до циклов. Вам также станет понятно, почему каждый браузер реагирует на один и тот же код по-разному и как написать универсальный код, поддерживаемый всеми браузерами без исключения. Из множества скучных книг по программированию серия «Head First» издательства O’Reilly заметно выделяется необычной подачей материала, что помогает лучше его освоить.

  • Адам Д. Скотт «Разработка на JavaScript. Построение кроссплатформенных приложений с помощью GraphQL, React, React Native и Electron», (2020)

Если раньше JavaScript просто делал более интерактивными окна веб-браузера, то сегодня он стал базовым фундаментом мощного и надежного софта. Разработчики разной степени подготовки могут использовать данный язык программирования для создания API, веб-, мобильных и десктопных приложений.

Привлекает мир кодирования и создания программ? На курсе программиста с нуля до Junior вы освоите основы, познакомитесь с языками и инструментами разработки, и станете готовы к созданию своих первых проектов в IT-индустрии.

  • Марейн Хавербеке «Выразительный JavaScript. Современное веб-программирование», (2019)

Книга написана практиком, поэтому в ней множество примеров, упражнений и учебных проектов, позволяющих одновременно изучать язык и получать необходимый практический опыт. Глубокое погружение в тему поможет научиться писать красивый и эффективный код. Вы узнаете, что такое синтаксис, стрелочные и асинхронные функции, итератор, шаблонные строки и блочная область видимости.

Сначала вы познакомитесь со структурой языка JavaScript, управляющими структурами, функциями и структурами данных, затем разберете главы, где говорится об обработке ошибок и исправлении багов, изучите модульность и асинхронное программирование, после чего займетесь созданием браузеров.

  • Франсуа Шолле, Стэн Байлесчи, Шэнкуинг Цэй, Эрик Нильсон «JavaScript для глубокого обучения: TensorFlow.js», (2020)

17 лучших книг по программированию на JavaScript

Книга предлагает научиться использовать TensorFlow.js для построения моделей глубокого обучения, работающих непосредственно в браузере. Весь мир заполонили умные веб-приложения, а реализовать их в браузере или серверной части помогает TensorFlow.js. Она отлично портируется, а модели этой библиотеки работают везде, где есть JavaScript.

Специалисты из Google Brain создали книгу основ программирования, которая поможет решать реальные прикладные задачи. Вам не придется корпеть над теорией, а можно будет сразу приступать к их решению. Вы освоите базу глубокого обучения и познакомитесь с продвинутыми концепциями ИИ на примерах анализа текста, обработки речи, распознавания образов и самообучающегося игрового искусственного интеллекта.

  • Дуглас Крокфорд «Как устроен JavaScript», (2018)

Автор подробно отвечает на вопрос, вынесенный в название книги. Попутно он избавляется от устаревшей парадигмы большинства языков программирования и переводит читателя на новый уровень понимания требований к Следующему Языку (The Next Language). Книга начинается с основ языка: имен, чисел, логических значений, символов и другой базовой информации.

Крокфорд рассказывает о том, какие трудности и проблемы возникают при работе с типами в Javascript, и тут же дает советы, как их можно обойти. Далее вам предстоит познакомиться со структурами данных и функциями, чтобы понять, какие механизмы лежат в их основе. После этого вы научитесь использовать функции высшего порядка и объектно-ориентированный стиль программирования без классов.

  • Кайл Симпсон {You Don’t Know JS} «Познакомьтесь, JavaScript»

Можно поверить, что вы пока не знаете JS. Но Кайл Симпсон пишет о том, что он тоже с ним не знаком (по крайней мере в совершенстве). Да и никто, скорее всего. Но всегда можно найти время, чтобы узнать язык лучше. И книга «Познакомьтесь, JavaScript» вам в этом поможет. Она не для новичков, а для тех, кто хочет поднять свой уровень программиста.

Автор предлагает обзор тем, которые надо досконально изучить на начальном этапе знакомства с JS. Даже если вы опытный разработчик и давно пишете коды JavaScript, все равно прочитайте эту книгу. Возможно, вы что-то упустили в самом начале, тогда этот пробел надо восполнить перед дальнейшим изучением более сложных тем.

  • Кайл Симпсон {You Don’t Know JS} «Область видимости и замыкания»

Если вы прочитали первую книгу серии «You Don’t Know JS», то уже имеете какое-то представление о языке. Во второй книге Кайл Симпсон знакомит вас с одним из трех столпов JavaScript – системой областей видимости и функциональными замыканиями, а также с мощным паттерном проектирования «Модуль». Вы сможете освоить правила лексических областей видимости для размещения переменных и функций в правильных позициях.

И проверите свои знания более низкого уровня, поскольку хранение состояния модулей базируется на замыканиях, использующих систему лексических областей видимости.

  • Кайл Симпсон {You Don’t Know JS} «Асинхронная обработка и оптимизация»

Даже самые опытные программисты порой не до конца разбираются в тонкостях JavaScript. Поэтому еще одно руководство из серии «Вы не знаете JS» посвящено новым асинхронным возможностям и средствам повышения производительности, которые позволяют создавать сложные одностраничные веб-приложения и избежать при этом «кошмара обратных вызовов». Лаконичная, но глубоко продуманная книга станет еще одним источником знаний обо всех нетривиальных особенностях языка и поможет достичь вершин мастерства в программировании.

33 книги по маркетингу для всех и каждого

Читайте также

  • Кайл Симпсон {You Don’t Know JS} «Замыкания и объекты»

Еще одна книга Кайла Симпсона, помогающая освоить тонкости JavaScript. Данное руководство из серии «Вы не знаете JS» знакомит читателей с областями видимости, замыканиями, ключевым словом this и объектами – концепциями, которые необходимо знать для более эффективного и продуктивного программирования на JS. Вы узнаете, почему они работают и как замыкания могут стать эффективной частью вашего инструментария разработки.

  • Кайл Симпсон {You Don’t Know JS} «Типы и грамматические конструкции»

Очередное руководство к программированию на JavaScript исследует типы более глубоко, чем все существующие книги: вы узнаете, как работают типы и проблемы их преобразования, а также научитесь пользоваться новыми возможностями.

  • Кайл Симпсон {You Don’t Know JS} «ES6 и не только»

Язык программирования JavaScript настолько быстро развивается, что отследить все изменения просто невозможно. Поэтому даже опытному разработчику будет полезна очередная книга Кайла Симпсона из серии «Вы не знаете JS», в которой особо выделены новые функции, появившиеся в Ecmascript 6 (ES6) – последней версии стандарта JavaScript.

Полученные знания помогут достичь более высокого уровня мастерства: вы сможете выучить новый синтаксис; научитесь корректно использовать итераторы, генераторы, модули и классы; сможете более эффективно работать с данными; познакомитесь с новыми API, например Array, Object, Math, Number и String; расширите функционал программ с помощью мета-программирования.

  • Кирупа Чиннатхамби «JavaScript с нуля», (2020)

Все возможности JavaScript описаны простым понятным языком, подкреплены подробными примерами, иллюстрациями и схемами, которые поймет даже новичок. Доступная подача материала и органичный юмор автора незаметно превратили академические лекции в занимательную практику по написанию кода. Когда вы перевернете последнюю страницу книги, то поймете, что теперь вам любая задача по плечу: будь то простое перемещение элементов на странице или даже собственная браузерная игра.

  • Макфарланд Дэвид «JavaScript и jQuery. Исчерпывающее руководство», (2017)

Объемный труд, в котором излагаются азы jQuery и JavaScript. Все теоретические выкладки подкреплены практическими примерами.

  • Кэй Хорстман «Современный JavaScript для нетерпеливых», (2021)

Автор подает материал небольшими порциями, что заметно облегчает понимание. В книге рассказывается обо всем, что может пригодиться для разработки ПО на современном JavaScript. Эффективно воспользоваться всеми новшествами и при этом избежать подводных камней и устаревших средств помогут практические советы и примеры кода. Издание предназначено прежде всего для программистов, владеющих языками Java, C#, C, или C++.

  • Алексей Васильев «JavaScript в примерах и задачах», (2022)

JavaScript сегодня – наиболее популярный язык программирования во всем мире, а эта книга – одно из наиболее полноценных изданий по его изучению. Алексей Васильев – известный автор лучших учебников по языкам программирования. В очередном бестселлере он дает полный объем сведений о JavaScript с практическими примерами и подробным разбором задач. С такой подачей освоить популярный язык сможет любой желающий – от новичка до профессионала.

Хорошие книги по системам программирования играют очень важную роль в формировании навыков профессионального программиста. Каждое из приведенных здесь произведений поможет достичь настоящих вершин мастерства и стать востребованным специалистом.

Лучшие книги по программированию для начинающих и не только

HTML/CSS

01

Изучаем HTML, XHTML и CSS

В этой книге описано всё настолько гениально просто, что начать верстать сможет даже 6-летний ребенок. Да, книга устарела и некоторые советы утратили свою актуальность. Но это не мешает ей быть и оставаться книгой must have для тех, кто СОВСЕМ не знает с чего начать, но хочет уже как-то прикоснуться к магии создания сайтов.

02

Наглядный CSS

Грэг Сидельников (2018)

Это идеальный справочник, где наглядно описаны все свойства CSS. Содержимое имеет актуальные данные. Любое свойство, которое вы только сможете вспомнить 100% будет описано в книге. Также бонусом идёт глава про SCSS. Такую книгу точно нужно иметь в арсенале, особенно на самом старте обучения.

03

HTML и CSS. Разработка и дизайн веб-сайтов

Джон Дакетт (2011)

Эта книга – самый простой и интересный способ изучить HTML и CSS. Независимо от стоящей перед вами задачи: спроектировать и разработать веб-сайт с нуля или получить больше контроля над уже существующим сайтом, эта книга поможет вам создать привлекательный, дружелюбный к пользователю веб-контент. Простой визуальный способ подачи информации с понятными примерами и небольшим фрагментом кода знакомит с новой темой на каждой странице. Вы найдете практические советы о том, как организовать и спроектировать страницы вашего сайта, и после прочтения книги сможете разработать свой веб-сайт профессионального вида и удобный в использовании.

читать книгу 🇷🇺
читать книгу 🇬🇧

04

CSS для профи

Кит Грант (2018)

Книга для тех, кто готов прокачиваться дальше и узнать о новых тонкостях. Изучили основные свойства? Значит уже пора приступать к чтению этой книги. Например, там вы узнаете более подробно на примерах о поведении разных единиц измерения и как управлять Gird-сеткой.

05

Bootstrap и CSS-препроцессор Sass. Самое необходимое

Николай Прохоренок (2021)

Рассмотрена разработка адаптивных веб-сайтов, одинаково хорошо отображающихся на всех типах устройств, с использованием библиотеки Bootstrap и CSS-препроцессора Sass. Описана система сеток на основе flex-контейнера, позволяющая задавать ширину колонок, их количество и порядок следования. Рассмотрено стилевое оформление стандартных элементов и большое количество готовых компонентов Bootstrap: адаптивная панель навигации, карточки, панели с вкладками, карусель, всплывающие подсказки и уведомления, модальные диалоговые окна и др. Описана сборка SCSS-файлов библиотеки Bootstrap под свой проект с использованием CSS-препроцессора Sass, а также создание собственного проекта без участия Bootstrap. Большое количество практических примеров помогает начать работу самостоятельно. Материал тщательно подобран, хорошо структурирован и компактно изложен, что позволяет использовать книгу как удобный справочник.

читать книгу

06

Как создать сайт. Комикс-путеводитель по HTML, CSS и WordPress

Купер Нейт (2019)

Пытаясь сделать сайт для своего портфолио, художница Ким попадает на удивительную планету. Чтобы вернуться домой, ей придется выучить азы HTML, победить злобного дракона 404, подружиться с веб-гуру и доброй колдуньей CSS и выяснить, что таится за стенами WordPress-сити. В формате увлекательного комикса книга познакомит детей с языками HTML и CSS, а также с конструктором сайтов WordPress.

читать книгу

07

HTML5+CSS3. Основы современного WEB-дизайна

Кириченко А., Хрусталев А. (2019)

С помощью книги вы сможете легко и непринужденно освоить базовый курс HTML5 и CSS3. Уровень подаваемого материала книги позволит эффективно использовать полученные знания как новичку, так и более опытному программисту, желающему освоить основы или улучшить свои навыки web-программирования и web-дизайна.

читать книгу

08

Отзывчивый дизайн на HTML5 и CSS3 для любых устройств

Фрэйн Б. (2022)

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

читать книгу

JavaScript

01

Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5

Робин Никсон (2018)

Устали от чтения книг по HTML, которые понятны только специалистам в этой области? Тогда самое время взять в руки
второе издание «Изучаем HTML, XHTML и CSS». Хотите изучить HTML, чтобы уметь создавать веб-страницы, о которых вы
всегда мечтали? Так, чтобы более эффективно общаться с друзьями, семьей и привередливыми клиентами? Тогда эта книга
для вас. Прочитав ее, вы изучите все секреты создания веб-страниц. Вы узнаете, как работают профессионалы, чтобы
получить визуально привлекательный дизайн, и как максимально эффективно использовать HTML, CSS и XHTML, чтобы
создавать такие веб-страницы, мимо которых не пройдет ни один пользователь. Используя новейший стандарт HTML5, вы
сможете поддерживать и совершенствовать свои веб-страницы в соответствии с современными требованиями, тем самым
обеспечивая их работу во всех браузерах и мобильных устройствах.

02

Javascript и jQuery. Интерактивная веб-разработка

Джон Дакетт (2014)

Эта книга – самый простой и интересный способ изучить JavaScript и jQuery. Независимо от стоящей перед вами задачи – спроектировать и разработать веб-сайт с нуля или получить больше контроля над уже существующим сайтом – эта книга поможет вам создать привлекательный, дружелюбный к пользователю веб-контент. Простой визуальный способ подачи информации с понятными примерами и небольшим фрагментом кода знакомит с новой темой на каждой странице. Вы найдете практические советы о том, как организовать и спроектировать страницы вашего сайта, и после прочтения книги сможете разработать свой веб-сайт профессионального вида и удобный в использовании.

читать книгу

03

Изучаем программирование на JavaScript

Эрик Фримен, Элизабет Робсон (2014)

С помощью этой книги вы узнаете все о языке JavaScript: от переменных до циклов. Вы поймете, почему разные браузеры по-разному реагируют на код и как написать универсальный код, поддерживаемый всеми браузерами. Особенностью данного издания является уникальный способ подачи материала, выделяющий серию «Head First» издательства O’Reilly в ряду множества скучных книг, посвященных программированию.

04

Разработка на JavaScript. Построение кроссплатформенных приложений с помощью GraphQL, React, React Native и Electron

Адам Д. Скотт (2020)

Что такое современный JavaScript? Когда-то он просто добавлял интерактивности к окнам веб-браузера, а теперь превратился в основательный фундамент мощного и надежного софта. Разработчики любого уровня смогут использовать JavaScript для создания API, веб-, мобильных и десктопных приложений.

читать книгу

05

Выразительный JavaScript. Современное веб-программирование

Марейн Хавербеке (2019)

«Выразительный JavaScript» позволит глубоко погрузиться в тему, научиться писать красивый и эффективный код. Вы познакомитесь с синтаксисом, стрелочными и асинхронными функциями, итератором, шаблонными строками и блочной областью видимости. Марейн Хавербеке – практик. Получайте опыт и изучайте язык на множестве примеров, выполняя упражнения и учебные проекты. Сначала вы познакомитесь со структурой языка JavaScript, управляющими структурами, функциями и структурами данных, затем изучите обработку ошибок и исправление багов, модульность и асинхронное программирование, после чего перейдете к программированию браузеров.

читать книгу

06

JavaScript для глубокого обучения: TensorFlow.js

Франсуа Шолле, Стэн Байлесчи, Шэнкуинг Цэй, Эрик Нильсон (2020)

Пора научиться использовать TensorFlow.js для построения моделей глубокого обучения, работающих непосредственно в браузере! Умные веб-приложения захватили мир, а реализовать их в браузере или серверной части позволяет TensorFlow.js. Данная библиотека блестяще портируется, ее модели работают везде, где работает JavaScript. Специалисты из Google Brain создали книгу, которая поможет решать реальные прикладные задачи. Вы не будете скучать над теорией, а сразу освоите базу глубокого обучения и познакомитесь с продвинутыми концепциями ИИ на примерах анализа текста, обработки речи, распознавания образов и самообучающегося игрового искусственного интеллекта.

читать книгу

07

Как устроен JavaScript

Дуглас Крокфорд (2018)

Игра в программирование без правил и ограничений. Большинство языков программирования выросли из древней парадигмы, порожденной еще во времена Фортрана. Гуру Javascript – Дуглас Крокфорд – выкорчевывает эти засохшие корни, позволяя нам задуматься над будущим программирования, перейдя на новый уровень понимания требований к Следующему Языку (The Next Language). Автор начинает с основ: имен, чисел, логических значений, символов и другой базовой информации. Вы узнаете не только о проблемах и трудностях работы с типами в JavaScript, но и о том как их можно обойти. Затем вы приступите к знакомству со структурами данных и функции, чтобы разобраться с механизмами, лежащими в их основе, и научитесь использовать функции высшего порядка и объектно-ориентированный стиль программирования без классов.

читать книгу

08

{You Don’t Know JS} Познакомьтесь, JavaScript

Кайл Симпсон

Вы пока еще не знаете JS. И Кайл Симпсон признается, что тоже его не знает (по крайней мере полностью)… И никто не знает. Но все мы можем начать работать над тем, чтобы узнать его лучше. Сколько бы времени вы ни провели за изучением языка, всегда можно найти что-то еще, что стоит изучить и понять на другом уровне.Учтите, что, хотя книга и называется «Познакомьтесь, JavaScript», она не для новичков. У нее другая задача: дать обзор тем, в которых необходимо разобраться на начальном этапе изучения JS. Даже если вы уже написали достаточно кода JS, эту книгу не стоит пропускать, возможно, в ваших знаниях есть пробелы, которые необходимо заполнить перед углубленным изучением сложных тем. Пора начать изучение JS!

читать книгу

09

{You Don’t Know JS} Область видимости и замыкания

Кайл Симпсон

Это вторая книга серии «You Don’t Know JS», чтобы познакомиться поближе с первым из трех столпов JavaScript – системой областей видимости и функциональными замыканиями, а также с мощным паттерном проектирования «Модуль». Пора освоить правила лексических областей видимости для размещения переменных и функций в правильных позициях. И заглянуть на более низкий уровень, ведь магия с хранением состояния модулей базируется на замыканиях, использующих систему лексических областей видимости.

читать книгу

10

{You Don’t Know JS} Асинхронная обработка и оптимизация

Кайл Симпсон

Каким бы опытом программирования на JavaScript вы ни обладали, скорее всего, вы не понимаете язык в полной мере. Это лаконичное, но при этом глубоко продуманное руководство посвящено новым асинхронным возможностям и средствам повышения производительности, которые позволяют создавать сложные одностраничные веб-приложения и избежать при этом «кошмара обратных вызовов». Как и в других книгах серии «Вы не знаете JS», вы познакомитесь с нетривиальными особенностями языка, которых так боятся программисты. Только вооружившись знаниями, можно достичь истинного мастерства.

читать книгу

11

{You Don’t Know JS} Замыкания и объекты

Кайл Симпсон

Каким бы опытом программирования на JavaScript вы ни обладали, скорее всего, вы не понимаете язык в полной мере. Это лаконичное, но при этом глубоко продуманное руководство познакомит вас с областями видимости, замыканиями, ключевым словом this и объектами – концепциями, которые необходимо знать для более эффективного и производительного программирования на JS. Вы узнаете, почему они работают и как замыкания могут стать эффективной частью вашего инструментария разработки.

читать книгу

12

{You Don’t Know JS} Типы и грамматические конструкции

Кайл Симпсон

Каким бы опытом программирования на JavaScript вы ни обладали, скорее всего, вы не понимаете язык в полной мере. Это лаконичное руководство исследует типы более глубоко, чем все существующие книги: вы узнаете, как работают типы, о проблемах их преобразования и научитесь пользоваться новыми возможностями.

читать книгу

13

{You Don’t Know JS} ES6 и не только

Кайл Симпсон

Даже если у вас уже есть опыт работы с JavaScript, скорее всего, язык вы в полной мере не знаете. Особое внимание в этой книге уделяется новым функциям, появившимся в Ecmascript 6 (ES6) – последней версии стандарта JavaScript. ES6 повествует о тонкостях языка, малознакомых большинству работающих на JavaScript программистов. Вооружившись этими знаниями, вы достигнете подлинного мастерства; выучите новый синтаксис; научитесь корректно использовать итераторы, генераторы, модули и классы; сможете более эффективно работать с данными; познакомитесь с новыми API, например Array, Object, Math, Number и String; расширите функционал программ с помощью мета-программирования.

читать книгу

14

JavaScript с нуля

Кирупа Чиннатхамби (2020)

Вы узнаете все возможности языка программирования без общих фраз и неясных терминов. Подробные примеры, иллюстрации и схемы будут понятны даже новичку. Легкая подача информации и живой юмор автора превратят нудное заучивание в занимательную практику по написанию кода. Дойдя до последней главы, вы настолько прокачаете свои навыки, что сможете решить практически любую задачу, будь то простое перемещение элементов на странице или даже собственная браузерная игра.

читать книгу

15

JavaScript и jQuery. Исчерпывающее руководство.

Макфарланд Дэвид (2017)

Объемная книга, которая неплохо объясняет азы jQuery и JavaScript. В ней нет акцента на теории. Каждая тема подкреплена примерами.

читать книгу

16

Современный JavaScript для нетерпеливых”

Кэй Хорстман (2021)

Хорстман рассказывает обо всем, что вам необходимо знать, излагая материал небольшими порциями, рассчитанными на легкое усвоение. Практические советы и примеры кода помогут эффективно воспользоваться всеми новшествами, избежать подводных камней и устаревших средств и извлечь максимум пользы из надежных инструментов и фреймворков для разработки ПО на современном JavaScript. Издание предназначено прежде всего программистам, владеющих такими языками, как Java, C#, C, или C++.

читать книгу

17

JavaScript в примерах и задачах

Алексей Васильев (2022)

Самоучитель по JavaScript, наиболее популярному сегодня языку программирования во всем мире. Полный спектр сведений о языке JavaScript с примерами и разбором задач от автора учебников-бестселлеров по языкам программирования Алексея Васильева. С помощью этой книги освоить язык JavaScript сможет каждый желающий – от новичка до специалиста.

читать книгу

TypeScript

01

Профессиональный TypeScript. Разработка масштабируемых JavaScript-приложений

Борис Черный (2019)

Любой программист, работающий с языком с динамической типизацией, подтвердит, что задача масштабирования кода невероятно сложна и требует большой команды инженеров. Вот почему Facebook, Google и Microsoft придумали статическую типизацию для динамически типизированного кода. Борис Черный помогает разобраться со всеми нюансами и возможностями TypeScript, учит устранять ошибки и масштабировать код.

читать книгу

02

TypeScript быстро

Яков Файн, Антон Моисеев (2020)

В книге разбираются актуальные для каждого программиста задачи, объясняется синтаксис языка и описывается разработка нескольких приложений, в том числе нетривиальных – так вы сможете понять, как использовать TypeScript с популярными библиотеками и фреймворками. Вы разберетесь с превосходным инструментарием TypeScript и узнаете, как объединить в одном проекте TypeScript и JavaScript. Среди продвинутых тем, рассмотренных авторами, – декораторы, асинхронная обработка и динамические импорты. Прочитав эту книгу, вы поймете, что именно делает TypeScript особенным.

читать книгу

03

Angular и TypeScript. Сайтостроение для профессионалов

Яков Файн, Антон Моисеев (2018)

Если вы занимаетесь веб-разработкой – от веб-клиентов до полнофункциональных одностраничных приложений, – то фреймворк Angular будет для вас спасением. Этот ультрасовременный инструмент полностью интегрирован со статически типизированным языком TypeScript, который отлично вписывается в экосистему JavaScript. Читая книгу, вы научитесь: проектировать и строить модульные приложения, правильно транспилировать TypeScript в JavaScript и пользоваться новейшими инструментами JavaScript – в частности npm, Karma и Webpack.

читать книгу

04

Программируй & типизируй. С примерами на TypeScript

Влад Ришкуция (2020)

В книге рассказывается, как с помощью типизации создавать программное обеспечение, которое не только было бы безопасным и работало без сбоев, но также обеспечивало простоту в сопровождении. Примеры решения задач, написанные на TypeScript, помогут развить ваши навыки работы с типами, начиная от простых типов данных и заканчивая более сложными понятиями, такими как функторы и монады.

читать книгу

React

01

Разработка на JavaScript. Построение кроссплатформенных приложений с помощью GraphQL, React, React Native и Electron

Адам Д. Скотт (2020)

Что такое современный JavaScript? Когда-то он просто добавлял интерактивности к окнам веб-браузера, а теперь превратился в основательный фундамент мощного и надежного софта. Разработчики любого уровня смогут использовать JavaScript для создания API, веб-, мобильных и десктопных приложений.

читать книгу

02

React и Redux. Функциональная веб-разработка

Алекс Бэнкс, Ева Порселло (2017)

Хотите научиться писать эффективные пользовательские интерфейсы при помощи React? Тогда вы нашли нужную книгу. Авторы расскажут, как создавать пользовательские интерфейсы при помощи этой компактной библиотеки и писать сайты, на которых можно обрабатывать огромные объемы данных без перезагрузки страниц. Также вы изучите новейшие возможности стандарта ECMAScript и функционального программирования.

читать книгу

03

React: современные шаблоны для разработки приложений

Алекс Бэнкс, Ева Порселло (2020)

Хотите создавать эффективные приложения с помощью React? Тогда эта книга написана для вас. Познакомьтесь лучшими практиками и шаблонами создания современного кода.Вам не потребуются глубокие знания React или функционала JavaScript – достаточно знакомства с принципами работы JavaScript, CSS и HTML. Алекс Бэнкс и Ева Порселло научат вас создавать пользовательские интерфейсы, которые будут динамически отображать изменения без необходимости перезагрузки страницы даже на крупномасштабных сайтах, работающих с огромными массивами данных.

04

React в действии

Марк Тиленс Томас (2018)

Книга «React в действии» знакомит фронтенд-разработчиков с фреймворком React и смежными инструментами. Сначала вы познакомитесь с библиотекой React, затем освежите материал о некоторых фундаментальных идеях в данном контексте и узнаете о работе с компонентами. Вы на практике освоите чистый React (без транспиляции, без синтаксических помощников), перейдете от простейших статических компонентов к динамическим и интерактивным. Во второй половине книги рассмотрены различные способы взаимодействия с React. Вы изучите базовые методы жизненного цикла, научитесь создавать поток данных, формы, а также тестировать приложения. На закуску вас ждет материал об архитектуре React-приложения, взаимодействии с Redux, экскурс в серверный рендеринг и обзор React Native.

читать книгу

05

Разработка веб-приложений в ReactJS

Райан Вайс, Адам Хортон (2016)

Книга начинается с базовых понятий, а затем переходит к более сложным темам, таким как валидация форм и проектирование полноценного приложения, включающего в себя все этапы проектирования. Также книга познакомит вас с несколькими способами реализации впечатляющей анимации с помощью ReactJS. Издание предназначено хорошо разбирающимся в основах JavaScript веб-разработчикам, у которых есть желание узнать, что ReactJS способен привнести в архитектуру современного приложения.

читать книгу

06

Изучаем React

Кирупа Чиннатамби (2018)

Второе, обновленное, издание снискавшей множество положительных отзывов на Amazon книги известного преподавателя основ веб-разработки, автора обучающего Youtube-канала Кирупы Чиннатамби. Эта книга позволит вам освоить разработку современных веб-приложений с использованием React и Redux. До выхода этой книги считалось, что освоить React самостоятельно, да еще и новичку, практически невозможно. Однако благодаря свежему взгляду и легкому стилю изложения автора этой книги сотни веб-разработчиков по всему миру признали, что освоили тему легко и быстро. На то, чтобы приступить к созданию первых собственных приложений на React, вам потребуется буквально несколько минут чтения. Дерзайте!, у которых есть желание узнать, что ReactJS способен привнести в архитектуру современного приложения.

читать книгу

07

Эффективный TypeScript: 62 способа улучшить код

Дэн Вандеркам (2021)

«Эффективный TypeScript» необходим тем, кто уже имеет опыт работы с JavaScript. Цель этой книги – не научить пользоваться инструментами, а помочь повысить профессиональный уровень. TypeScript представляет собой не просто систему типов, а набор служб языка, удобных в использовании. Он повышает безопасность разработки в JavaScript, делает работу увлекательнее и проще.

читать книгу

08

React 17. Разработка веб-приложений на JavaScript

Дронов В. (2022)

Книга посвящена программированию веб-приложений на языке JavaScript с применением популярного веб-фреймворка React. Дается вводный курс, описывающий разработку несложного веб-приложения — списка запланированных дел. Описываются базовые инструменты: создание и настройка React-проекта, написание компонентов, язык JSX, передача данных между компонентами и создание веб-форм. Рассматриваются полезные дополнительные библиотеки: React Router (навигация), Redux, React Redux и Redux Toolkit (централизованное хранилище данных), Formik (быстрая разработка веб-форм), Yup (валидация), React Reveal (анимационные эффекты) и др.

читать книгу

09

React быстро. Веб-приложения на React, JSX, Redux и GraphQL

Мардан А. (2019)

Познакомьтесь с React, который ускоряет тяжелые веб-приложения, улучшая поток данных между компонентами пользовательского интерфейса.

читать книгу

Vue

01

Vue.js в действии

Эрик Хэнчетт, Бенджамин Листуон (2018)

Книга «Vue.js в действии» рассказывает о создании быстрых и эластичных пользовательских интерфейсов для Интернета. Освоив ее, вы напишете полноценное приложение для интернет-магазина, где будут присутствовать списки товаров, админка, а также организован полноценный процесс онлайнового заказа.

Angular

01

Angular и TypeScript. Сайтостроение для профессионалов

Яков Файн, Антон Моисеев (2018)

Если вы занимаетесь веб-разработкой – от веб-клиентов до полнофункциональных одностраничных приложений, – то фреймворк Angular будет для вас спасением. Этот ультрасовременный инструмент полностью интегрирован со статически типизированным языком TypeScript, который отлично вписывается в экосистему JavaScript. Читая книгу, вы научитесь: проектировать и строить модульные приложения, правильно транспилировать TypeScript в JavaScript и пользоваться новейшими инструментами JavaScript – в частности npm, Karma и Webpack.

читать книгу

01

Angular для профессионалов

Адам Фримен (2017)

Адам Фримен начинает с описания MVC и его преимуществ, затем показывает, как эффективно использовать Angular, охватывая все этапы, начиная с основ и до самых передовых возможностей, которые кроются в глубинах этого фреймворка. Каждая тема изложена четко и лаконично, снабжена большим количеством подробностей, которые позволят вам стать действительно эффективными. Наиболее важные фичи даны без излишних подробностей, но содержат всю необходимую информацию, чтобы вы смогли обойти все подводные камни.

читать книгу

03

Стек MEAN. Mongo, Express, Angular, Node

Холмс С. (2017)

Книга о разработке приложений при помощи стека MEAN, объединяющего новейшие технологии, связанные с языком JavaScript

читать книгу

PHP

01

Создаем динамические веб-сайты с помощью PHP, MySQL, JavaScript, CSS и HTML5

Робин Никсон (2018)

Устали от чтения книг по HTML, которые понятны только специалистам в этой области? Тогда самое время взять в руки
второе издание «Изучаем HTML, XHTML и CSS». Хотите изучить HTML, чтобы уметь создавать веб-страницы, о которых вы
всегда мечтали? Так, чтобы более эффективно общаться с друзьями, семьей и привередливыми клиентами? Тогда эта книга
для вас. Прочитав ее, вы изучите все секреты создания веб-страниц. Вы узнаете, как работают профессионалы, чтобы
получить визуально привлекательный дизайн, и как максимально эффективно использовать HTML, CSS и XHTML, чтобы
создавать такие веб-страницы, мимо которых не пройдет ни один пользователь. Используя новейший стандарт HTML5, вы
сможете поддерживать и совершенствовать свои веб-страницы в соответствии с современными требованиями, тем самым
обеспечивая их работу во всех браузерах и мобильных устройствах.

02

Создаем динамические веб-сайты на PHP

Кевин Татро, Питер Макинтайр (2020)

Вы начнете с общего описания технологии и постепенно перейдете к синтаксису языка, приемам программирования и другим важным деталям. При этом будут использоваться примеры, демонстрирующие и правильное применение языка, и распространенные идиомы. Предполагается, что читатель уже имеет опыт работы с HTML.

читать книгу

03

Программирование на PHP в примерах и задачах

Алексей Васильев (2021)

С этой книгой освоить PHP может практически каждый, ведь в ней собраны абсолютно все знания, необходимые новичку, – от базовых понятий, истории языка и его семантики до удобно скомпонованных конкретных примеров, позволяющих не только лучше усвоить пройденный материал, но и приступить к самостоятельной реализации проектов на PHP.

Python

01

A Byte of Python (Укус Питона)

К. Сваруп (перевод — Владимир Смоляр) (2020)

Книга может служить учебным пособием или руководством по языку Python для начинающих. Она замечательно написана, основные понятия доступно объясняются на наглядных примерах. Книга очень популярна среди тех, кто планирует учить Python.

читать книгу

02

Большая книга проектов Python

Эл Свейгарт (2021)

Вы уже освоили основы синтаксиса Python и готовы программировать? Отточите свои навыки на самых интересных задачах – графике, играх, анимации, расчетах и многом другом. Вы можете экспериментировать, добавляя к готовым проектам собственные детали.

читать книгу

03

Python. Чистый код для продолжающих

Эл Свейгарт (2021)

«Python. Чистый код для продолжающих» – это не набор полезных советов и подсказок по написанию чистого кода. Вы узнаете о командной строке и других инструментах профессионального разработчика: средствах форматирования кода, статических анализаторах и контроле версий. Вы научитесь настраивать среду разработки, давать имена переменным и функциям, делающие код удобочитаемым, грамотно комментировать и документировать ПО, оценивать быстродействие программ и сложность алгоритмов, познакомитесь с ООП. Такие навыки поднимут вашу ценность как программиста не только в Python, но и в любом другом языке.

читать книгу

04

Путь Python. Черный пояс по разработке, масштабированию, тестированию и развертыванию

Джульен Данжу (2019)

«Путь Python» позволяет отточить ваши профессиональные навыки и узнать как можно больше о возможностях самого популярного языка программирования. Эта книга написана для разработчиков и опытных программистов. Вы научитесь писать эффективный код, создавать лучшие программы за минимальное время и избегать распространенных ошибок.

читать книгу

05

Python, например

Никола Лейси (2019)

В книге 150 задач, которые плавно перенесут читателя от изучения основ языка к решению более сложных вещей. Руководство подойдет всем, у кого голова идет кругом от технического жаргона и пространных объяснений – автор уверен, что учить можно и без этого.

читать книгу

06

Python. Лучшие практики и инструменты

Тарек Зиаде, Михал Яворски (2019)

Авторы начинают с рассказа о новых возможностях Python 3.7 и продвинутых аспектах синтаксиса Python. Продолжают советами по реализации популярных парадигм, в том числе объектно-ориентированного, функционального и событийно-ориентированного программирования. Также авторы рассказывают о наилучших практиках именования, о том, какими способами можно автоматизировать развертывание программ на удаленных серверах. Вы узнаете, как создавать полезные расширения для Python на C, C++, Cython и CFFI.

читать книгу

07

Изучаем Python: программирование игр, визуализация данных, веб-приложения

Эрик Мэтиз (2021)

В первой части книги вы познакомитесь с основными концепциями программирования, такими как переменные, списки, классы и циклы, а простые упражнения познакомят вас с шаблонами чистого кода. Вы узнаете, как делать программы интерактивными и как протестировать код, прежде чем добавлять в проект. Во второй части вы примените новые знания на практике и создадите три проекта: аркадную игру в стиле Space Invaders, визуализацию данных с удобными библиотеками Python и простое веб-приложение, которое можно быстро развернуть онлайн.

читать книгу

08

Python. Быстрый старт

Джейми Чан (2020)

В книге сложные понятия разбиты на простые шаги – вы сможете освоить язык Python, даже если никогда раньше не занимались программированием; все фундаментальные концепции подкреплены реальными примерами; вы получите полное представление о Python: структуры управления, методы обработки ошибок, концепции объектно-ориентированного программирования и т. д.; в конце книги вас ждет интересный проект, который поможет усвоить полученные знания.

читать книгу

09

Python. Экспресс-курс

Наоми Седер (2018)

С помощью этой книги вы можете быстро перейти от основ к управлению и структурам данных, чтобы создавать, тестировать и развертывать полноценные приложения. Наоми Седер рассказывает не только об основных особенностях языка Python, но и его объектно-ориентированных возможностях, которые появились в Python 3.

читать книгу

10

Создание настольных Python приложений с графическим интерфейсом пользователя

Тимур Машнин (2021)

В этой книге вы познакомитесь с различными фреймворками Python для создания настольных приложений с графическим интерфейсом пользователя, такими как PyQt, PySide, Tkinter, Kivy, WxPython и Dear PyGUI.

читать книгу

11

Начинаем программировать на Python. 5-е издание

Гэддис Тони (2022)

Изложены принципы программирования, с помощью которых читатель приобретет навыки алгоритмического решения задач на языке Python, даже не имея опыта программирования. Дано краткое введение в компьютеры и программирование. Рассмотрен ввод, обработка и вывод данных, управляющие структуры и булева логика, структуры с повторением, функции, файлы и исключения, списки и кортежи, строковые данные, словари и множества, классы и ООП, наследование, рекурсия, программирование интерфейса, функциональное программирование и др.

читать книгу

14

Однострочники Python: лаконичный и содержательный код

Майер К (2022)

Здесь вы найдете приёмы и хитрости написания кода, регулярные выражения, примеры использования однострочников в различных сферах, а также полезные алгоритмы. Подробные пояснения касаются в том числе и важнейших понятий computer science, что поспособствует вашему росту в программировании и аналитике.

читать книгу

R

01

Глубокое обучение на R

Франсуа Шолле (2018)

Познакомьтесь с глубоким обучением на практических примерах из самых разнообразных областей. Книга делится на две части в первой даны теоретические основы, вторая посвящена решению конкретных задач. Это позволит вам не только разобраться в основах DL, но и научиться использовать новые возможности на практике.

читать книгу

02

R в действии. Анализ и визуализация данных на языке R

Роберт И. Кабаков (2012)

«R в действии» – это руководство по обучению этому языку с особым вниманием к практическим задачам. В данной книге представлены полезные примеры статистической обработки данных и описаны изящные методы работы с запутанными и неполными данными, а также с данными, распределение которых отлично от нормального и с которыми трудно справиться обычными методами.

читать книгу

03

Искусство программирования на R. Погружение в большие данные

Мэтлофф Н. (2019)

Эта книга знакомит нас разработкой программного обеспечения на R от базовой информации — типы и структуры данных — до расширенных тем, таких как замыкания, рекурсия и анонимные функции.

читать книгу

04

Машинное обучение на R: экспертные техники для прогностического анализа

Ланц Б. (2020)

Книга является руководством, которое поможет применять методы машинного обучения в решении ежедневных задач. Бретт Ланц научит всему необходимому для анализа данных, формирования прогнозов и визуализации данных.

читать книгу

SWIFT

01

Swift. Основы разработки приложений под iOS, iPadOS и macOS

Василий Усов (2021)

Чтобы начать писать код, вам потребуются только эта книга, компьютер и желание учиться. Все базовые концепции программирования и основы синтаксиса объясняются доступным языком, поэтому если вы никогда раньше не занимались разработкой, то эта книга — отличный старт. Теория чередуется с практическими примерами и кодом — так вы сразу сможете связать абстрактные понятия с реальными ситуациями. В каждой главе вас ждут тесты и домашние задания, которые помогут закрепить материал.

читать книгу

02

Язык Swift

Айк Харазян (2016)

Книга предназначена для самостоятельного изучения Swift – нового языка программирования для iOS и OS X. Описана версия Swift 2.0. Материал построен по принципу от более легкого к сложному, изложение сопровождается большим количеством листингов кода, для тестирования и отладки используется новая среда быстрой разработки Playground. Объяснены основы Swift, синтаксис языка и его особенности. Описаны типы данных, условные выражения, циклы, массивы, функции, кортежи, базовые операторы и другие стандартные конструкции. Кратко даны основы объектно-ориентированного программирования. Подробно рассмотрены более сложные или специфические для Swift конструкции: перечисления, замыкания, опциональные типы, классы, структуры, встроенные и обобщенные типы, расширения, протоколы, расширенные операторы и др.

читать книгу

03

Swift для детей. Самоучитель по созданию приложений для iOS

Глория Уинквист, Маккарти Мэтт (2018)

Книга позволит начать программировать, освоив удобный и функциональный язык Swift, на котором пишут программы на устройства Apple. Вы создадите в учебной площадке Xcode Playground игру и напоминалку о днях рождения друзей. Двигайтесь по понятным инструкциям и сразу оценивайте результаты работы. Для детей от 10 лет.

читать книгу

C

01

Экстремальный Cи. Параллелизм, ООП и продвинутые возможности

Камран Амини (2019)

Книга «Экстремальный Cи» научит вас пользоваться продвинутыми низкоуровневыми возможностями языка для создания эффективных систем, чтобы вы смогли стать экспертом в программировании на Cи.

читать книгу

02

Программирование на C в примерах и задачах

Алексей Васильев (2020)

Книга включает в себя полный перечень сведений о языке Си, представленный в рамках обучающей методики от лучшего российского автора учебников по языкам программирования Алексея Васильева. В каждой главе читатель найдет подробный разбор примеров, а также задачи для самостоятельного решения и комментарии автора.

читать книгу

C++

01

C++. Практика многопоточного программирования

Энтони Уильямс (2019)

Энтони Уильямс, эксперт конкурентной обработки, рассматривает примеры и описывает практические задачи, а также делится секретами, которые пригодятся всем, в том числе и самым опытным разработчикам. Теперь вам доступны все аспекты конкурентной обработки на C++17 – от создания новых потоков до проектирования полнофункциональных многопоточных алгоритмов и структур данных.

читать книгу

02

Программирование на C++ в примерах и задачах

Алексей Васильев (2017)

Книга влючает в себя полный набор сведений о языке C++, необходимых для успешного анализа и составления эффективных программных кодов. Материал излагается последовательно и дополняется большим количеством примеров, практических задач и детальным разбором их решений. К каждому разделу прилагается обширный список задач для самостоятельного решения.

читать книгу

03

Объектно-ориентированное программирование в C++

Роберт Лафоре (2022)

В книге есть все: основные принципы языка, готовые полномасштабные приложения, небольшие примеры, поясняющие теорию, и множество полезных иллюстраций. Книга пользуется стабильным успехом в учебных заведениях благодаря тому, что содержит более 100 упражнений, позволяющих проверить знания по всем темам.

читать книгу

04

Думай как программист. Креативный подход к созданию кода. C++ версия

Спрол Антон (2018)

В этой книге вы найдете: примеры задач и их решения, множество интересных упражнений, полезные выводы и рекомендации. В ней нет: жестких инструкций, готовых шаблонов и скучных объяснений

читать книгу

C#

01

Принципы, паттерны и методики гибкой разработки на языке C#

Роберт Мартин, Мика Мартин (2011)

Цель данной книги – собрать воедино все методики гибкой разработки и показать их работоспособность. Применяя объектно-ориентированный подход, авторы рассматривают конкретные паттерны, применяемые к проектированию приложений, описывают методы рефакторинга и способы эффективного использования различных видов UML-диаграмм. Взяв какую-либо реальную задачу, они показывают, какие ошибки и ложные ходы можно допустить в ходе ее решения и как применение правильных методик позволяет добиться успеха.

читать книгу

02

Программирование на C# для начинающих. Основные сведения

Алексей Васильев (2022)

В этой книге Алексей Васильев, доктор физико-математических наук и автор популярных российских самоучителей по программированию, приглашает читателей ознакомиться с основами языка C#. Прочитав ее, вы узнаете историю языка, его структуру, ознакомитесь с типами данных и переменными, операторами, циклами и множество другой полезной информации, необходимой для работы с этим языком.

Java

01

Java для всех

Алексей Васильев (2019)

Вы изучите базовые типы, управляющие инструкции, особенности описания классов и объектов в Java, создание интерфейсов, лямбда-выражения, обобщенные классы. Каждая глава содержит примеры кода, которые в свою очередь снабжены как построчными пояснениями, так и подробным разбором примера программы. Примеры, используемые в этой книге, пригодятся вам в дальнейшей работе с языком Java.

читать книгу

02

Программирование на Java для начинающих

Алексей Васильев (2022)

Полный спектр сведений о языке Java с примерами и разбором задач от автора учебников-бестселлеров по языкам программирования Алексея Васильева. С помощью этой книги освоить язык Java сможет каждый желающий – от новичка до специалиста.

читать книгу

03

Эффективный Java. Тюнинг кода на Java 8, 11 и дальше

Скотт Оукс (2020)

Скотт Оукс – признанный эксперт по языку Java – уверен, что если вы хотите работать с этим языком, то обязаны понимать, как выполняется код в виртуальной машине Java, и знать, какие настройки влияют на производительность.Вы сможете разобраться в производительности приложений Java в контексте как JVM, так и платформы Java, освоите средства, функции и процессы, которые могут повысить производительность в LTS-версиях Java, и познакомитесь с новыми возможностями.

читать книгу

04

Java в облаке. Spring Boot, Spring Cloud, Cloud Foundry

Кеннет Бастани, Джош Лонг (2017)

Вы не только узнаете, как устроены современные облачные технологии для серьезных решений, но и освоите основы микросервисной архитектуры, непрерывной интеграции и доставки, сможете целиком переработать накопившийся унаследованный код и достойно отвечать на самые сложные вызовы, которые ставит перед нами современная Java-экосистема.

читать книгу

05

Система модулей Java

Парлог Николай (2019)

Вы освоите наилучшие практики модульного проектирования, отладки приложения и его развертывания перед сдачей в продакшен.

читать книгу

06

Основы программирования с Java

Тимур Машнин (2022)

Эта книга даст понимание основных элементов программирования на Java и абстракции данных с использованием объектно-ориентированного подхода. С этой книгой Вы научитесь писать программы с использованием переменных, массивов, управляющих операторов, циклов, рекурсии, абстракции данных и объектов в интегрированной среде разработки. Вы изучите основы языка программирования Java, познакомитесь с его синтаксисом, типами данных, объектами и классами и многим другим.

читать книгу

07

Введение в объектно-ориентированный дизайн с Java

Тимур Машнин (2022)

Эта книга ориентирована на тех, кто уже знаком с языком программирования Java и хотел бы углубить свои знания и изучить объектно-ориентированный анализ и проектирование программного обеспечения. Вы познакомитесь с основными принципами и паттернами объектно-ориентированного дизайна, используемыми при разработке программных систем Java. Научитесь моделировать системы Java с помощью UML диаграмм, познакомитесь с основными понятиями и принципами объектно-ориентированного подхода, изучите порождающие, структурные и поведенческие шаблоны проектирования. Вы узнаете, как создавать модульное, гибкое и многоразовое программное обеспечение, применяя объектно-ориентированные принципы и шаблоны проектирования.

читать книгу

LUA

01

Программирование на языке Lua

Роберту Иерузалимски (2013)

Важной особенностью книги является огромный спектр охватываемых тем – практически все, что может понадобиться при использовании Lua. Также к каждой главе дается несколько упражнений, позволяющих проверить свои знания.Книга будет полезна широкому кругу программистов и разработчиков игр. Для понимания последних глав книги необходимо знание языка С, но для большинства остальных глав достаточно базовых знаний о программировании.

читать книгу

GO

01

Head First. Изучаем Go

Джей Макгаврен (2019)

Основная задача Go – эффективная работа с сетевыми коммуникациями и многопроцессорной обработкой, но код на этом языке пишется и читается не сложнее чем на Python и JavaScript. Простые примеры позволят познакомиться с языком в действии и сразу приступить к программированию на Go. Так что вы быстро освоите общепринятые правила и приемы, которые позволят вам называть себя гофером.

читать книгу

02

Golang для профи

Михалис Цукалос (2021)

Книга охватывает нюансы Go с подробными руководствами по типам и структурам, пакетам, параллелизму, сетевому программированию, дизайну компиляторов, оптимизации и многому другому. Каждая глава заканчивается упражнениями и ресурсами, чтобы полностью внедрить ваши новые знания.

читать книгу

Kotlin

01

Kotlin в действии

Дмитрий Жемеров, Светлана Исакова (2017)

Данная книга научит вас пользоваться языком Kotlin для создания высококачественных приложений. Написанная создателями языка – разработчиками в компании JetBrains, – эта книга охватывает такие темы, как создание предметно-ориентированных языков, функциональное программирование в JVM, совместное использование Java и Kotlin и др.

читать книгу

02

Head First. Kotlin

Дон Гриффитс, Дэвид Гриффитс (2020)

Эта книга даст вам все необходимое – от азов языка до продвинутых методов. А еще вы сможете попрактиковаться в объектно-ориентированном и функциональном программировании. Если вы действительно хотите понять, как устроен Kotlin, то эта книга для вас!

читать книгу

03

Spring Boot по-быстрому. Создаём облачные приложения на Java и Kotlin

Марк Хеклер (2021)

Марк Хеклер из VMware, компании, создавшей Spring, проведет вас по всей архитектуре Spring Boot, охватив такие вопросы, как отладка, тестирование и развертывание. Если вы хотите быстро и эффективно разрабатывать нативные облачные приложения Java или Kotlin на базе Spring Boot с помощью реактивного программирования, создания API и доступа к разнообразным базам данных – эта книга для вас.

читать книгу

04

Kotlin. Программирование для профессионалов

Джош Скин, Дэвид Гринхол (2018)

Книга Джоша Скина и Дэвида Гринхола основана на популярном курсе Kotlin Essentials от Big Nerd Ranch. Яркие и полезные примеры, четкие объяснения ключевых концепций и основополагающих API не только знакомят с языком Kotlin, но и учат эффективно использовать его возможности, а также позволяют освоить среду разработки IntelliJ IDEA от JetBrains.

читать книгу

SQL

01

SQL. Сборник рецептов

Энтони Молинаро, Роберт де Грааф (2021)

Рассмотрены готовые рецепты для решения практических задач при работе с СУБД Oracle, DB2, SQL Server, MySQL и PostgreSQL. Описаны извлечение записей из таблиц, сортировка результатов запросов, принципы работы с несколькими таблицами, обработка запросов с метаданными. Рассказывается о способах поиска данных средствами SQL, о составлении отчетов и форматировании результирующих множеств, работе с иерархическими запросами. Рассматривается использование оконных функций, обобщенных табличных выражений (ОТВ), сбор данных в блоки, формирование гистограмм, текущих сумм и подсумм, агрегация скользящего диапазона значений. Описан обход строки и ее синтаксический разбор на символы, приведены способы упрощения вычислений внутри строки. Во втором издании учтены все изменения в синтаксисе и архитектуре актуальных реализаций SQL.

читать книгу

02

Изучаем SQL

Алан Бьюли (2007)

Книга Алана Бьюли, эксперта по языку SQL, – прекрасный учебник для тех, кто еще не знает, но хочет освоить этот язык. Книга не только позволит приобрести начальные знания, но и расскажет о наиболее часто употребляемых мощных средствах языка SQL, используемых опытными программистами. Многие книги, посвященные SQL, грешат скучным изложением основ. Здесь же автор в стиле живого рассказа обсуждает SQL-выражения и блоки, различные типы условий, показывает, как посредством соединения таблиц создавать запросы к нескольким таблицам, рассматривает наборы данных и как они могут взаимодействовать в запросах, демонстрирует встроенные и агрегатные функции, показывает, как и где используются подзапросы.

читать книгу

03

SQL: быстрое погружение

Шилдс У. (2022)

Книга «SQL: быстрое погружение» идеальна для всех, кто ищет новые перспективы карьерного роста; для разработчиков, которые хотят расширить свои навыки и знания в программировании; для любого человека, даже без опыта, кто хочет воспользоваться возможностями будущего, в котором будут править данные.

читать книгу

RUBY

01

Ruby on Rails для начинающих. Изучаем разработку веб-приложений на основе Rails

Майкл Хартл (2015)

Известный автор и ведущий разработчик Rails Майкл Хартл познакомит вас с Rails на примере разработки трех приложений. Автор рассказывает не только о Rails, но также описывает основы Ruby, HTML, CSS и SQL, которые пригодятся вам при разработке своих веб-приложений.

читать книгу

02

Путь Ruby

Хэл Фултон, Андрэ Арко (2015)

Издание охватывает версию Ruby 2.1 и содержит более 400 примеров, отвечающих на вопрос «Как это делается в Ruby?». Все примеры сопровождаются подробным описанием задачи и технических ограничений. Затем дается пошаговое объяснение одного хорошего решения с детальными комментариями, позволяющими лучше усвоить материал.

читать книгу

03

Самоучитель Ruby

Игорь Симдянов (2020)

Дан разбор синтаксических конструкций: операторов, переменных, констант, конструкций ветвления и циклов, блоков и итераторов. Подробно описаны объектно-ориентированные возможности Ruby: классы, модули, объекты и методы. Показано практическое применение языка Ruby в веб-программировании и автоматическом тестировании. Для закрепления материала в конце глав приводятся задания. С помощью книги можно не только освоить язык Ruby, но и Ruby on Rails, Sinatra, RSpec, MiniTest и Cucumber.

читать книгу

04

Семь языков за семь недель. Практическое руководство по изучению языков программирования

Брюс А. Тейт (2017)

Вы познакомитесь с динамической типизацией, которая делает языки Ruby, Python и Perl такими гибкими. Постигнете систему прототипов, лежащую в основе языка JavaScript. Увидите, как сопоставление с образцом в языке Prolog сказалось на формировании языков Scala и Erlang. Узнаете, чем функциональное программирование на языке Haskell отличается от программирования на языках семейства Lisp, включая Clojure.

читать книгу

RUBY

01

Git для профессионального программиста

Чакон С., Штрауб Б. (2019)

Книга о системе совместной работы над одним проектом.

читать книгу

02

Практическое руководство. Управление и контроль версий в разработке программного обеспечения

Фишерман Л. (2021)

Данная книга представляет собой подробное практическое руководство по Git, в котором описывается Git и приводится разбор конкретных ситуаций и применений, например, как изменения из одной ветки разработки включить в другую ветку, но не все. Изложение начинается с самых азов, никакой предварительной подготовки не требуется: по ходу изложения даются все необходимые определения и пояснения.

читать книгу

Алгоритмы

01

Грокаем алгоритмы. Иллюстрированное пособие для программистов и любопытствующих

Адитья Бхаргава (2016)

Алгоритмы – это всего лишь пошаговые алгоритмы решения задач, и большинство таких задач уже были кем-то решены, протестированы и проверены. Можно, конечно, погрузиться в глубокую фило¬софию гениального Кнута, изучить многостраничные фолианты с доказательствами и обоснованиями, но хотите ли вы тратить на это свое время? Откройте великолепно иллюстрированную книгу, и вы сразу поймете, что алгоритмы – это просто. А грокать алгоритмы – это веселое и увлекательное занятие.

02

Алгоритмы и структуры данных

Никлаус Вирт (1985)

В классическом учебнике тьюринговского лауреата Н. Вирта аккуратно, на тщательно подобранных примерах прорабатываются основные темы алгоритмики – сортировка и поиск, рекурсия, динамические структуры данных. Перевод на русский язык выполнен заново, все рассуждения и программы проверены и исправлены, часть примеров по согласованию с автором переработана с целью максимального прояснения их логики (в том числе за счет использования цикла Дейкстры). Нотацией примеров теперь служит Оберон/Компонентный Паскаль – наиболее совершенный потомок старого Паскаля по прямой линии. Большая часть материала книги составляет необходимый минимум знаний по алгоритмике не только для программистов-профессионалов, но и любых других специалистов, активно использующих программирование в работе.

читать книгу

03

Алгоритмы и структуры данных. Извлечение информации на языке Java

Аллен Б. Доуни (2017)

Изучите, как следует реализовывать эффективные алгоритмы на основе важнейших структур данных на языке Java, а также как измерять производительность этих алгоритмов. Каждая глава сопровождается упражнениями, помогающими закрепить материал. Научитесь работать со структурами данных, например, со списками и словарями, разберитесь, как они работают. Напишите приложение, которое читает страницы Википедии, выполняет синтаксический разбор и обеспечивает навигацию по полученному дереву данных. Проанализируете код и учитесь прогнозировать, как быстро он будет работать и сколько памяти при этом потреблять. Напишите классы, реализующие интерфейс Map, пользуйтесь при этом хеш-таблицей и двоичным деревом поиска. Создадите простой веб-поисковик с собственным поисковым роботом: он будет индексировать веб-страницы, сохранять их содержимое и возвращать нужные результаты.

читать книгу

04

Алгоритмы. Самый краткий и понятный курс

Панос Луридас (2020)

Если вам нужно разобраться в том, что из себя представляют алгоритмы и графы, как они работают и какими бывают, эта книга для вас. Ее автор, Панос Луридас, уже много лет использует алгоритмы при проектировании программного обеспечения, криптографии, машинном обучении и является научным сотрудником Афинского университета экономики и бизнеса. Очень доступным даже для новичков языком он знакомит читателей с концепцией алгоритмов и принципами их работы – для чтения книги достаточно базового школьного образования.

читать книгу

05

Совершенный алгоритм. Основы

Рафгарден Т. (2019)

Алгоритмы — это сердце и душа computer science. Без них не обойтись, они есть везде — от сетевой маршрутизации и расчетов по геномике до криптографии и машинного обучения.

читать книгу

06

Совершенный алгоритм. Графовые алгоритмы и структуры данных

Рафгарден Т. (2019)

Во второй книге автор расскажет о графовом поиске и его применении, алгоритме поиска кратчайшего пути, а также об использовании и реализации некоторых структур данных: куч, деревьев поиска, хеш-таблиц и фильтра Блума.

читать книгу

Блокчейн

01

Разработка смарт-контрактов в Ethereum

Тимур Машнин (2020)

Эта книга рассказывает о принципах работы Ethereum, отличии Ethereum от Bitcoin. Вы узнаете что такое децентрализованные приложения Dapp и смарт-контракты, познакомитесь с инструментами разработки Dapp. Изучите высокоуровневый язык Solidity создания смарт-контрактов для виртуальной машины Ethereum. Познакомитесь со средой разработки Remix. Узнаете о практическом применении смарт-контрактов, стандартах ERC20, ERC-721, ERC-1155 и EIP-3156.

читать книгу

02

Осваиваем биткоин. Программирование блокчейна

Андреас М. Антонопулос (2017)

Приведено описание технических основ биткойна и других валют, описание децентрализованной сети биткойн, пиринговой архитектуры, жизненного цикла транзакций и принципов обеспечения безопасности. Показаны методики разработки блокчейн-приложений с многочисленными примерами кода.

03

Блокчейн. Разработка приложений

Нараян Прасти (2017)

Рассказано о том, что такое децентрализованные приложения и как они работают. Рассмотрены принципы работы платформы Ethereum. Показано, как писать смарт-контракты и использовать интерактивную консоль Geth для размещения и передачи транзакций. Описана библиотека web3.js, ее импорт, подключение к Geth и использование в среде Node.js или на стороне клиента. Продемонстрировано, как создать сервис кошелька и управлять им, как компилировать смарт-контракты и развертывать их при помощи web3.js и EthereumJS. Описаны язык программирования Solidity и среда разработки Truffle. Приведено руководство по разработке собственного блокчейна и децентрализованных приложений корпоративного уровня.

читать книгу

04

Создание смарт-контрактов Solidity для блокчейна Ethereum. Практическое руководство

Александр Вячеславович Фролов (2019)

Эта книга поможет быстро приступить к созданию смарт-контактов Solidity и распределенных приложений DApp для блокчейна Ethereum. Она состоит из 12 уроков с практическими заданиями. Выполнив их, читатель сможет создавать собственные локальные узлы Ethereum, публиковать смарт-контракты и вызывать их методы, обмениваться данными между реальным миром и смарт-контрактами с помощью оракулов, работать с сетью Rinkeby.

читать книгу

05

Ethereum: работа с сетью, смарт-контракты и распределенные приложения

Алексей Бурков (2020)

В представленном учебнике рассматривается создание смарт-контрактов для блокчейн-сети Ethereum на языке программирования Solidity в операционной системе Windows. Мы также опишем развертывание окружения для создания и тестирования смарт-контрактов и децентрализованных приложений (DApps). Более того, в завершение курса мы создадим свою собственную блокчейн-сеть.

читать книгу

06

Блокчейн: архитектура, криптовалюты, инструменты разработки, смарт-контракты

Имран Башир (2020)

Книга познакомит вас с теоретическими и практическими аспектами технологии блокчейн. Углубленно рассмотрены архитектура блокчейна, децентрализация, симметричное шифрование и шифрование с открытым ключом. Описаны смарт-контракты и различные блокчейн-платформы, в частности Bitcoin, Ethereum, Hyperledger Fabric. Также уделено внимание инструментам разработки и фреймворкам для работы с децентрализованными приложениями.

читать книгу

07

Грокаем технологию Биткоин

Калле Розенбаум (2019)

«Грокаем технологию Биткоин» на наглядных схемах и ярких примерах учит мыслить по-новому. Вы узнаете, как на самом деле происходит майнинг, возникают биткоины, как войти в сеть Биткоин и как функционирует цифровой кошелек. Основы технологии Биткоин; хеш-функции и цифровые подписи; криптография и алгоритмы шифрования; анатомия транзакций; верификация и пропускная способность; хард- и софт-форки.

читать книгу

08

Основы блокчейна

Дрешер Д. (2018)

Книга подробно рассматривает технические концепции технологии блокчейн, такие как пиринговые и распределенные системы, структуры данных, транзакции, криптография и хэш-значения, целостность систем и достижение консенсуса в распределенной среде. Книга написана в диалоговом стиле, без использования компьютерного и математического жаргона.

читать книгу

Кодинг

01

Чистый код: создание, анализ и рефакторинг

Роберт Мартин (2013)

Эта книга посвящена хорошему программированию. Она полна реальных примеров кода. Мы будем рассматривать код с различных направлений: сверху вниз, снизу вверх и даже изнутри. Прочитав книгу, вы узнаете много нового о коде. Более того, вы научитесь отличать хороший код от плохого. Вы узнаете, как писать хороший код и как преобразовать плохой код в хороший.

читать книгу

02

Чистая архитектура. Искусство разработки программного обеспечения

Роберт Мартин (2018)

«Идеальный программист» и «Чистый код» – легендарные бестселлеры Роберта Мартина – рассказывают, как достичь высот профессионализма. «Чистая архитектура» продолжает эту тему, но не предлагает несколько вариантов в стиле «решай сам», а объясняет, что именно следует делать, по какой причине и почему именно такое решение станет принципиально важным для вашего успеха.

читать книгу

03

Совершенный код: Практическое руководство по разработке программного обеспечения

Роберт Мартин (2018)

Изложенные в книге методики и стратегии помогут вам: проектировать с минимальной сложностью и максимальной продуктивностью извлекать выгоду из групповой разработки применять методики защитного программирования, позволяющие избежать ошибок совершенствовать свой код применять методики конструирования, наиболее подходящие для вашего проекта быстро и эффективно производить отладку своевременно и быстро обнаруживать критические проблемы проекта обеспечивать качество на всех стадиях проекта.

читать книгу

Работа

01

Программист-фанатик

Чед Фаулер (2009)

Книга Программист-Фанатик была выпущена в 2009, а перевод на русский язык появился только в 2015 году. Но книга по-прежнему актуальна, потому что рассказывает о мотивации, психологии программирования и отношения с руководством и коллегами.

02

Идеальный программист. Как стать профессионалом разработки ПО

Роберт Мартин (2011)

В этой книге Роберт Мартин, автор бестселлера «Чистый код», рассказывает о том, что значит «быть профессиональным программистом», описывая методы, инструменты и подходы для разработки «идеального ПО». Книга насыщена практическими советами в отношении всех аспектов программирования: от оценки проекта и написания кода до рефакторинга и тестирования.

03

Чистый Agile. Основы гибкости

Роберт Мартин (2020)

Agile – это подборка методов и инструментов, помогающая небольшим командам программистов управлять небольшими проектами, но приводящая к большим результатам. Пять десятков лет работы с проектами всех мыслимых видов и размеров позволяют Роберту показать, как на самом деле должен работать Agile. Книга «Чистый Agile» расскажет, как это делать разработчикам, тестировщикам, руководителям, менеджерам проектов и клиентам.

читать книгу

04

Карьера программиста

Гэйл Лакман Макдауэлл (2015)

Книга «Карьера программиста» основана на опыте практического участия автора во множестве собеседований, проводимых лучшими компаниями. Она поможет вам наилучшим образом подготовиться к собеседованию при приеме на работу программистом или руководителем в крупную IT-организацию или перспективный стартап. Основную часть книги составляют ответы на технические вопросы и задания, которые обычно получают соискатели на собеседовании в таких компаниях, как Google, Microsoft, Apple, Amazon и других. Рассмотрены типичные ошибки, которые допускают кандидаты, а также эффективные методики подготовки к собеседованию. Используя материал этой книги, вы с легкостью подготовитесь к устройству на работу в Google, Microsoft или любую другую ведущую IT-компанию.

05

Еще более эффективный Agile

Стив Макконнелл (2019)

Книга Стива Макконнелла, автора легендарных книг Code Complete и Software Estimation, объединяет реальный опыт сотен компаний. Воспользуйтесь простым и понятным руководством по современным и самым эффективным методам Agile.

читать книгу

06

Как пасти котов. Наставление для программистов, руководящих другими программистами

Дж. Ханк Рейнвотер (2002)

«Как пасти котов» – это книга о лидерстве и руководстве, о том, как первое совмещать со вторым. Это, если хотите, словарь трудных случаев управления IT-проектами. Программист подобен кошке, которая гуляет сама по себе. Так уж исторически сложилось. Именно поэтому так непросто быть руководителем команды программистов. Даже если вы еще месяц назад были блестящим и дисциплинированным программистом и вдруг оказались в роли менеджера, вряд ли вы знаете, с чего надо начать, какой выбрать стиль руководства, как нанимать и увольнять сотрудников, проводить совещания, добиваться своевременного выполнения задач. В таком случае без этой книги вам не обойтись.

читать книгу

07

Сам себе программист. Как научиться программировать и устроиться в Ebay?

Альтхофф Кори (2022)

Как за год научиться программировать и устроиться разработчиком в Ebay? На примере языка Python автор показывает, как буквально с первого урока можно приступить к созданию собственной небольшой программы, а к концу книги уверенно писать код. Помимо этого, вы узнаете, как успешно проходить собеседования на должность программиста в любой IT-компании и перестать сомневаться в собственных силах. Это прекрасное пособие для тех, кто хочет научиться программировать и планирует заниматься этим профессионально.

читать книгу

08

Open Source. Разработка программ с открытым исходным кодом

Эгбал Н. (2022)

Еще совсем недавно информация была качественной, и работало правило — чем ее больше, тем лучше. Внезапно информации стало слишком много. Чем больше уведомлений на нас сыпется, тем меньше мы обращаем на них внимания. В мире программного обеспечения с открытым исходным кодом все происходит точно так же. Работа подразумевает коллективное взаимодействие, но пишущие и публикующие код разработчики настолько перегружены разнообразными запросами, что просто перестают на них реагировать.

читать книгу

Фриланс

01

Remote. Офис не обязателен

Джейсон Фрайд, Дэвид Хайнемайер Хенссон (2013)

Возможно ли эффективно работать вне офиса? Джейсон Фрайд и Дэвид Хайнемайер Хенссон, основатели 37signals и авторы бестселлера Rework, по-новому отвечают на столь горячо обсуждаемый сейчас вопрос. Представив полный список проблем, связанных с удаленной работой, они убедительно доказывают, что преимущества работы вне офиса во многом перевешивают ее возможные недостатки.

читать книгу

02

7 навыков высокоэффективных людей: Мощные инструменты развития личности

Стивен Кови (2004)

Во-первых, эта книга излагает системный подход к определению жизненных целей, приоритетов человека. Эти цели у всех разные, но книга помогает понять себя и четко сформулировать жизненные цели. Во-вторых, книга показывает, как достигать этих целей. И в-третьих, книга показывает, как каждый человек может стать лучше. Причем речь идет не об изменении имиджа, а о настоящих изменениях, самосовершенствовании. Книга не дает простых решений и не обещает мгновенных чудес. Любые позитивные изменения требуют времени, работы и упорства. Но для людей, стремящихся максимально реализовать потенциал, заложенный в них природой, эта книга – дорожная карта.

читать книгу

03

Партизанские продажи. Как увести клиента у конкурентов

Мурат Тургунов (2012)

Эта книга призвана стать настольной для каждого менеджера по продажам, который не живет в иллюзиях и не ждет, пока клиенты сами к нему придут. Но так как фрилансерам тоже нужно уметь продавать, то вам это тоже подойдет.

читать книгу

04

Договориться можно обо всем! Как добиваться максимума в любых переговорах

Гэвин Кеннеди (1997)

Вы добиваетесь повышения зарплаты, выбиваете банковский кредит, продаете или покупаете квартиру/машину, пытаетесь заставить ребенка хорошо себя вести? Вся наша жизнь – сплошные переговоры, а раз так, станьте профессиональным переговорщиком! Например, таким, как Гэвин Кеннеди. Когда реальность сопротивляется вашим желаниям, вы сумеете добиться своего с помощью искусства грамотно вести переговоры.

читать книгу

05

Переговоры с монстрами. Как договориться с сильными мира сего

Игорь Рызов (1997)

В своей книге «Переговоры с монстрами» Игорь Рызов учит быть на равных с гуру бизнеса, чиновниками высокого уровня и авторитетными руководителями. «Монстрами» автор метафорически называет сильных переговорщиков, с которыми очень сложно заключить сделку на своих условиях.

читать книгу

06

Клиенты на всю жизнь

Карл Сьюэлл, Пол Браун (1998)

Книга являет собой практическое руководство по работе с клиентами (а попутно и по организации работы предприятия, маркетингу и мерчендайзингу). Сьюэлл рекомендует всем делать ставку на постоянных клиентов, поскольку настрой на разовые продажи делает бизнес неустойчивым. И убедительно доказывает: чтобы удержать клиента, необходимо пересмотреть свои взгляды не только на обслуживание как таковое, но и на организацию работы, оплату труда, чистоту помещений, дизайн ландшафта и многие другие мелочи.

читать книгу

07

Борьба за внимание. Книга-практикум для маркетологов, фрилансеров и предпринимателей

Белоусов Макс Владимирович (2022)

Автор описывает уникальную систему, которая поможет читателю выйти на новый уровень мышления, научиться зарабатывать больше. Ты узнаешь, как применять техники психологии в маркетинге, выпустить на рынок востребованный продукт, увеличить прибыль и масштабироваться.

читать книгу

08

Записки удаленщика. Как стать крутым фрилансером

Белоусов Макс Владимирович (2021)

С чего начать выход на фриланс? Какое направление выбрать? Как создать первое портфолио, правильно его оформить и найти хороших заказчиков? Как строить работу с клиентом, чтобы он вовремя платил, остался доволен работой с вами и возвращался с новыми заказами? Книга рассказывает обо всех аспектах выхода на фриланс и организации работы из дома и предлагает простую и эффективную стратегию. Больше не нужно думать о том, как подступиться к удаленке — читайте, применяйте и становитесь крутыми фрилансерами!

читать книгу

09

Фриланс. Как зарабатывать больше, забыв про офис и дресс-код

Алексей Бычков (2019)

Эта книга в первую очередь для тех, кто решил связать свою профессиональную деятельность с веб-дизайном. Простой, понятный, молодежный, местами жаргонный формат повествования о том, как продать заказчику свой дизайн.

читать книгу

Понравилась статья? Поделить с друзьями:

А вот и еще интересные новости по теме:

  • Руководство по эксплуатации авто toyota corolla
  • Понятная инструкция по сборке кубика рубика
  • Средства руководства игровой деятельностью детей
  • Димексид для носа инструкция по применению
  • Кофеварка vitek blue diamond инструкция по применению

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии