
Babalova_Algoritmizaciya_zadach_i_strukturirovanie_programm_2013
.pdf
assignfile(f,'File_rec.dat'); rewrite(f);
for i:= 0 to n - 1 do write(f,a[i]);
// Пишем в файл запись целиком со всеми полями данных closefile(f);
end;
procedure TForm1.BitBtn4Click(Sender: TObject); begin
close;
end;
procedure TForm1.FormCreate(Sender: TObject); begin
Stringgrid1.cells[0,0]:=' Фамилия'; Stringgrid1.cells[1,0]:='Номер_группы';
end; end.
Рис. 27. Работа с записями в типизированном файле
На рис. 27 показано окно работающей программы. Количество вводимых данных и сами данные для записи в файл читаются из полей компонента Stringgrid1 событием TForm1.BitBtn1Click. Для
61

чтения данных из файла используется стандартный метод среды
Delphi - OpenDialog1.execute. В окно Edit1 выводится полный путь к файлу из записей.
Задачи для самостоятельной работы
4.1. Сформировать файл из произвольного количества случайных чисел. Случайные числа предлагается получать по следующему алгоритму:
1.Ввести число N и два числа I и J.
2.Выполнить действие I = MOD(I*J/64).
3.Повторить п. 1 N раз.
Сохранить в файле числа, прочитать по запросу их из файла и определить наличие периодичности в последовательности случайных чисел.
4.2.Создать файл, содержащий сведения об учащихся в формате: фамилия, имя, отчество, номер. Прочитать все сведения из файла, упорядочив их по фамилиям методом Шейкер-сортировки. Переписать все сведения в новый файл, изменив формат записи: номер, фамилия, имя, отчество.
4.3.Багаж каждого пассажира характеризуется количеством вещей и их общим весом. В файл занести сведения обо всех пассажирах некоторого рейса. Найти пассажиров, багаж которых совпадает по весу, и пассажиров, вес багажа которых отличается не более, чем на 1 кг. Создать упорядоченные последовательности по фамилиям всех категорий пассажиров методом простого выбора.
4.4.Дана формула для вычисления элементов последовательно-
|
i −0.1 |
. Из чисел xi |
|
сти |
xi = i2 +abs(tg(2*i)) |
надо образовать последова- |
тельность x1, x2, ..., xn. Последовательность значений сохранять в файле. Конец файла определяется в процессе решения задачи при выполнении соотношения abs(xi) <ε. Вывести полученную последовательность.
n
4.5. Определить значение многочлена Pn = ∑ Ai xi по схеме Гор-
i:=0
нера. Все значения коэффициентов Ai записаны в файле и в процессе решения читаются из файла. Число x вводится с клавиатуры.
62
4.6.Разработать файловую систему для обработки сведений о количестве произведенных деталей. Компонентами файла должны быть: название детали, количество произведенных деталей, стоимость одной детали. Создать файл сведений о деталях. По запросу пользователя надо из файла прочитать сведения о требуемой детали и найти в файле все детали, стоимость которых превышает заданную сумму.
4.7.Числовая матрица задается в файле в следующем формате: I
иJ, номера столбца и строки ненулевого элемента матрицы, значение элемента А (I,J). Количество нулевых элементов неизвестно. Вывести матрицу на экран в обычной форме: в виде последовательностей строк и столбцов. Обеспечить преобразование матрицы пере-
становкой P и Q строк матрицы. Переписать преобразованную матрицу в файл. Размерность матрицы M * N.
4.8.Создать файл F, содержащий M слов. Выполнить сортировку слов методом быстрой сортировки. Переписать весь текст в обратном порядке и записать его в другой файл Q. Обеспечить вывод вариантов последовательностей слов.
4.9.В файл записать произвольный текст, оканчивающийся точкой. Слова в тексте разделены произвольным количеством пробелов. Преобразовать текст, исключив все лишние пробелы (более одного). Выполнить сортировку слов методом простого выбора. Обеспечить вывод исходного текста и преобразованного теста и количества слов.
4.10.В файл записать некоторый текст, заканчивающийся знаком “;”. Все слова текста упорядочить по количеству букв в порядке возрастания длины слов методом вставки. Вывести полученную последовательность слов. Для сравнения результатов обработки текста обязательно присутствие исходного текста на экране.
4.11.Создать файл из целых чисел. Количество чисел должно быть кратно 10. Переписать компоненты исходного файла в другой файл следующим образом: в каждой десятке чисел сначала должны стоять отрицательные числа, а затем положительные. Обеспечить вывод на экран исходной и преобразованной последовательностей чисел.
4.12.Создать текстовый файл, в котором содержится некоторое количество строк. Переформатировать текст таким образом, чтобы каждая строка содержала не более 30 литер и заканчивалась точкой.
63
Обеспечить вывод исходного текста и результата преобразования. Слова в файле должны сохранить первоначальный порядок следования и в них не должно быть знаков переноса.
4.13.Создать файл, содержащий сведения о книгах в библиотеке. Формат сведений: фамилия автора, название книги, год издания. Обеспечить выбор сведений о запрашиваемом авторе. Последовательность фамилий авторов должна присутствовать на экране. Сведения должны выводиться отсортированными по годам издания книг методом простого выбора. Предусмотреть вывод исходных неупорядоченных сведений.
4.14.В файл записать последовательность действительных чисел. Прочитать из файла последовательность. Упорядочить ее по возрастанию методом быстрой сортировки и обеспечить вставку некоторого Р количества чисел, не нарушая упорядоченности последовательности. Сохранить полученную последовательность в другом файле. Вывести на экран все варианты последовательностей.
4.15.Дана последовательность действительных чисел. Последовательность сохранить в файле. Последовательность упорядочить по убыванию значений методом сортировки выбором. Удалить из упорядоченной последовательности все отрицательные числа, меньшие некоторого вводимого числа P. Вывести на экран исходную последовательность и все варианты преобразованных последовательностей.
4.16.Создать файл из целых чисел. Количество компонент должно быть кратно 10. Прочитать последовательность из файла и поделить ее на ПП по 10 элементов. В каждой ПП сначала поставить все элементы, кратные 10, а затем все остальные. Преобразованную последовательность сохранить в новом файле. Вывести исходную последовательность и результат ее преобразования.
4.17.В двух файлах записать последовательности чисел А и В. Создать новый файл, в котором содержатся только те числа, которые не содержатся одновременно в этих последовательностях. Вывести на экран исходные последовательности и результат преобразования. Последовательности сортировать по возрастанию методом Шейкер-сортировки.
4.18.В m файлах создать сведения о студентах m групп. Формат сведений: N группы, порядковый номер студента, фамилия, имя, отчество. Выбрать всех однофамильцев из всех групп и сформиро-
64
вать из них последовательность. Обеспечить вывод сведений о каждой группе и результаты поиска однофамильцев. Сортировка сведений выполняется методом вставок.
4.19.На производстве все сведения о продукции записаны в формате: наименование детали, количество деталей этого наименования и место хранения. Сведения об имеющихся деталях сохранить в файле. Отсортировать сведения по наименованию деталей методом простого выбора. По запросу пользователя вывести все детали, которые хранятся в одном месте хранения.
4.20.Создать файл из целых чисел. Количество компонент должно быть кратно 10. Прочитать последовательность из файла и поделить ее на ПП по 10 элементов. В каждой ПП отсортировать элементы по убыванию методом быстрой сортировки. Преобразованную последовательность сохранить в новом файле. Вывести исходную последовательность и результат ее преобразования.
4.21.Прямая линия на плоскости задается уравнением
ax+ by + c =0,
где a и b не равны нулю. Все коэффициенты – целые числа. В файле задается произвольное количество наборов коэффициентов прямых. Определить количество наборов коэффициентов, записанных в файле. Выбрать из последовательности коэффициенты тех прямых, которые параллельны между собой. Результаты обработки файла и исходные данные вывести на экран.
4.22.Создать файл, содержащий сведения о рейсах самолетов в формате: номер рейса, город вылета, город назначения, время вылета из аэропорта вылета и время полета. Выбрать из последовательности сведений все рейсы из введенного с клавиатуры города назначения. Обеспечить вывод также всего файла расписания.
4.23.Создать файл, содержащий сведения о товарах в формате: наименование товара, страна – производитель товара, количество в наличии, цена единицы товара. Создать последовательность товаров одного наименования из всех стран. Определить их количество
исреднюю стоимость. Вывести на экран результат обработки файла и обеспечить просмотр всего содержимого файла.
4.24.Создать два файла из произвольного количества чисел. Из каждой последовательности удалить числа большие 100 и сформировать одну последовательность из оставшихся чисел. Сохранить результат преобразования, упорядочив его методом простого обме-
65
на в одном файле. Результаты преобразования и исходные последовательности вывести на экран.
4.25.Создать два файла, в каждом из которых содержится некоторые последовательности слов. Определить, сколько раз каждое слово из первой последовательности повторяется во второй последовательности. Вывести результаты обработки и исходное содержимое файлов на экран. Все последовательности слов упорядочить по алфавиту методом простого выбора.
4.26.В файле задать последовательность точек с координатами Х и Y. Количество наборов – любое. Вводится произвольная точка. Найти из заданного набора точек самую ближайшую точку к введенной с клавиатуры. Обеспечить вывод на экран координат исходных точек и результат выбора.
4.27.Создать текстовый файл произвольной длины. Текст разбит на строки. Каждая строка заканчивается знаком “;”. В каждой строке между словами произвольное количество пробелов. Вывести на экран только те строки, в которых содержится не менее 30 символов, отличных от пробелов. Обеспечить сортировку каждой строки методом быстрой сортировки.
4.28.В файле создать последовательность из данных об абонентах телефонной сети. Формат сведений: фамилия, адрес, номер телефона. Все сведения в файле не упорядочены. Упорядочить сведения по фамилиям абонентов методом быстрой сортировки. Обеспечить добавление нового абонента на правильное место в последовательности сведений. Вывести все сведения на экран.
4.29.Создать числовой файл из произвольного количества элементов. Из числового файла переписать исходную последовательность в новый файл, выбрав из нее только нечетные числа и расположив их в порядке не убывания (методом Шейкер-сортировки). Обеспечить вывод исходной и результирующей последовательностей куда?
4.30.Создать файл, в котором компоненты файла – слова произвольной длины и неупорядоченные по алфавиту. Выполнить упорядочивание слов по длине слова и по алфавиту (метод вставки). Обеспечить вывод всех вариантов преобразований последовательности слов и для сравнения обязательно выводить на экран исходную последовательность.
66
4.31.Задается файл сведений об учащихся по следующему формату: фамилия, имя, отчество, номер группы. Переписать все эти сведения в новый файл, обеспечив преобразование формата сведений следующим образом: группа, фамилия, имя, отчество. Вывод преобразованных сведений должен быть упорядочен по номерам групп (метод простого выбора). Исходную последовательность также выводить на экран.
4.32.В файл заносятся неупорядоченные сведения о владельцах автомобилей из одного гаража. Формат сведений: фамилия владельца, марка автомобиля, регистрационный номер автомобиля и номер места в гараже. Перечень марок автомобилей, имеющихся в гараже, должен выводиться на экран при запуске программы. Обеспечить формирование последовательности сведений о владельцах запрашиваемой марки автомобиля, упорядоченных по фамилиям методом быстрой сортировки.
4.33.Создать текстовый файл из строк произвольной длины. Каждая строка заканчивается любым знаком-разделителем. Переформатировать файл так, чтобы каждая строка содержала не более 40 литер, заканчивалась обязательно точкой, и среди 40 литер не было бы ни одной точки. Записать новую версию текста в новый файл, вывести новую и старую версии записей.
4.34.Создать файл из неупорядоченных сведений об абонентах телефонного узла. Формат сведений: фамилия, имя, отчество, адрес, номер счета. Обеспечить вывод упорядоченных по алфавиту последовательностей абонентов на введенную с клавиатуры букву. После выбора конкретной фамилии должны выводиться все сведения об абоненте. Необходимо обеспечить редактирование, удаление, дополнение сведений. Все изменения должны заноситься в файл.
4.35.Создать текстовый файл, в котором текст из слов записан с разделителем между строками в виде точки с запятой. Обработать текст таким образом, чтобы каждая строка начиналась с первой позиции и первая буква каждой строки была бы строчной буквой. Результаты преобразования текста и его исходный вид вывести на экран.
4.36.Заданы два массива целых чисел A и B. Массив A упорядочить по возрастанию, а массив B упорядочить по убыванию. Создать новый массив C, который будет содержать все значения
67
только возрастающие. Все варианты массивов хранить в файлах и читать из файлов.
4.37.Сведения об успеваемости студентов формируются из данных: фамилия, группа, дисциплина, дата, оценка в баллах (<=50). Создать файл из сведений о текущей успеваемости. Отсортировать сведения по алфавиту методом Шейкер-сортировки. Вывести сведения о студентах с успеваемостью < 25 баллов.
4.38.Задана последовательность вещественных чисел A. Записать эту последовательность в файл. Найти и вывести номера и значения локальных максимумов массива, для которых выполняет-
ся соотношение ai–1 < ai > ai+1.
4.39.В файл записан построчно некоторый текст. Строки имеют разные длины <=60 символов. Переформатировать текст в файле, чтобы все строки были длины не более 30 символов. Текст должен весь сохраниться. Записать в другой файл отформатированный текст.
4.40.В файл записана последовательность целых чисел. Выполнить сортировку последовательности методом вставок. В процессе сортировки удалять из последовательности элементы последовательности ранее встречавшиеся. Записать новую последовательность в файл.
68
Тема 5. ДИНАМИЧЕСКИЕ СТРУКТУРЫ ДАННЫХ. СПИСКИ, СТЕКИ, ОЧЕРЕДИ
Структура данных, созданная с помощью указателей, на следующий или предыдущий элемент структуры, называется динамической.
Все элементы такой структуры расположены в линейном порядке. Число элементов в структуре не ограничено. Выбор каждого элемента структуры осуществляется определением адреса элемента, а не его номера в последовательности элементов.
Способы выбора данных зависит только от организации структуры: связанный список или линейный список типа стека или очереди.
Список может быть двусвязным для реализации движения по списку в двух направлениях: слева направо или справа налево.
Список типа очереди реализует концепцию выборки данных типа FIFO: «первым пришел – первым ушел». Конец списка – указатель, равный значению nil, что означает отсутствие ссылки или указателя на следующий элемент. Дополнение элементов в этот тип списка проводится только в его конец. Начало списка, хранящееся в памяти, позволяет прочитать весь список. При дополнении элементов в спи- сок-очередь образуется ссылка на новый элемент.
Список типа стек реализует концепцию заполнения данных и их удаления из структуры только через его вершину. Дисциплина такой обработки данных получила название LIFO. Элемент, который первым был помещен в стек, постепенно при заполнении стека перемещается вниз. Первым выводится элемент стека, помещенный в него последним.
Определение типа данных для создания списков: type
PList=^p;
p=record
x:real;
next:PList;
end;
Создается структура типа записи, в которой обязательны информационное поле и поле ссылки.
Использование списочного элемента: var
69
List:PList; begin
…
readln(List^.x);
// чтение содержимого информационного поля списка next:=List^.next.
// выбор следующего элемента списка… end.
Рассмотрим пример создания списков разных типов из строк. Желательно для создания сложных структур данных использовать строки ограниченной длины.
type PString=string[60];
//это объявление типа строки, которая будет использоваться
//в списочных структурах.
Список: Type
PList=^List;
List=record
item:PString;
next:PList;
end;
Замечание. В современных версиях языка Pascal использование ссылки необязательно. Таким образом, разрешена запись такого типа:
Var pl:Plist;
В разделе описания действий, то есть в реализации методов, можно записать так:
Pl.item или Pl.next.
Итак, List – название списка, PList – указатель на список, Item – элемент списка и Next – указатель на следующий элемент списка. Стек:
Type PStack=^Stack; Stack=record Item:PString; next:PStack;
end;
70