- •Тема 1. Алгоритмы и программы 4
- •Тема 2. Характеристика языка Си 6
- •Тема 3. Основы языка Си 11
- •Тема 4.Работа с файлами 33
- •Тема 5.Распределение памяти 40
- •Тема 6. Методы организации данных в памяти эвм 43
- •Тема 7. Некоторые алгоритмы обработки данных 58
- •Тема 1. Алгоритмы и программы Цели и задачи изучения темы
- •1.1.Понятие алгоритма. Понятие программы. Способы записи алгоритмов.
- •1.2.Критерии качества программ
- •1.3.Низкоуровневые и высокоуровневые языки программирования
- •1.4.Принципы структурного программирования
- •Принципы структурного программирования.
- •2.2.Основные характеристики языка Си.
- •2.2.1.Достоинства языка Си
- •2.2.2.Компиляторы и интерпретаторы
- •2.2.3.Сильная типизация
- •2.3.Структура простой программы
- •Вопросы для повторения
- •3.1.2.Основные типы данных
- •3.1.3.Структуры данных
- •3.1.4.Оператор определения имени типа typedef
- •3.1.5.Массивы
- •3.1.6.Указатели
- •3.1.7.Указатели и массивы
- •3.1.8.Внешние и внутренние переменные
- •3.2.Стандартные функции ввода-вывода
- •3.3. Операции, операторы и выражения
- •3.3.1.Оператор присваивания
- •3.3.2.Арифметические операции
- •3.3.3.Операции увеличения и уменьшения
- •3.3.4.Операции сравнения
- •3.3.5.Логические операции
- •3.3.6.Побитовые логические операции
- •3.3.7.Операции сдвига
- •3.3.8.Операции "увеличить на", "домножить на" и т.П.
- •3.3.9.Операции с указателями. Указатели и массивы
- •3.3.10.Операция приведения типа
- •3.4.Управляющие конструкции
- •3.4.1.Фигурные скобки
- •3.4.2.Оператор выбора if и операция условия
- •3.4.3.Оператор множественного выбора switch
- •3.4.4.Оператор цикла while
- •3.4.5.Оператор цикла for
- •3.4.6.Оператор цикла do...While
- •3.5.Данные (более детальные сведения)
- •3.5.1.Структуры
- •3.5.2.Указатели и структуры
- •3.5.3.Структуры и оператор определения имени типа typedef
- •3.5.4.Строки
- •3.5.5.Матрицы и многомерные массивы
- •3.6.Пользовательские функции
- •3.6.1.Определение функций
- •3.6.2.Прототипы функций
- •3.6.3.Аргументы командной строки
- •Вопросы для повторения
- •4.2.Функция открытия файла fopen
- •4.3.Функции бинарного чтения и записи fread и fwrite
- •4.4.Функция закрытия файла fclose
- •4.5.Функции форматного чтения и записи fscanf и fprintf
- •4.6.Другие функции ввода-вывода
- •4.6.1.Функции посимвольного ввода-вывода
- •Int fgetc(file *f); - ввести один символ из файла f.
- •Int fputc(int c, file *f); - записать один символ в файл f.
- •4.6.2.Функции построкового ввода-вывода
- •Char *fgets(char *line,int size, file *f); - ввести строку из файла f.
- •Char *fputs(char *line, file *f); - записать строку в файл f.
- •4.6.3.Функции позиционирования в файле
- •Int fseek(file *f, long offset, int whence); - установить текущую позицию в файле f
- •Long ftell(file *f); - получить текущую позицию в файле f
- •Int feof(file *f); - проверить,достигнут ли конец файла f
- •Функция открытия файла fopen
- •Функции бинарного чтения и записи fread и fwrite
- •Функция закрытия файла fclose
- •5.2.Функции malloc и free
- •5.3.Выделение памяти под матрицы на этапе выполнения программы
- •Функции malloc и free.
- •6.2.Время выполнения программ
- •6.3.Списки
- •6.4.Реализация списков
- •6.5.Стеки
- •6.6.Реализация стеков
- •6.7.Очереди
- •6.8.Реализация очередей
- •6.9.Графы и деревья
- •6.10.Некоторые сд для хранения графов и деревьев
- •Матрица смежности графа, изображенного на рис.6.10
- •Матрица инцидентности графа, изображенного на рис.6.10
- •Матрица весов графа, изображенного на рис.6.11
- •Матрица смежности дерева, изображенного на рис.6.16
- •Вопросы для повторения
- •Реализация стеков.
- •Реализация очередей.
- •7.1.1.Поиск элемента в неупорядоченном массиве
- •7.1.2.Поиск элемента в упорядоченном массиве.
- •7.1.3.Фонетический поиск
- •7.2.Алгоритмы сортировки
- •7.2.1.Сортировка методом пузырька.
- •7.2.2.Сортировка вставками
- •7.2.3.Сортировка выбором
- •7.2.4.Пирамидальная сортировка
- •7.2.5.Быстрая сортировка
- •7.2.6.Сортировка слиянием
- •Этапы слияния файлов f1 и f2
- •7.3.Поиск на графах
- •7.3.1.Поиск в глубину
- •7.3.2.Поиск в ширину
- •7.4.Топологическая сортировка графа
- •7.5.Сетевое планирование
- •Информация о проекте
- •7.5.1.Алгоритм расчета наиболее ранних сроков наступления событий
- •7.5.2.Алгоритм расчета наиболее поздних сроков наступления событий
- •7.5.3.Алгоритм расчета резервов времени
- •Расчет резервов времени
- •Вопросы для повторения
Вопросы для повторения
Понятие абстрактного типа данных.
Понятие O-символики.
АТД список, операторы списка.
Реализация списков посредством массивов.
Реализация списков с помощью указателей.
Реализация списков с помощью курсоров.
АТД стек, операторы стека.
Реализация стеков.
АТД очередь, операторы очереди.
Реализация очередей.
Понятие графа (неориентированного графа).
Понятие вершины графа.
Понятие ребра графа.
Понятие ориентированного графа.
Понятие дуги орграфа.
Понятие смежности.
Понятие концевой вершины.
Понятие инцидентности.
Понятие петли.
Понятие кратных ребер.
Понятие параллельных дуг.
Понятие цепи.
Понятие пути.
Понятие маршрута.
Понятие цикла.
Понятие контура.
Понятие связного графа.
Понятие ациклического графа.
Понятие дерева.
Понятие леса.
Понятие подграфа.
Понятие покрывающего (или остовного) дерева.
Понятие матрицы смежности.
Понятие матрицы инцидентности.
Хранение взвешенных графов с помощью матриц весов.
Упаковка матриц.
Хранение графов с помощью массивов ребер.
Хранение графов с помощью списков смежности.
Хранение графов с помощью списков ребер.
Хранение деревьев.
Резюме по теме
В данной теме рассмотрены различные методы организации данных в памяти ЭВМ.
Тема 7. Некоторые алгоритмы обработки данных
Цели и задачи изучения темы
В данной теме рассматриваются некоторые из алгоритмов, которые наиболее часто используются в экономических информационных системах. Также выбор алгоритмов обусловлен их достаточной простотой. Все из рассмотренных алгоритмов могут быть реализованы студентами самостоятельно.
7.1.Алгоритмы поиска
Задача поиска встречается очень часто. В общем случае под задачей поиска понимается задача нахождения среди исходных данных нужных данных, т.е. данных удовлетворяющих условиям поиска. Например, задан список абонентов АТС, необходимо найти номер телефона абонента по его фамилии. Алгоритмы поиска зависят от организации исходных данных.
В данном разделе более подробно рассматривается поиск в неупорядоченном и упорядоченном массиве. Задача поиска элемента в массиве заключается в том, чтобы определить наличие в данном массиве элемента, равного заданному элементу. Если такой элемент есть, то выдается его номер, в противном случае выдается номер элемента, следующего за последним элементом массива.
Также в данном разделе рассматривается так называемый фонетический поиск. Задача фонетического поиска - найти нужные данные сопоставленные фамилии человека, если фамилия была воспринята на слух и может содержать ошибки. Подобные методы находят применение в системах, где оператор воспринимает фамилию заказчика на слух и выполняет некоторые действия, например, в системах заказа билетов, бронирования мест в гостиницах, различных справочных системах и т.д.
7.1.1.Поиск элемента в неупорядоченном массиве
Работа алгоритма поиска элемента в неупорядоченном массиве заключается в том, что элементы массива, начиная с первого, последовательно сравнивается с искомым элементом. Сравнение элементов продолжается до тех пор, пока не будут просмотрены все элементы или очередной элемент массива не равен искомому. Такой поиск называется линейным поиском.
Один из вариантов реализации процедуры поиска элемента в неупорядоченном массиве был рассмотрен при реализации АТД список на массиве при реализации оператора LOCATE (см. рис. 6.4). Данная реализация алгоритма поиска содержит проверку на окончание массива и проверку на равенство текущего элемента массива с искомым. Обе проверки осуществляется для каждого очередного элемента массива. Поэтому в том случае, когда искомого элемента в массиве нет, будет произведено 2n проверок, где n число элементов массива. Однако число проверок можно уменьшить, если в конец массива включить (n+1)-й элемент, равный искомому. Тогда проверка на окончание массива становится лишней. Остается лишь проверка на совпадение очередного элемента с искомым. Если этот элемент находится внутри массива, то поиск заканчивается удачно и элемент считается найденным. Если же этот элемент оказался (n+1)-ым, то искомого элемента в массиве нет. Подобный прием позволяет упростить условия выхода из цикла и используется в программировании довольно часто. Применив этот прием, получим модифицированный алгоритм оператора LOCATE. Данный алгоритм представлен блок-схемой на рис. 7.1.