Алгоритмы и организация данных

Описание:
Тип работы: лабораторная работа
Программа последовательного поиска в последовательном неотсортированном массиве реквизитов единственного значения. Алгоритм сортировки простым выбором. Программа индексирования основного файла по одному реквизиту. Индексные файлы по реквизитам.
Доступные действия
Введите защитный код для скачивания файла и нажмите "Скачать файл"
Защитный код
Введите защитный код

Нажмите на изображение для генерации защитного кода

Текст:

Федеральное агентство по образованию РФ

ФГОУ СПО «Перевозский строительный колледж»

 

Лабораторная работа по дисциплине «Базы данных»

на тему: «АЛГОРИТМЫ И ОРГАНИЗАЦИЯ ДАННЫХ»

Подготовил студент 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


Задание 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

Приведенная программа не реализует алгоритм сортировки простым выбором.


Задание 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 записей. Создайте индексные файлы по реквизитам А и В и двум реквизитам совместно. Необходимые дополнительные параметры выберите самостоятельно.

Решение:

Описание: Задание 3

Информация о файле
Название файла Алгоритмы и организация данных от пользователя z3rg
Дата добавления 11.1.2012, 20:29
Дата обновления 11.1.2012, 20:29
Тип файла Тип файла (zip - application/zip)
Скриншот Не доступно
Статистика
Размер файла 164.12 килобайт (Примерное время скачивания)
Просмотров 667
Скачиваний 58
Оценить файл