Федеральне агентство з освіти РФ
ФГТУ СПО «Перевозскій будівельний коледж»
Лабораторна робота з дисципліни «Бази даних»
на тему: «АЛГОРИТМИ І ОРГАНІЗАЦІЯ ДАНИХ»
Підготував студент 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 | Комп'ютер |
Алгоритм програми:
Запуск програми.
Введення розмірів таблиці, тобто кількість стовпців і рядків.
Введення всіх записів таблиці.
Запис цієї таблиці у файл «Baza. Txt».
Введення назви реквізитів, за якими потрібно індексувати файл.
Перевірка всіх записів основного реквізиту на впорядкованість, тобто розташування за зростанням або спаданням (за алфавітом або по цифрах):
Якщо всі записи впорядковані, то:
Якщо записів в реквізиті менше 10, то в індексі необхідно поміщати покажчик на кожен запис.
Якщо записів в реквізиті більше 10, то в індексі необхідно поміщати покажчик не на кожен запис, а на ключі, які будуть створюватися, наприклад, з проміжком в 7 записів (проміжок залежить від того, скільки записів в реквізиті всього знаходиться).
2) Якщо всі записи не впорядковані, то, в індексі необхідно поміщати покажчик на кожен запис, а сам індексний файл можна впорядкувати за значеннями ключа індексування.
Запис індексованої таблиці у файл «Index. Txt».
Вихід з програми.
Завдання 3.17
Розгляньте файл з двох реквізитів А і В з першим записом (11,8) і наступними значеннями А і В, одержуваними за формулами:
складається з 25 записів. Створіть індексні файли за реквізитами А і В і двом реквізитами спільно. Необхідні додаткові параметри виберіть самостійно.
Рішення: