- •СОДЕРЖАНИЕ
- •ПРЕДИСЛОВИЕ
- •ГЛАВА 1. Введение в алгоритмы
- •1.1. Этапы решения задач на ЭВМ
- •1.2. Понятие алгоритма
- •1.3. Свойства алгоритмов
- •1.4. Сложность алгоритма
- •1.7. Пример простейшего линейного процесса
- •1.7. Пример циклического процесса
- •ГЛАВА 2. Базовые средства языка Си
- •2.1. Алфавит языка Си
- •2.2. Лексемы
- •2.3. Идентификаторы и ключевые слова
- •2.4. Комментарии
- •2.5. Простейшая программа
- •2.7. Декларация объектов
- •2.8. Данные целого типа (integer)
- •2.9. Данные символьного типа (char)
- •2.10. Данные вещественного типа (float, double)
- •ГЛАВА 3. Константы в программах
- •3.2. Константы вещественного типа
- •3.4. Строковые константы
- •ГЛАВА 4. Обзор операций
- •4.1. Операции, выражения
- •4.3. Операция присваивания
- •4.4. Сокращенная запись операции присваивания
- •4.7. Операции сравнения
- •4.8. Логические операции
- •4.10. Операция «,» (запятая)
- •ГЛАВА 5. Обзор базовых инструкций языка Си
- •5.2. Стандартные математические функции
- •5.3. Функции вывода данных на дисплей
- •5.4. Функции ввода информации
- •ГЛАВА 6. Составление разветвляющихся алгоритмов
- •6.1. Краткая характеристика операторов языка Си
- •ГЛАВА 7. Составление циклических алгоритмов
- •7.1. Понятие циклического кода
- •7.2. Оператор с предусловием while
- •7.4. Оператор цикла с предусловием и коррекцией for
- •ГЛАВА 8. Операторы и функции передачи управления
- •8.1. Оператор безусловного перехода goto
- •8.2. Операторы continue, break и return
- •8.3. Функции exit и abort
- •Советы по программированию
- •ГЛАВА 9. Указатели
- •9.1. Определение указателей
- •9.2. Операция sizeof
- •9.3. Инициализация указателей
- •9.4. Операции над указателями
- •ГЛАВА 10. Массивы
- •10.1. Понятие массива
- •10.2. Одномерные массивы
- •10.4. Строки как одномерные массивы данных типа char
- •10.5. Указатели на указатели
- •10.8. Работа с динамической памятью
- •10.9. Библиотечные функции
- •10.10. Пример создания одномерного динамического массива
- •ГЛАВА 11. Функции пользователя
- •11.1. Декларация функции
- •11.2. Вызов функции
- •11.3. Передача аргументов в функцию
- •11.4. Операция typedef
- •11.5. Указатели на функции
- •ГЛАВА 12. Классы памяти и область действия объектов
- •ЗАДАНИЕ 4. Обработка массивов
- •Первый уровень сложности
- •Второй уровень сложности
- •ЗАДАНИЕ 5. Функции пользователя
- •Первый уровень сложности
- •Второй уровень сложности
- •12.3. Статические и внешние переменные
- •12.4. Область действия переменных
- •Советы по программированию
- •13.1. Структуры
- •13.5. Вложенные структуры
- •13.6. Массивы структур
- •13.7. Размещение структурных переменных в памяти
- •13.8. Объединения
- •13.9. Перечисления
- •13.10. Битовые поля
- •ГЛАВА 14. Файлы в языке Си
- •14.1. Открытие файла
- •14.2. Закрытие файла
- •14.3. Запись-чтение информации
- •14.5. Дополнительные файловые функции
- •Советы по программированию
- •ЗАДАНИЕ 7. Создание и обработка файлов
- •Первый уровень сложности
- •Второй уровень сложности
- •ГЛАВА 15. Динамические структуры данных
- •15.1. Линейные списки
- •15.2.1. Алгоритм формирования стека
- •15.2.2. Алгоритм извлечения элемента из стека
- •15.2.3. Просмотр стека
- •15.2.4. Алгоритм освобождения памяти, занятой стеком
- •15.2.5. Алгоритм проверки правильности расстановки скобок
- •15.3.1. Формирование очереди
- •15.3.2. Алгоритм удаления первого элемента из очереди
- •15.4. Двунаправленный линейный список
- •15.4.1. Формирование первого элемента
- •15.4.3. Алгоритм просмотра списка
- •15.4.5. Алгоритм удаления элемента в списке по ключу
- •15.5. Нелинейные структуры данных
- •15.5.1. Бинарные деревья
- •15.5.2. Основные алгоритмы работы с бинарным деревом
- •15.5.4. Вставка нового элемента
- •15.6. Построение обратной польской записи
- •15.6.1. Алгоритм, использующий дерево
- •15.6.2. Алгоритм, использующий стек
- •15.6.3. Пример реализации
- •15.7. Понятие хеширования
- •15.7.2. Примеры хеш-функций
- •15.7.3. Схемы хеширования
- •15.7.4. Примеры реализации схем хеширования
- •Вариант 2. Двунаправленные списки
- •ГЛАВА 16. Переход к ООП
- •16.1. Потоковый ввод-вывод
- •16.3. Проблема ввода-вывода кириллицы в среде Visual C++
- •16.4. Операции new и delete
- •16.6. Шаблоны функций
- •Первый уровень сложности
- •Второй уровень сложности
- •6.1. Основные понятия
- •6.3. Примитивы GDI
- •6.5. Получение описателя контекста устройства
- •6.6. Основные инструменты графической подсистемы
- •6.7. Закрашивание пустот
- •6.8. Рисование линий и кривых
- •6.9. Пример изображения графика функции sin
- •6.10. Рисование замкнутых фигур
- •6.11. Функция Polygon и режим закрашивания многоугольника
- •6.13. Управление областями вывода и отсечением
- •ЗАДАНИЕ 11. Создание графических изображений
- •ЛИТЕРАТУРА
1.7. Пример простейшего линейного процесса
Наиболее часто в практике программирования требуется организовать расчет некоторого арифметического выражения при различных исходных данных. Например, такого:
z = |
tg 2 x |
+ x(m+1) x2 + m2 , |
|
x2 + m2 |
|||
|
|
||
где x > 0 – вещественное, m – целое. |
Р |
||
Разработка алгоритма обычно |
начинается с составления схемы. |
Продумывается оптимальная последовательность вычислений, при которой,
например, |
отсутствуют |
повторения. |
При |
И |
|
написании |
алгоритма |
рекомендуется переменным присваивать те же имена, которые фигурируют в
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
У |
заданном арифметическом выражении либо иллюстрируют их смысл. |
|||||||||||||||||
Для того чтобы не было «длинных» операторов, исходное выражение |
|||||||||||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Г |
|
полезно разбить на ряд более простых. В нашей задаче предлагается схема |
|||||||||||||||||
вычислений, представленная на рис. 1.1. |
|
|
|
|
|
Б |
|
||||||||||
|
|
|
|
|
|
|
|
|
Начало |
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
а |
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
||||||
|
|
|
|
|
|
|
|
к |
|
|
|
|
|||||
|
|
|
|
|
|
|
|
Ввод |
x,m |
|
|
|
|||||
|
|
|
|
|
|
|
a |
= |
x |
2 |
+ |
m |
2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
т |
еb = tg2х |
|
|
|
|
|||||||
|
|
|
|
о |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
и |
|
|
|
|
|
|
|
n+1 |
|
|
|
|
||
|
|
|
|
|
|
|
|
|
c = x |
|
|
|
|
|
|||
|
б |
|
|
|
|
|
z |
= b/a+c·a |
|
|
|
||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
и |
л |
|
|
|
Вывод x,m,z |
|
|
|
|||||||||
Б |
|
|
|
|
|
|
|
|
Конец |
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|||||
|
|
|
|
Рис. 1.1. Схема линейного процесса |
|||||||||||||
Она содержит ввод и вывод исходных данных, линейный |
|||||||||||||||||
вычислительный процесс, |
вывод полученного результата. Заметим, что |
выражение x2 + m2 вычисляется только один раз. Введя дополнительные переменные a, b, c, мы разбили сложное выражение на ряд более простых.
15
1.7. Пример циклического процесса
Вычислить значение функции y = sin x, представленной в виде разложения в ряд, с заданной точностью, т.е. до тех пор, пока разность между соседними слагаемыми не станет меньше заданной точности:
|
|
|
|
|
y = sin x = x - |
x3 |
+ |
x5 |
- |
x7 |
+ .... |
|
|
|
|
||||
|
|
|
|
|
3! |
5! |
7! |
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||||
Схема алгоритма, приведенная на рис. 1.2, реализует циклический |
|||||||||||||||||||
процесс, в состав которого (в |
блоке |
проверки |E|< eps) |
входит участок |
||||||||||||||||
разветвления. |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Р |
||
|
|
|
|
|
Начало |
|
|
|
|
|
|
|
|
|
|
И |
|||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
У |
|
||||
|
|
|
|
|
x, eps |
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
Г |
|
|
|
|||
|
|
|
|
|
Y = A1= x; |
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
Б |
|
|
|
|
|||||
|
|
|
|
|
i = 1; |
|
|
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
A2=-A1(x×x)/(2i(2i+1)) |
|
|
|
|
|
|
|
|
|
|||||||
|
|
|
|
|
|
|
|
|
|
а |
|
|
|
|
|
|
|||
|
|
|
|
|
i = i +1 |
|
к |
|
|
|
|
|
|
|
|
||||
|
|
|
|
|
|
е |
|
|
|
|
|
|
|
|
|
|
|||
|
|
|
|
|
y = y +A2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
т |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
E =A1+A2 |
|
|
|
|
|
|
|
|
|
|
|
|
||
|
|
|
|
о |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
A1 = A2 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Нет |
|E|<eps |
|
|
|
Да |
|
y, E, i |
|
|
Конец |
||||||
|
|
л |
|
|
|
|
|
|
|
|
|
||||||||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
||
|
б |
исР . 1.2. Схема циклического алгоритма |
|
|
|
||||||||||||||
и |
|
|
|
|
|||||||||||||||
Б |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
16