
- •Содержание
- •2.1 Постановка задачи из листа задания. . . . . . . . . . . . . . . . . . .14
- •2.3 Входные и выходные данные. . . . . . . . . . . . . . . . . . . . . . . . .15
- •3.1 Постановка задачи из листа задания. . . . . . . . . . . . . . . . . . 21
- •1.1 Постановка задачи из листа задания
- •1.2 Текстовая форма записи алгоритма
- •1.3 Входные и выходные данные
- •1.4 Блок-схема алгоритма
- •1.5 Форма программы
- •1.6 Разработка интерфейса. Объекты и их свойства
- •1.7 Код программы
- •2.4 Блок-схема алгоритма
- •2.5 Форма программы
- •2.6 Разработка интерфейса. Объекты и их свойства
- •2.7 Код программы
- •2.8 Результат тестирования
- •3.1 Постановка задачи из листа задания
- •3.2 Текстовая форма записи алгоритма
- •3.3 Входные и выходные данные
- •3.4 Блок-схема алгоритма
- •3.5 Форма программы
- •3.6 Разработка интерфейса. Объекты и их свойства
- •3.7 Код программы
- •3.8 Результат тестирования
- •Список использованных источников
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.