Алгоритмы и организация данных
Напишите программу индексирования основного файла по одному реквизиту. Используйте любой доступный вам язык программирования. Рассмотрите файл из двух реквизитов, А и В с первой записью (11,8) и последующими значениями, А и В, получаемыми по формулам: Если записей в реквизите меньше 10, то в индексе необходимо помещать указатель на каждую запись. Индексирование основного файла по одному реквизиту… Читать ещё >
Алгоритмы и организация данных (реферат, курсовая, диплом, контрольная)
Федеральное агентство по образованию РФ ФГОУ СПО «Перевозский строительный колледж»
Лабораторная работа по дисциплине «Базы данных»
на тему: «АЛГОРИТМЫ И ОРГАНИЗАЦИЯ ДАННЫХ»
Подготовил студент 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
Напишите программу индексирования основного файла по одному реквизиту. Используйте любой доступный вам язык программирования.
Решение:
Индексирование основного файла по одному реквизиту будем делать на примере вот этой таблицы:
А | В | С | |
Первый завод | Стул | ||
Второй завод | Стол | ||
Третий завод | Компьютер | ||
Индексирование файла будем делать по реквизиту «A».
Индексный файл будет выглядеть так:
А | С | |
Стул | ||
Стол | ||
Компьютер | ||
Алгоритм программы:
1. Запуск программы.
2. Ввод размеров таблицы, т. е. количество столбцов и строк.
3. Ввод всех записей таблицы.
4. Запись этой таблицы в файл «Baza.txt».
5. Ввод названия реквизитов, по которым нужно индексировать файл.
6. Проверка всех записей основного реквизита на упорядоченность, т. е. расположение по возрастанию или убыванию (по алфавиту или по цифрам):
1) Если все записи упорядочены, то:
1) Если записей в реквизите меньше 10, то в индексе необходимо помещать указатель на каждую запись.
2) Если записей в реквизите больше 10, то в индексе необходимо помещать указатель не на каждую запись, а на ключи, которые будут создаваться, например, с промежутком в 7 записей (промежуток зависит от того, сколько записей в реквизите всего находится).
2) Если все записи не упорядочены, то, в индексе необходимо помещать указатель на каждую запись, а сам индексный файл можно упорядочить по значениям ключа индексирования.
7. Запись индексированной таблицы в файл «Index.txt».
8. Выход из программы.
Задание 3.17
Рассмотрите файл из двух реквизитов, А и В с первой записью (11,8) и последующими значениями, А и В, получаемыми по формулам:
состоящий из 25 записей. Создайте индексные файлы по реквизитам, А и В и двум реквизитам совместно. Необходимые дополнительные параметры выберите самостоятельно.
Решение: