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

Тип работы:
Лабораторная работа
Предмет:
Программирование


Узнать стоимость

Детальная информация о работе

Выдержка из работы

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

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

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

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

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

Решение:

ПоказатьСвернуть
Заполнить форму текущей работой