Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет3.doc
Скачиваний:
6
Добавлен:
19.07.2019
Размер:
545.28 Кб
Скачать

3.2 Текстовая форма записи алгоритма

Линейный поиск

Шаг 1 Вывести A[n], X

Шаг 2 Положить i=1…n

Шаг 3 Если a[i]=x, то выводим i

Шаг 4 Положить I

Шаг 5 Остановиться

Бинарный поиск

Шаг 1 вывести [A,n,x]

Шаг 2 положить j=1…n-1; i=1…n-1

Шаг 3 если а[i]>a[i+1]

Шаг 4 положить mem:=а[j]; a[i]:=a[i+1]; a[i+1]:=mem.

Шаг 5 положить I, j, l=1, r=n, m=(l+r)div2

Шаг 6 если x=a[m]; x=>a[m], то l:=m+1; r:=m-1

Шаг 7 Если R>L, вернуться

Шаг 8 вывести m

Шаг 9 Остановиться

3.3 Входные и выходные данные

Входные данные заданы в таблице 6 по 8

Таблица 6

Величина

Назначение

Тип

i

число

вещественный

A

число

вещественный

Выходные данные заданы в таблице 7

Таблица 7

Величина

Назначение

Тип

X

число

вещественный

A[n]

Массив

вещественный

Таблица 8

Величина

Назначение

Тип

i

число

целые

A

число

вещественный

m

число

вещественный

x

число

вещественный

Выходные данные заданы в таблице 9

Таблица 9

Величина

Назначение

Тип

X

число

вещественный

A[n]

Массив

вещественный

m

число

вещественный

3.4 Блок-схема алгоритма

Линейный поиск

Бинарный поиск.

3.5 Форма программы

Форма программы представлена на рисунке 8

Button2

Button1

label1

Edit1

Button3

StringGrid1

Edit2

Edit3

label2

label3

Рисунок 8

3.6 Разработка интерфейса. Объекты и их свойства

Разработка интерфейса

Label1,Label2,Label3 – поле для обозначения;

Edit1 – поле для ввода данных;

Button1, Button2, Button3 – кнопки;

StringGrid1 – поле для ввода массива.

Таблица 6

Объект

Свойство

Устанавливаемое значение

Label1

Caption

Ввести n

Button1

Caption

ok

Edit1

Text

пусто

StringGrid1

Text

пусто

Button2

Text

По возрастанию

Button3

caption

По убыванию

Edit2

text

пусто

Edit3

text

пусто

Label2

caption

поиск

Label3

caption

Номер элемента

3.7 Код программы

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, Grids;

type

TForm1 = class(TForm)

Edit1: TEdit;

Label1: TLabel;

Button1: TButton;

Button2: TButton;

StringGrid1: TStringGrid;

Button3: TButton;

Label2: TLabel;

Label3: TLabel;

Edit2: TEdit;

Edit3: TEdit;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Button3Click(Sender: TObject);

private

{ Private declarations }

public

n:integer; //размер массива

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

var i,j,mem: integer;//Объявление переменных i,j-счетчики

procedure TForm1.Button1Click(Sender: TObject); //Процедура обработки нажатия кнопки

var A: array[1..20] of integer; //Объявление массива

begin

for i :=1 to n do A[i]:=strtoint(StringGrid1.Cells[0,i-1]); //Считывание данных в массив

edit3.Text := 'не найдено'; //начальное значение для поля ответа

for i :=1 to n do begin //цикл для линейного поиска

if A[i]=strtoint(edit2.Text) then edit3.Text := inttostr(i); //Вывод ответа

end;

end;

procedure TForm1.Button3Click(Sender: TObject); //Процедура обработки нажатия кнопки

var A: array[1..20] of integer; //Объявление массива

X:integer;

function RecurceFind(L, R: Integer): Integer;

var

M: Integer;

begin

if R < L then

begin

Result := -1;

Exit;

end;

M := (L + R) div 2;

if A[M] = X then

begin

Result := M;

Exit;

end;

if A[M] > X then

Result := RecurceFind(L, M - 1)

else

Result := RecurceFind(M + 1, R)

end;

begin

for i :=1 to n do A[i]:=strtoint(StringGrid1.Cells[0,i-1]); //Считывание данных в массив

X:=strtoint(edit2.Text);//Ввод искомого значения

edit3.Text := 'не найдено'; //начальное значение для поля ответа

for j :=1 to n-1 do begin //вложенные циклы для сортировки пузырьковым методом

for i :=1 to n-1 do begin

if (A[i]>A[i+1]) then begin

mem:=A[i];

A[i]:=A[i+1];

A[i+1]:=mem;

end;

end;

end;

edit3.Text:=inttostr(RecurceFind(1,n));

for i :=1 to n do StringGrid1.Cells[0,i-1]:=inttostr(A[i]) //вывод дынных массива

//if RecurceFind(1,n)>0 then edit3.Text := inttostr(RecurceFind(1,n)); //Вывод ответа

end;

procedure TForm1.Button2Click(Sender: TObject);

begin

n:=strtoint(Edit1.Text);

StringGrid1.RowCount:=n;

end;

end.