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

10407
знаков
2
таблицы
3
изображения

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

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

 

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

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

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


Информация о работе «Алгоритмы и организация данных»
Раздел: Информатика, программирование
Количество знаков с пробелами: 10407
Количество таблиц: 2
Количество изображений: 3

Похожие работы

Скачать
61871
4
0

... конкретные примеры, наглядно это обосновывая. Для написания программ необходимо использовать особенные языки. Языки программирования - это нормированные языки, которые служат для описания инструкций обработки, структур данных, а также ввода и вывода данных. Необходимо преобразовывать алгоритм всегда таким образом, чтобы выделять в нем "подалгоритмы". Теория разработки программного обеспечения ...

Скачать
32292
12
3

... . Программа является познавательной, её целесообразно использовать в качестве обучающего примера. 5 Анализ результата На основе проведенных тестов программы был проведен анализ алгоритмов нечисленной обработки данных на примере массива длиной в 16, 128, 512, 1024 элементов. 5.1 Линейный поиск Для проведения анализа линейного поиска в качестве заданного элемента были взяты числа, ...

Скачать
7618
0
1

своих функций необходимы операционная система и прикладная программа. Цель и задачи работы Объектом исследования является операционная система Windows Embedded CE 6.0 и алгоритмы, средства организации вычислительных систем на базе технологии клиент-сервер. Основной целью является исследование структуры и режимов работы Windows CE, и обзор современных терминальных решений в мире, их анализ для ...

Скачать
9704
4
2

... . Но размер ключа используется только для записи (для организации данных). Фактически, каждый 8 бит отбрасывается и эффективный размер ключа – 56 бит.   Работа алгоритма   1 шаг. Перестановки битов ключа с использованием таблицы перестановок. Для примера введем: olga1234 Заданный ключ в двоичном представлении: 0110111101101100011001110110000100110001001100100011001100110100 В ...

0 комментариев


Наверх