Основы программирования для автоматизированного проектирования и решения творческих задач. Романенко А.В - 26 стр.

UptoLike

Составители: 

Эти функции форматного ввода-вывода аналогичны функциям scanf и printf.
Содержимое файла, представляющее последовательность байт, часто сравнивают с магнитной лентой. Место на ленте, с
которым в данный момент осуществляется работа, определяется значением указателя типа FILE *, связанного с файлом. По-
сле проведения операции чтения/записи указатель соответствующим образом изменяет значение, настраиваясь на следую-
щую порцию информации. Однако неудобство последовательного чтения при работе с файлом состоит в том, что для нахо-
ждения n-й записи нужно последовательно считать (n–1) предыдущие записи в файле. В библиотеке stdio.h описан ряд
функций, позволяющих изменить такой режим работы, устанавливая указатель на нужное место в файле:
void rewind(FILE *); – устанавливает указатель потока на его начало;
int feof(FILE *); – проверка окончания файла (1 – если файл закончен);
int fseek(FILE *f, long offset, int n); – перемещает указатель в заданное место файла. "Сдвиг" выполняется на указанное в off-
set число байт. Переменная n указывает точку отсчета в файле: 0 – от начала файла; 1 – от текущей позиции; 2 – от конца
файла. Если offset > 0 – сдвиг выполняется в строку конца файла, если offset < 0 – в сторону начала файла. При удачном за-
вершении функция возвращает ноль.
11.6 Алгоритмы для сложных типов данных
Устройство массивов и файлов привело к появлению часто возникающих задач в процессе хранения информации с их
помощью. При использовании массивов такой задачей является задача сортировки хранимой информации, а при использо-
вании файловзадача поиска информации.
При хранении информации в массивах, используется три базовых алгоритма сортировки: метод простых вставок, метод
обменов и метод выбора.
Сортировка простыми вставками. Смысл алгоритма состоит в последовательном переносе элементов упорядочивае-
мого массива в уже упорядоченный массив на положенные им места.
Для осуществления сортировки одномерного массива А нужен второй массив B такого же размера. Первый элемент
массива А переносится в массив В без условий. Новая последовательность считается упорядоченной. Каждый следующий
элемент массива А последовательно сравнивается с элементами массива В начиная с первого его элемента. В этом процессе
устанавливается место для вставки нового элемента в массив В. Элементы, расположенные справа от указанной позиции,
сдвигаются на одну позицию вправо. Новый элемент из массива А вставляется на освободившееся место.
Сортировка обменами (метод "пузырька"). Метод состоит в последовательном сравнении соседних элементов в масси-
ве А и замене их местами, если не выполняется требуемое условие сортировки. При выполнении этой операции над всеми
элементами массива больший из них (при сортировке по возрастанию) займет последнюю позицию. При многократном вы-
полнении указанных действий соответствующие элементы займут места с номерами n-1, n-2, n-3 и так далее, а массив будет
упорядочен.
Усовершенствованный метод обмена с изменением направления предполагает найденный элемент, который не удовле-
творяет поставленному условию сортировки, сдвигать в направлении противоположном направлению сортировки до тех
пор, пока он не удовлетворит условию решения задачи.
Метод выбора. Сортировка выбором требует найти среди рассматриваемых элементов наибольший (наименьший) и
осуществить обмен его с последним элементом в массиве. Далее уменьшаем число рассматриваемых элементов в массиве на
один, так как последний элемент в массиве уже отсортирован. Повторяя эти действия над наборами элементов массива
уменьшающейся длины, мы получаем упорядоченную последовательность.
Для организации поиска информации в файле можно использовать два алгоритма: последовательного перебора и би-
нарного поиска.
Для поиска информации с помощью алгоритма бинарного поиска, информация в файле должна быть упорядочена по
некоторому свойству. Алгоритм состоит в последовательном сравнении ключевого значения искомой информации и инфор-
мации, находящейся в файле в центре рассматриваемого диапазона с последовательным исключением из рассмотрения не-
нужной половины.
12 ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ
При программировании реальных задач очень часто программисты сталкиваются с проблемой организации гибкого
подхода к объемам обрабатываемой информации, которая тесно взаимосвязана с задачей создания эффективных программ.
Эта проблема состоит в том, что во многих задачах нельзя заранее предугадать точное количество данных, а следовательно,
и количество переменных для их хранения. Малоэффективным здесь оказывается и применение переменных сложных типов
данных, так как в момент компиляции в программе четко должны быть указаны размеры всех массивов, структур и объеди-
нений. Поэтому при использовании переменных сложных типов данных стараются задать им такие размеры, которых, исхо-
дя из здравого смысла, программе хватит всегда. С одной стороны, это может повлечь за собой захват программой больших
объемов оперативной памяти ЭВМ, которую программа может и не использовать в данный конкретный момент, а держать
"на всякий случай", что негативно скажется на эффективности функционирования всей системы в целом. С другой стороны,
нельзя дать гарантию, что в процессе эксплуатации программы не возникнет ситуация, когда программе не хватит выделен-
ной оперативной памяти и она просто станет непригодной для решения задачи.
Выходом в этой ситуации стало создание целого класса динамических структур данных, которые обладают всеми
свойствами типов данных, но исходя из сложности их воплощения отдельно, они реализуются на базе уже существующих
типов данных. Главной их отличительной особенностью является возможность быстрого и гибкого видоизменения в процес-