
- •1.Файловая система. Директория, файл, путь.
- •2. Основные команды операционной системы для работы с файлами.
- •8.7. Удаление подкаталогов - команда rmdir (rd)
- •3. Физические носители данных. Их классификация, характеристики и назначение.
- •4.Статическая и динамическая области оперативной памяти. Их назначение и использование
- •Память типа rom
- •Память типа dram
- •Оперативная память sdram
- •Оперативная память ddr sdram
- •Оперативная память rdram
- •5.Указатель. Размещение данных в динамической области оперативной памяти.
- •Динамические структуры данных. Статические и динамические переменные. Адреса. Указатели и их объявление.
- •Присвоение значений указателю. Оператор @ с переменной. Оператор @ с параметром процедуры, переданным по значению. Оператор @ с параметром процедуры, переданным по ссылке.
- •6.Типы данных (целые и вещественные числа). Размер используемой памяти, пределы изменения и точность представляемых данных.
- •7.Приоритеты выполнения операций при вычислении значений арифметических и логических выражений .
- •8.Структурированные типы данных. Назначение и способы реализации.
- •9.Алгоритм, его свойства и формы представления. Типовые структуры алгоритма.
- •10.Линейная структура и ее свойства. Ввод и вывод данных. Оператор присваивания.
- •11.Циклическая структура. Назначение и основные элементы.
- •12.Цикл с явно заданным количеством повторений. Основные элементы и варианты реализации.
- •13.Цикл с неявно заданным количеством повторений. Основные элементы и варианты реализации.
- •14.Типовая структура-разветвление. Основные элементы и варианты реализации.
- •15.Процедуры. Назначение, варианты реализации.
- •16.Функции. Назначение, варианты реализации.!
- •17.Формальные и фактические параметры. Назначение, варианты реализации.
- •18.Линейный список. Реализация с использованием массивов. Реализация многомерного массива.
- •19.Линейный список. Реализация с использованием связных списков. Примеры применения.
- •20.Поиск в линейном списке. Назначение и варианты реализации. Бинарный поиск
- •Последовательный поиск
- •21.Сортировка данных в линейном списке. Назначение и варианты реализации. Упорядочивание списка. Вставление элемента в середину списка.
- •22.Стек и очередь. Назначение, варианты реализации и примеры применения.
- •Стек. Отличия стека от списка. Основные операции со стеком.
- •Очереди. Основные операции над очередью.
- •23.Дерево. Назначение, варианты реализации и примеры применения.
- •Представление деревьев. Основные операции над деревом.
- •24.Текстовые и типизированные файлы. Обмен данных с внешними носителями.
- •Типы файлов Турбо Паскаль
- •Стандартные процедуры и функции
- •Работа с типизированными файлами
- •Работа с текстовыми файлами
- •Работа с нетипизированными файлами
Последовательный поиск
Задача поиска. Пусть заданы линейные списки: список элементов В=<К1,К2,К3,...,Кn> и список ключей V= (в простейшем случае это целые числа). Требуется для каждого значения Vi из V найти множество всех совпадающих с ним элементов из В. Чаще всего встречается ситуация когда V содержит один элемент, а в В имеется не более одного такого элемента.
Эффективность некоторого алгоритма поиска А оценивается максимальным Max{А} и средним Avg{А} количествами сравнений, необходимых для нахождения элемента V в В. Если Pi - относительная частота использования элемента Кi в В, а Si - количество сравнений,необходимое для его поиска, то
n
Max{А} = max{ Si, i=1,n } ; Avg{А} = Pi Si .
i=1
Последовательный поиск предусматривает последовательный просмотр всех элементов списка В в порядке их расположения, пока не найдется элемен равный V. Если достоверно неизвестно, что такой элемент имеется в списке, то необходимо следить за тем, чтобы поиск не вышел за пределы списка, что достигается использованием стоппера.
Очевидно, что Max последовательного поиска равен N. Если частота использования каждого элемента списка одинакова, т.е. P=1/N, то Avg последовательного поиска равно N/2. При различной частоте использования элементов Avg можно улучшить, если поместить часто встречаемые элементы в начало списка.
Пусть во входном потоке задано 100 целых чисел К1,К2,... К100 и ключ V. Составим программу для последовательного хранения элементов Кi и поиска среди них элемента, равного V, причем такого элемента может и не быть в списке. Без использования стоппера программа может быть реализована следующим образом:
/* последовательный поиск без стоппера */
#include
main()
{
int k[100],v,i;
for (i=0;i<100;i++)
scanf("%d",&k[i]);
scanf("%d",&v);
i=0;
while(k[i]!=v && i<100) i++;
if (k[i]==v) printf("%d %d",v,i);
else printf("%d не найден",v);
}
21.Сортировка данных в линейном списке. Назначение и варианты реализации. Упорядочивание списка. Вставление элемента в середину списка.
Сформируем список целых чисел упорядоченный по неубыванию, т.е. каждый следующий элемент списка должен быть больше или равен предыдущему.
Для решения этой задачи рассмотрим основные части алгоритма, который мы будем воплощать в программе.
После ввода очередного числа с клавиатуры определяем его место в списке. Заметим, что при этом элемент может быть вставлен либо в начало списка, либо в конец его, либо во внутрь. Первый и второй случаи мы уже рассмотрели выше. Остановимся на третьем случае.
Для того чтобы вставить в список элемент со значением Digit между двумя элементами, нужно найти эти элементы и запомнить их адреса (первый адрес – в переменной dx, второй – в рх), после чего установить новые связи с переменной, в которой хранится значение Digit.
Графически это можно представить так:
Операторы, выполняющие данную задачу будут следующими:
New(x); x^.Data := Digit; px^.Next := x; x^.Next := dx;
Приведем процедуру InsInto, которая ищет место в списке и вставляет элемент, переданный ей как параметр. В результате сразу получается упорядоченный список. Адрес первого элемента списка хранится в глобальной переменной Head.
Procedure InsInto(Digit : integer; Var Head : Ukazatel ); Var dx, px, x : Ukazatel ; Begin New(x); x^.Data := Digit; x^.Next := Nil; if Head = Nil then {Если список пуст, то вставляем первый элемент} Head := x else {Если список не пуст, то просматриваем его до тех пор, пока не отыщется подходящее место для x^ или не закончится список} Begin dx := Head; px := Head; while (px<>Nil) and (px^.Data<=Digit) do Begin dx := px; px :=px^.Next; End; if px=Nil then {Пройден весь список} dx^.Next := x {Элемент добавляется в конец списка} else {Пройден не весь список} Begin x^.Next := px; if px=Head then Head := x {Вставляем в начало списка} else dx^.Next := x; {Вставляем внутрь списка} End; End; End;