Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Babalova_Algoritmizaciya_zadach_i_strukturirovanie_programm_2013

.pdf
Скачиваний:
114
Добавлен:
27.03.2016
Размер:
1.29 Mб
Скачать

reset(ft);

for i := 1 to 26 do begin

reset(ft);

new(pp);

pp:=nil;

while not eof(ft) do begin

read(ft,ab);

if ab.a[1]= key_sl[i] then begin

tt[i].lit:=ab.a[1]; key:= ab.a[1]; Cr_list(pp,ab); Sort_list(pp);

// Сортируем список в строке таблицы по алфавиту tt[i].next:=pp;

end;

end;

end;

closefile(ft);

end;

procedure show_tab_hash;

// Сортируем каждую строку в таблице по алфавиту var i:integer;

ps:plist; begin

writeln(ToRus('Ключ строки таблицы'):30,''); for i:=1 to 26 do

begin ps:=tt[i].next; while ps<> nil do

begin write(tt[i].lit:20); write(ps.inf.a:20) ;

Writeln((ps.inf.b):30 ); ps:=ps.next;

end;

101

end;

end;

procedure poisk_slovo(); var ww,slovo:ss;

kkk:string[1];

i:integer;

ps:plist;

b:boolean; begin

writeln( torus('Введите английское слово'):40); readln(slovo);

kkk:=slovo[1];

b:=false;

//контроль отсутствия слова в словаре по ключу for i:= 1 to 26 do

if kkk = tt[i].lit then begin

ps:=tt[i].next;

ww:= searh_word( ps,slovo); b:=true;

end ;

//ww='' при отсутствии ключа в таблице.

//В приведенном примере у

//нас представлен не весь алфавит

if (not b) or (ww ='') then writeln(ToRus('слова нет в словаре')) else

writeln( slovo:20,ww:30);

end;

end.

unit Unit_list_cons;

// Модуль для работы со строками таблицы

{$APPTYPE CONSOLE} interface

uses Sysutils; type ss=string[30];

aa=record

a,b:ss;

102

end;

pList=^List;

List=record

inf:aa;

next:pList;

end;

Procedure Cr_list(var pn:Plist;kk:aa); Procedure Sort_list(var pn:Plist);

function searh_word(var pn:plist;ww:ss):ss; implementation

Procedure Cr_list(var pn:Plist;kk:aa); var p,l:plist;

begin

if pn=nil then begin

new(p);

p.inf:=kk;

p.next:=nil;

pn:=p; end else

begin new(l); l.inf:=kk; l.next:=pn; pn:=l;

end;

end;//Это создание строк таблицы

Procedure Sort_list(var pn:Plist); var p1,p2:plist;

noswap:boolean;

tt:aa; begin

repeat p1:=pn;

p2:=p1^.next;

noswap:=true; while p2<> nil do

begin

103

if (p1.inf.a > p2.inf.a) then begin

noswap:=false;

tt:=p1.inf;

p1.inf:=p2.inf;

p2.inf:=tt;

end;

p1:=p2;

p2:=p2.next;

end;

until noswap; end;

function searh_word(var pn:plist;ww:ss):ss; var pp:plist;

begin pp:=pn;

Result:=''; // Если слова нет while pp<> nil do

if pp.inf.a =ww then begin

result:=pp.inf.b;

// Слово найдено

exit; end else pp:=pp.next;

end;

end.

Программа позволяет создать словарь исходных слов в файле. При каждом использовании словаря надо будет создавать хештаблицу, в которой для ускорения поиска слов упорядочивают строки по алфавиту. На рис. 34 показан исходный текст и текст словаря после создания хеш-таблицы.

Пример поиска слов в созданном словаре показан на рис. 35. Слово не находится в двух вариантах: нет слова в словаре или нет искомого ключа в словаре.

Все варианты алгоритмического усовершенствования интерфейса можете выполнить самостоятельно. В этом примере показа-

104

но, как создаются модули в консольном приложении, как они используются и основные методы работы с хеш-таблицами. Нет методов контроля правильности ввода данных, методов добавления данных, удаления или исправления данных и так далее. Все алгоритмы этих методов мы рассматривали в других разделах структур данных.

Рис. 34. Работа по созданию таблицы

105

Рис. 35. Поиск слов в словаре

Задачи для самостоятельной работы

Общие требования к разработке программ в этом разделе:

обязательное графическое представление структуры программ;

все методы обработки данных оформляются процедурами или функциями на основе описанных алгоритмов этих методов;

методы для обработки одной структуры данных должны быть оформлены в своем модуле (Unit);

106

все исходные данные сохраняются в файле;

обеспечивается вывод всех этапов решения задачи через меню работ в основной программе;

число модулей, объединенных одним проектом, может быть любое, большее двух.

6.1. Составить список абонентов телефонной сети: фамилия, имя, отчество, адрес, номер телефона. Разработать таблицу, обеспечивающую поиск абонента: по фамилии и по номеру телефона. Методы должны обеспечить следующие виды работ:

1.Ввод сведений в файл.

2.Создание списка всех абонентов.

3.Создание списков абонентов по заданной категории номеров телефонов (Диапазон номеров: 100–199, 200–299 и т.д.). Ключом для строки таблицы может быть диапазон номеров.

4.Обеспечить сортировку списка абонентов по алфавиту.

5.Выполнение всех видов работы

обеспечить через текстовое меню.

6. Вывод всех этапов обработки таблицы на экран.

6.2. Сведения о пассажирах рейсов текущего дня в аэропорте представлены в таблице в следующем формате:

Номер

Фамилия

Вес

Пункт

рейса

пассажира

багажа

назначения

Таблица по обработке сведений о пассажирах по весу должна обеспечить: формирование списка пассажиров по убыванию веса их багажа, выбор пассажиров с каждого рейса, вес багажа которых превышает некоторую предельную норму (допустим 20 кг веса). Обеспечить сортировку простым включением пассажиров каждого рейса по алфавиту, по весу багажа, по пунктам назначения. Информацию об исходных данных занести в файл и сохранить.

6.3. Каждая строка таблицы – это сведения о некоторых деталях. Формат строки таблицы:

Деталь

Коли-

Место

Коли-

Место

 

чество

хранения

чество

хранения

Создать хеш-таблицу из списков деталей при условии, что каждый тип деталей в одной строке снабжается ключом из названия детали. Методы: вставить новую деталь на правильное место табли-

107

цы, удалить деталь из таблицы, найти деталь по ключу, определить число сравнений для каждого из поисков. Строку таблицы отсортировать по количеству деталей в каждом месте хранения методом вставки. Предусмотреть вывод таблицы целиком и любого из ее фрагментов. Сохранение таблицы обеспечить в файле, чтобы начальное создание таблицы выполнять только один раз.

6.4. Разработать таблицу, обеспечивающую обработку данных следующего формата:

Индекс

Фамилия

Номер

группы

имя, отчество

следующего

Если указан номер 00, то это означает конец строки таблицы. Обеспечить вывод строк таблицы в естественном порядке номеров. Исходные данные сохранять в динамическом массиве. Упорядочивание таблицы по строкам выполнить простыми включениями. Исходные данные создать и хранить в файле. Определить число записей для каждой из групп, имеющихся в таблице, Выбрать из таблицы группы, в которых списочное количество лиц более 10. Все полученные сведения по таблице представить на экране, а последовательность ее обработки обеспечить с помощью меню.

6.5. Известен список абонентов телефонной сети. Сведения об абонентах имеют следующие формат:

Индекс

Номер

Фамилия

Адрес

телефона

телефона

И. О.

 

Создать таблицу с ключами на основании индексов телефонов. Обеспечить сортировку таблицы в пределах каждой строки по фамилиям методом простого выбора. Исходную таблицу создать и сохранить в файле. Отсортированную таблицу сохранить в другом файле. Обеспечить вывод сведений обо всех свободных номерах телефонов по каждому из индексов. В меню предусмотреть обработку запросов на исправление данных об абоненте по названному номеру телефона.

6.6. На каждый рейс самолета имеется список пассажиров.

Номер рейса

Фамилия И.О.

Дата,

Пункт назначения

 

 

время

 

Создать таблицу со списками всех пассажиров на одну дату. В качестве ключа в таблице использовать номер рейса. В каждой

108

строке таблицы список или последовательность пассажиров одного рейса. Выполнить сортировку строк таблицы методом вставки. Обеспечить поиск любого пассажира, получение и сохранение таблицы в файле, вывод всех сведений на экран. Обработку всех сведений выполнять через меню.

6.7.На складе имеется список организаций, арендующих склад. Формат сведений об организации: название организации, фамилия ответственного лица, количество метров, занимаемых организацией, дата поступления на склад продукции. Срок хранения на складе ограничен 30 днями. Разработать таблицу для поиска организаций, время хранения у которых закончилось. Ключ для каждой строки таблицы формируется из названия организации. Упорядочить строки таблицы по дате поступления продукции методом быстрой сортировки. Учтите, что каждая организация может завозить продукцию на склад любое число раз. Все пункты обработки сведений должны сопровождаться выводом информации.

6.8.При проведении конференции регистрируют всех участников. Составляется список по сведениям об участниках в формате: фамилия, город, организация. Разработать таблицу для обработки сведений об участниках конференции и обеспечить вывод списка участников из одного города. Ключом таблицы сделать города участников конференции. Строки таблицы упорядочить по алфавиту методов простого выбора. Выполнение всех видов работы обеспечить через текстовое меню.

6.9.На избирательный участок подается список жителей одной улицы. Формат сведений: фамилия, номер дома, номер квартиры, дата рождения (дд/мм/гггг). Создать хеш-таблицу из этого списка. Ключом для создания таблицы пусть будет номер дома. В каждой строке таблицы все сведения нужно упорядочить по алфавиту методом Шейкер-сортировки. Обеспечить поиск жителей, которые могут голосовать (>=18). Напечатать по запросу полный список жителей. Выполнение всех видов работы обеспечить через текстовое меню.

6.10.Необходимо записать данные обо всех подписчиках некоторого почтового отделения в файл. Формат сведений: индекс издания, газета (журнал), фамилия, адрес подписчика, количество экземпляров каждого из изданий. Все сведения заносятся в список. Разработать хеш-таблицу для обработки сведений о подписчиках.

109

Ключом для формирования таблицы взять почтовый индекс издания. Всех подписчиков одного издания упорядочить по фамилиям методом вставки. Обеспечить поиск подписчика, дополнение списков подписчиков. Все виды работ выполнять через меню.

6.11.Создан массив данных о жителях некоторого района. В каждом элементе массива указано: фамилия, имя, отчество, пол, год рождения, адрес. Создать на основании этого массива сведений таблицу, в каждой строке которой будут жители, фамилии которых начинаются на одну букву. Выделить в новый массив адреса, по которым живут работоспособные граждане. Диапазоны возраста для определения работоспособности: 18–55 или 18–60 с учетом пола. Упорядочить каждую строку таблицы по году рождения жителя. Определить количество потенциально работающих жителей на любую, вводимую в диалоге, букву. Выполнение всех видов работ обеспечить через текстовое меню.

6.12.Создать методы для обработки сведений о жителях некоторой улицы. Исходный массив данных имеет формат: фамилия, номер дома, квартира, год рождения, пол. Разработать таблицу, ключом в которой будет номер дома. Обеспечить вывод сведений об избирателях (возраст более 18 лет), сортировку сведений выполнить по номеру квартиры методом быстрой сортировки, удаление выбывшего жителя. Выполнение всех видов работы обеспечить через текстовое меню.

6.13.Составлены списки рейсов самолетов до каждого пункта назначения на все дни недели. Формат сведений: номер рейса, пункт назначения, час вылета, время полета. Вся исходная информация должна быть занесена в файл и оттуда будет считываться в таблицу. Разработать таблицу, обеспечивающую обработку данных

орасписании полетов самолетов. Ключом для создания таблицы выбираем день недели. Методы должны обеспечить:

1.Сортировку таблицы по пунктам назначения (метод Шейкерсортировки).

2.Выбор рейса в заданный пункт назначения с наименьшим временем полета.

3.Исправление информации (удаление отмененного рейса). Обработка таблицы выполняется через меню.

6.14.Задается список сведений об архиве. Формат сведений: Название темы, номер раздела, название раздела, количество записей

110

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]