- •Экзамен по информатике
- •Цели программирования.
- •Области языков программирования. Научные приложения.
- •Области языков программирования. Коммерческие приложения.
- •Области языков программирования. Искусственный интеллект.
- •Области языков программирования. Системное программирование.
- •Области языков программирования. Языки сценариев.
- •Области языков программирования. Web-программирование.
- •Уровни языков программирования. Машинные языки (история возникновения, отличительные особенности, пример языков).
- •Уровни языков программирования. Языки ассемблера (история возникновения, отличительные особенности, пример языков).
- •Уровни языков программирования. Языки высокого уровня (история возникновения, отличительные особенности, пример языков).
- •Методы реализации программ. Компиляция (схема получения результата из исходного кода, преимущества и недостатки, сравнительная таблица).
- •Методы реализации программ. Интерпретация (схема получения результата из исходного кода, преимущества и недостатки, сравнительная таблица).
- •Методы реализации программ. Смешанная реализация (схема получения результата из исходного кода, преимущества и недостатки, сравнительная таблица).
- •Методы реализации программ. Трансляция (схема получения результата из исходного кода, преимущества и недостатки, сравнительная таблица).
- •Жизненный цикл программного продукта.
- •Этапы решения задач на эвм.
- •Цикл с параметром
- •Пример 1
- •Пример 2
- •Способы записи алгоритма. Псевдокод.
- •Пример 1
- •Пример 2
- •Рекомендации
- •Сравнение примеров
- •Способы записи алгоритма. Сравнение различных подходов. Выгоды использования блок-схем и псевдокода
- •Только псевдокод
- •Концепция памяти.
- •Принципы типизации данных.
- •Тип данных bool
- •Тип данных char
- •Целочисленные типы данных
- •Типы данных с плавающей точкой
- •Иерархия простых типов данных.
- •Стандартные типы данных. Таблица характеристик. Особенности выбора типа.
- •Правила приведения типов.
- •Пример, использующий преобразование типов
- •Оператор sizeof.
- •Переменные (объявление, инициализация, присвоение).
- •Константы. Специальные символы. Квалификатор const.
- •Область видимости переменных.
- •Операторы управления областью видимости.
- •Группы операций (особенности записи, таблица приоритетов)
- •Понятие ассоциативности, приоритета, размерности. Таблица приоритета операций.
- •Арифметические операции.
- •Логические операции (краткая схема вычислений).
- •Побитовые операции (таблицы истинности). Побитовые логические операции
- •Побитовое отрицание (not)
- •Побитовое и (and)
- •Побитовое или (or)
- •Сложение по модулю два (xor)
- •Другие побитовые логические операции
- •Битовые сдвиги
- •Принципы структурного программирования.
- •Структурное программирование: три базовые конструкции.
- •Основные операторы.
- •Параметры по-умолчанию.
- •Перегрузка функций.
- •Файлы (понятие, текстовые и двоичные файлы, структурированные и неструктурированные, операции, основные библиотеки для работы с файлами).
- •Режимы открытия файлов
- •Потоковый ввод-вывод. Библиотека потокового ввода-вывода. Вступление.
- •Консольный ввод/вывод.
- •Форматирование.
- •Потоковый ввод/вывод пользовательских типов.
- •Файловый ввод/вывод.
- •Файловый ввод-вывод. Стандартная библиотека ввода-вывода.
Битовые сдвиги
Основная статья: Битовый сдвиг
К битовым операциям также относят битовые сдвиги. При сдвиге значения битов копируются в соседние по направлению сдвига. Различают несколько видов сдвигов — логический, арифметический и циклический, в зависимости от обработки крайних битов.
Также различают сдвиг влево (в направлении от младшего бита к старшему) и вправо (в направлении от старшего бита к младшему).
Логический сдвиг
Арифметический сдвиг (правый)
Циклический сдвиг
Циклический сдвиг через перенос
Логический сдвиг
При логическом сдвиге значение последнего бита по направлению сдвига теряется (копируясь в бит переноса), а первый приобретает нулевое значение.
Логические сдвиги влево и вправо используются для быстрого умножения и деления на 2, соответственно.
Арифметический сдвиг
Арифметический сдвиг аналогичен логическому, но значение слова считается знаковым числом, представленным в дополнительном коде. Так, при правом сдвиге старший бит сохраняет свое значение. Левый арифметический сдвиг идентичен логическому.
Циклический сдвиг
При циклическом сдвиге, значение последнего бита по направлению сдвига копируется в первый бит (и копируется в бит переноса).
Также различают циклический сдвиг через бит переноса — при нём первый бит по направлению сдвига получает значение из бита переноса, а значение последнего бита сдвигается в бит переноса.
Структурное программирование: историческая справка.
На протяжении 60-х годов попытки создания многих больших программных систем наталкивались на ряд трудностей. Сроки создания программного обеспечения обычно не выполнялись, стоимость проектов превосходила бюджет, а конечный продукт не отличался надёжностью. Люди начали понимать, что создание программного обеспечения – гораздо более сложная задача, чем они себе представляли.
Обычно операторы программы выполняются друг за другом в той последовательности, в которой они написаны. Это называется последовательным выполнением. Однако различные операторы позволяют программисту указать, что следующим должен выполняться не очередной оператор в тексте программы, а какой-то другой. Это называется передачей управления.
В 60-е годы стало ясно, что неограниченное использование передач управления является источником множества неприятностей при групповой разработке программного обеспечения. Вина была возложена на оператор goto, который позволяет передавать управление в очень широких пределах.
Например, для реализации следующего алгоритма:
использовался код:
S = 0;
i = 1;
начало_цикла:
S = S + i;
i = i + 1;
Если (i<10), то
перейти на «начало_цикла»;
Если (S<100), то
перейти на «действие2»;
Вывод “Сумма больше ста”;
перейти на «конец_условия»;
действие2:
Вывод “Сумма меньше ста”;
конец_условия:
Такой код был нормой для программ того времени. Неправильное и необдуманное использование произвольных переходов в тексте программы приводит к получению запутанных, плохо структурированных программ (т.н. программ-спагетти), по тексту которых практически невозможно понять порядок исполнения и взаимозависимость фрагментов.
Идеи так называемого структурного программирования стали почти синонимами требования «не применять goto». Исследование Бома и Джакопини показало, что программы могут быть написаны без использования оператора goto. В результате для программистов настала эра перехода к стилю программирования «с минимальным использованием goto».
Такого не было до 70-х годов, пока программисты не стали серьёзно применять структурное программирование. Результаты получились впечатляющие: группы разработчиков программного обеспечения сообщали, что время разработок сократилось, производительность труда выросла, и проекты стали чаще укладываться в рамки бюджета. Ключом к успеху явилось, что структурированные программы стали более прозрачными, легче поддавались отладке и модификации и, что самое главное, в них стало меньше ошибок.
Структурное программирование — методология разработки программного обеспечения, в основе которой лежит представление программы в виде иерархической структуры блоков.