Алгоритмы и организация данных
Программа последовательного поиска в последовательном неотсортированном массиве реквизитов единственного значения. Алгоритм сортировки простым выбором. Программа индексирования основного файла по одному реквизиту. Индексные файлы по реквизитам.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | лабораторная работа |
Язык | русский |
Дата добавления | 15.02.2009 |
Размер файла | 896,4 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Федеральное агентство по образованию РФ
ФГОУ СПО «Перевозский строительный колледж»
Лабораторная работа по дисциплине «Базы данных»
на тему: «АЛГОРИТМЫ И ОРГАНИЗАЦИЯ ДАННЫХ»
Подготовил студент 351 группы: Дмитриев А.С.
Проверила: Патлай Н.А.
Задание 3.1
Напишите программу последовательного поиска в последовательном неотсортированном массиве реквизитов единственного значения q. Используйте любой доступный вам язык программирования.
Решение:
Код программы:
unit Proga;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, jpeg, ExtCtrls;
type
TForm1 = class(TForm)
StringGrid1: TStringGrid;
Edit1: TEdit;
Button1: TButton;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Edit5: TEdit;
Edit6: TEdit;
Image1: TImage;
Label2: TLabel;
Label1: TLabel;
Label3: TLabel;
procedure Button1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure Edit2KeyPress(Sender: TObject; var Key: Char);
procedure Edit3KeyPress(Sender: TObject; var Key: Char);
procedure Edit4KeyPress(Sender: TObject; var Key: Char);
procedure Edit5KeyPress(Sender: TObject; var Key: Char);
procedure Edit6KeyPress(Sender: TObject; var Key: Char);
procedure StringGrid1KeyPress(Sender: TObject; var Key: Char);
procedure Edit1KeyPress(Sender: TObject; var Key: Char);
procedure StringGrid1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{поиск в массиве перебором}
procedure TForm1.Button1Click(Sender: TObject);
Const
SIZE=5;
Var
a:Array [1..SIZE] of Integer; // массив
obr:Integer; // образец для поиска
found:Boolean; // TRUE - совпадение образца с элементом массива
i:Integer; // индекс элемента массива
begin
If Length (StringGrid1.Cells[0,0])>3 then
begin
ShowMessage ('Ошибка в P (1) !!! Нельзя ввести число больше "999".');
StringGrid1.Cells[0,0]:='';
Exit;
end;
If Length (StringGrid1.Cells[1,0])>3 then
begin
ShowMessage ('Ошибка в P (2) !!! Нельзя ввести число больше "999".');
StringGrid1.Cells[1,0]:='';
Exit;
end;
If Length (StringGrid1.Cells[2,0])>3 then
begin
ShowMessage ('Ошибка в P (3) !!! Нельзя ввести число больше "999".');
StringGrid1.Cells[2,0]:='';
Exit;
end;
If Length (StringGrid1.Cells[3,0])>3 then
begin
ShowMessage ('Ошибка в P (4) !!! Нельзя ввести число больше "999".');
StringGrid1.Cells[3,0]:='';
Exit;
end;
If Length (StringGrid1.Cells[4,0])>3 then
begin
ShowMessage ('Ошибка в P (5) !!! Нельзя ввести число больше "999".');
StringGrid1.Cells[4,0]:='';
Exit;
end;
If Length (Edit1.Text)>3 then
begin
ShowMessage ('Ошибка в "Образец" !!! Нельзя ввести число больше "999".');
Edit1.Text:='';
Exit;
end;
If (StringGrid1.Cells[0,0]='') or (StringGrid1.Cells[1,0]='') or (StringGrid1.Cells[2,0]='') or (StringGrid1.Cells[3,0]='') or (StringGrid1.Cells[4,0]='') then
begin
ShowMessage ('Введены не все элементы уравнения. ПРОДОЛЖЕНИЕ НЕВОЗМОЖНО!');
Exit;
end;
If (Edit1.Text='') then
begin
ShowMessage ('Не введен образец. ПРОДОЛЖЕНИЕ НЕВОЗМОЖНО!');
Exit;
end;
// ввод массива
For i:=1 to SIZE do
a[i]:=StrToInt (StringGrid1.Cells[i-1,0]);
If Length (StringGrid1.Cells[0,0])=0 then
begin
ShowMessage ('Введены не все элементы массива!!!');
Exit;
end;
// ввод образца для поиска
obr:=StrToInt (Edit1.Text);
// поиск
found:=FALSE; // пусть нужного элемента в массиве нет
i:=1;
Repeat
If a[i]=obr then
found:=TRUE else
i:=i+1;
Until (i>SIZE) or (found=TRUE);
If found then
ShowMessage ('Совпадение с элементом номер P ('+IntToStr (i)+').'+#13+'Поиск успешен.') else
ShowMessage ('Совпадение с образцом нет.');
end;
procedure TForm1.FormActivate(Sender: TObject);
begin
Edit2.Text:=' P (1) ';
Edit3.Text:=' P (2) ';
Edit4.Text:=' P (3) ';
Edit5.Text:=' P (4) ';
Edit6.Text:=' P (5) ';
end;
procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);
begin
Key:=Chr(0);
end;
procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);
begin
Key:=Chr(0);
end;
procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
Key:=Chr(0);
end;
procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);
begin
Key:=Chr(0);
end;
procedure TForm1.Edit6KeyPress(Sender: TObject; var Key: Char);
begin
Key:=Chr(0);
end;
procedure TForm1.StringGrid1KeyPress(Sender: TObject; var Key: Char);
begin
Case Key of
'0'..'9':;
#8:;
else
Key:=Chr(0);
end;
end;
procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
begin
Case Key of
'0'..'9':;
#8:;
else
Key:=Chr(0);
end;
end;
procedure TForm1.StringGrid1Click(Sender: TObject);
begin
If StringGrid1.Cells[0,0]=StringGrid1.Cells[1,0] then
begin
If Length (StringGrid1.Cells[0,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
If Length (StringGrid1.Cells[1,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
StringGrid1.Cells[0,0]:='';
StringGrid1.Cells[1,0]:='';
end;
If StringGrid1.Cells[0,0]=StringGrid1.Cells[2,0] then
begin
If Length (StringGrid1.Cells[0,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
If Length (StringGrid1.Cells[2,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
StringGrid1.Cells[0,0]:='';
StringGrid1.Cells[2,0]:='';
end;
If StringGrid1.Cells[0,0]=StringGrid1.Cells[3,0] then
begin
If Length (StringGrid1.Cells[0,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
If Length (StringGrid1.Cells[3,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
StringGrid1.Cells[0,0]:='';
StringGrid1.Cells[3,0]:='';
end;
If StringGrid1.Cells[0,0]=StringGrid1.Cells[4,0] then
begin
If Length (StringGrid1.Cells[0,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
If Length (StringGrid1.Cells[4,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
StringGrid1.Cells[0,0]:='';
StringGrid1.Cells[4,0]:='';
end;
If StringGrid1.Cells[1,0]=StringGrid1.Cells[2,0] then
begin
If Length (StringGrid1.Cells[1,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
If Length (StringGrid1.Cells[2,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
StringGrid1.Cells[1,0]:='';
StringGrid1.Cells[2,0]:='';
end;
If StringGrid1.Cells[1,0]=StringGrid1.Cells[3,0] then
begin
If Length (StringGrid1.Cells[1,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
If Length (StringGrid1.Cells[3,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
StringGrid1.Cells[1,0]:='';
StringGrid1.Cells[3,0]:='';
end;
If StringGrid1.Cells[1,0]=StringGrid1.Cells[4,0] then
begin
If Length (StringGrid1.Cells[1,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
If Length (StringGrid1.Cells[4,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
StringGrid1.Cells[1,0]:='';
StringGrid1.Cells[4,0]:='';
end;
If StringGrid1.Cells[2,0]=StringGrid1.Cells[3,0] then
begin
If Length (StringGrid1.Cells[2,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
If Length (StringGrid1.Cells[3,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
StringGrid1.Cells[2,0]:='';
StringGrid1.Cells[3,0]:='';
end;
If StringGrid1.Cells[2,0]=StringGrid1.Cells[4,0] then
begin
If Length (StringGrid1.Cells[2,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
If Length (StringGrid1.Cells[4,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
StringGrid1.Cells[2,0]:='';
StringGrid1.Cells[4,0]:='';
end;
If StringGrid1.Cells[3,0]=StringGrid1.Cells[4,0] then
begin
If Length (StringGrid1.Cells[3,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
If Length (StringGrid1.Cells[4,0])<>0 then
begin
ShowMessage ('Нельзя ввести одинаковые числа!!!');
end;
StringGrid1.Cells[3,0]:='';
StringGrid1.Cells[4,0]:='';
end;
end;
end.
Скриншот:
Задание 3.9
Реализует ли приведенная ниже программа алгоритм сортировки простым выбором?
PROGRAM Simple_Select;
Const N=400;
Var J,I,K:Integer;
Max,Ind: Integer;
A: Array [0..N] of Integer;
BEGIN
For I:=0 to N do
Begin
A[I]:=Random (N);
Write (A[I]:4);
end;
For J:=N downto 1 do
begin
Max:=A[J];
Ind := J;
For I:=J downto 0 do
If A[I]>Max then
Begin
Max:=A[I];
Ind:=I;
end;
If Ind<>J then
Begin
К:=A[Ind];
A[Ind]:=A[J];
A[J]:=К;
End;
end;
For I:=0 to N do
Write (A[I]:4);
END.
Решение:
Скриншот:
Приведенная программа не реализует алгоритм сортировки простым выбором.
Задание 3.12
Напишите программу индексирования основного файла по одному реквизиту. Используйте любой доступный вам язык программирования.
Решение:
Индексирование основного файла по одному реквизиту будем делать на примере вот этой таблицы:
А |
В |
С |
|
1 |
Первый завод |
Стул |
|
2 |
Второй завод |
Стол |
|
3 |
Третий завод |
Компьютер |
Индексирование файла будем делать по реквизиту «A».
Индексный файл будет выглядеть так:
А |
С |
|
1 |
Стул |
|
2 |
Стол |
|
3 |
Компьютер |
Алгоритм программы:
1. Запуск программы.
2. Ввод размеров таблицы, т.е. количество столбцов и строк.
3. Ввод всех записей таблицы.
4. Запись этой таблицы в файл «Baza.txt».
5. Ввод названия реквизитов, по которым нужно индексировать файл.
6. Проверка всех записей основного реквизита на упорядоченность, т.е. расположение по возрастанию или убыванию (по алфавиту или по цифрам):
1) Если все записи упорядочены, то:
1) Если записей в реквизите меньше 10, то в индексе необходимо помещать указатель на каждую запись.
2) Если записей в реквизите больше 10, то в индексе необходимо помещать указатель не на каждую запись, а на ключи, которые будут создаваться, например, с промежутком в 7 записей (промежуток зависит от того, сколько записей в реквизите всего находится).
2) Если все записи не упорядочены, то, в индексе необходимо помещать указатель на каждую запись, а сам индексный файл можно упорядочить по значениям ключа индексирования.
7. Запись индексированной таблицы в файл «Index.txt».
8. Выход из программы.
Задание 3.17
Рассмотрите файл из двух реквизитов А и В с первой записью (11,8) и последующими значениями А и В, получаемыми по формулам:
состоящий из 25 записей. Создайте индексные файлы по реквизитам А и В и двум реквизитам совместно. Необходимые дополнительные параметры выберите самостоятельно.
Решение:
Подобные документы
Структура данных с указанием типов. Общая структурная схема программы. Алгоритмы сортировки вставками. Назначение make-файла. Функции управления программой; перемещения и корректировки введенных данных и их удаления справочника, загрузки данных из файла.
курсовая работа [1,3 M], добавлен 12.01.2016Разработка программы для осуществления сортировки данных методами "Выбора" с использованием языка C# и Visual Studio 2012. Плавный метод сортировки. Основные фазы сортировки во внутреннем представлении пирамиды. Программа сортировки методами выбора.
курсовая работа [637,6 K], добавлен 29.11.2014Описание алгоритма сортировки с двоичным включением, выбор структур данных. Пример сортировки массива, отсортированного случайным образом. Алгоритм покрытия по методу "Построение одного кратчайшего покрытия". Волновой алгоритм поиска длиннейшего пути.
курсовая работа [78,2 K], добавлен 24.09.2010Основные определения поиска подстроки в строке. Простейшие алгоритмы поиска подстроки в строке. Алгоритмы последовательного поиска и Рабина-Карпа, создание и описание программы, реализующей их. Порядок работы с приложением. Тестирование алгоритмов.
курсовая работа [2,7 M], добавлен 24.05.2012Структура заданного исходного файла и структуры данных, соответствующие данным файла. Подпрограмма проверки принадлежности текста к одной из шести кодовых таблиц. Алгоритмы перекодировки файла в cp1251. Алгоритм сортировки записей исходного файла.
курсовая работа [63,7 K], добавлен 12.12.2010Методы реализации алгоритмов сортировки и алгоритмов поиска на языках программирования высокого уровня. Программирование алгоритмов сортировки и поиска в рамках создаваемого программного средства на языке Delphi. Создание руководства пользователя.
курсовая работа [1,7 M], добавлен 16.04.2012Организация возможности просмотра текстовых файлов и осуществления поиска нужных слов в тексте. Редактирование текста (шрифт, размер). Алгоритм поиска подстроки в строке (метод Кнута-Морриса-Пратта). Загрузка текста из файла (с расширением .txt).
курсовая работа [2,2 M], добавлен 29.05.2013Создание программы, которая позволяет пользователю задавать произвольную директорию, содержащую музыкальные файлы. Осуществление поиска или рекурсивного поиска файлов в этой директории и формирование csv-файла. Исправление тегов в музыкальных файлах.
курсовая работа [241,3 K], добавлен 13.02.2015Понятие и свойства алгоритмов: рекурсивного, сортировки и поиска. Простая программа и структурный подход к разработке алгоритмов. Язык блок-схем и проектирования программ (псевдокод). Рассмотрение принципов объектно-ориентированного программирования.
презентация [53,1 K], добавлен 13.10.2013Обработка массивов элементов любого типа как главное назначение алгоритмов сортировки. Анализ наиболее используемых алгоритмов сортировки: пузырьком, выбором, вставками, методом Шелла и быстрой сортировкой. Основные требования к алгоритмам сортировки.
реферат [189,8 K], добавлен 06.12.2014