РефератыИнформатика, программированиеАлАлгоритмы и организация данных

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

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


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


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


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


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


Решение:




Сохранить в соц. сетях:
Обсуждение:
comments powered by Disqus

Название реферата: Алгоритмы и организация данных

Слов:1196
Символов:16205
Размер:31.65 Кб.