Технологический Институт
(г. Северодонецк)
ПОЯСНИТЕЛЬНАЯ ЗАПИСКА
Руководитель Семенова Н.С.(______)
Северодонецк 2012
2
РЕФЕРАТ
СОДЕРЖАНИЕ
ВВЕДЕНИЕ..............................................................................................................................................................3
1 ПОСТАНОВКА ЗАДАЧИ..............................................................................................................................4
1.1 Основные понятия....................................................................................................................................5
1.2 Методы исследования..............................................................................................................................6
2 РАЗРАБОТКА АЛГОРИТМА......................................................................................................................7
3 СОСТАВЛЕНИЕ ПРОГРАММЫ. РАЗРАБОТКА ПОЛЬЗОВАТЕЛЬСКОГО ИНТЕРФЕЙСА......8
4 ИНСТРУКЦИЯ ОПЕРАТОРУ...................................................................................................................10
ВЫВОДЫ...............................................................................................................................................................13
ССЫЛКИ...............................................................................................................................................................14
ПРИЛОЖЕНИЕ А. СХЕМА АЛГОРИТМА....................................................................................................15
ПРИЛОЖЕНИЕ Б. ЛИСТИНГ ПРОГРАММЫ..............................................................................................19
4
ВВЕДЕНИЕ
Особенности работы:
1 ПОСТАНОВКА ЗАДАЧИ
2 РАЗРАБОТКА АЛГОРИТМА
Перед началом разработки алгоритма необходимо четко определить задачу: что требуется
получить в качестве результата, какие исходные данные необходимы и какие имеются в наличии,
какие существуют ограничения на эти данные. Далее требуется записать, какие действия
необходимо предпринять для получения из исходных данных требуемого результата. Графическое
представление называется схемой алгоритма или блок-схемой. После того как алгоритм написан,
на его основе разрабатывается программа. Процесс создания алгоритма — самый важный. Если
здесь допущены ошибки, то устранить их на этапе кодирования трудно.
1. Button1Click (Sender: TObject) – Процедура перезаписи матрицы после того, как были
внесены изменения.
2. Button2Click (Sender: TObject) – Вывод на экран задания.
3. Input_matrixClick (Sender: TObject) – Реализует ввод размерности матрицы, а также
заполнение ее случайными значениями.
4. ResultClick (Sender: TObject) – Процедура построения последовательности с последующим
ее выводом на экран
5. Clear_allClick (Sender: TObject) – Очистка всех полей.
6. SortingClick (Sender: TObject) – Сортировка последовательности, вывод максимального
элемента, размерностей двух частей последовательности,
Из этого списка можно выделить процедуры более важные, так как они выполняют
основные действия написанные в задании. Это ResultClick (Sender: TObject) и SortingClick (Sender:
TObject).
ResultClick (Sender: TObject). В цикле for прохода по индексам строк сначала присваивается
переменной хранящей сумму элементов строки (A_i_) ноль. Далее во вложенных условных
операторах If проверяются элементы стоящие на главной диагонали, если он удовлетворяет
условию то отыскивается либо первый отрицательный элемент, либо первый положительный
элемент и запоминается его позиция (переменная Neg) далее цикл прерывается. После во
вложенном цикле for считается сумма, которая станет элементом последовательности R.
наибольший элемент включен в левую часть. После того как посчитаны размеры они
сравниваются между собой. В зависимости какая часть больше происходит сортировка по
возрастанию (в меньшей) и по убыванию (в большей). Если части равны, то левая
упорядочивается по убыванию, а правая - по возрастанию. В данной программе использовалась
сортировка выбором. Можно было использовать другие сортировки, но я решил, что эта
сортировка более удобная.
4 ИНСТРУКЦИЯ ОПЕРАТОРУ
Чтобы начать работу программы ввести значение размерности и нажать кнопку «Заполнить
матрицу». Если не ввести размерность, то программа выдаст сообщение (рис 5.2). При повторном
нажатии данной кнопки поля «Последовательность», «Наибольший элемент», «Сортировка»
очищаются от старых значений.
Следует отметить, что из полей вывода нельзя удалить информацию. Это предотвращает
случайную потерю данных. Если последовательность заходит за границы поля, то можно кликнуть
по полю и переместить курсор вправо.
ВЫВОДЫ
ССЫЛКИ
Начало
Вывод
Конец i=1,n
посл-сти
Ai=0
Да M[i,i]>=0
Да M[i,i]<0 Нет
J=1,n
J=1,n
j=n,
Да M[i,j]<0 Neg-1, Нет
Нет Нет
Да M[i,j]>0 -1
Neg=j; Neg=j;
Break Ai=Ai+M[I,j]
Break
j=1,Neg R[i]=Ai
-1
Ai=Ai+M[I,j]
Начало А
CoA=R[1] Да Left<Right
Сортировка Left-
Поиск части по
максимального возрастанию
элемента СоА и его
позиции(cOFarray)
Нет
Сортировка Right-
Определение части по убыванию
размера (Left)
части послед-ти R
Определение
размера (Right) Да Left<Right
части послед-ти R
Сортировка Left-
части по
возрастанию
Да Left>Right
Нет
Сортировка Left- Сортировка Right-
части по убыванию части по убыванию
Нет
Сортировка Right-
части по
возрастанию Вывод MAX
элемента
А Вывод сорт-
ной посл-
сти
Конец
Начало
i=_begin,
Конец
_end
Max=i
j=i+1,n
Да R[j]<R[Max]
Max=j
Нет
Work=R[Max]
R[Max]=R[i]
R[i]=Work
Начало
i=_begin,
Конец
_end
Max=i
j=i+1,n
Да R[j]>R[Max]
Max=j
Нет
Work=R[Max]
R[Max]=R[i]
R[i]=Work
если в i-ой строке матрицы элемент, принадлежащий главной диагонали, отрицателен, то a[i]
равно сумме
unit Unit1;
{$mode objfpc}{$H+}
interface
uses
type
{ TForm1 }
TForm1 = class(TForm)
Button1: TButton;
Button2: TButton;
Edit2: TEdit;
21
Edit3: TEdit;
Label4: TLabel;
Memo1: TMemo;
Sorting: TButton;
Input_matrix: TButton;
Label5: TLabel;
Result: TButton;
Clear_all: TButton;
Edit1: TEdit;
SizeOfMatr: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
StringGrid1: TStringGrid;
private
{ private declarations }
public
{ public declarations }
end;
var
Form1: TForm1;
22
M:array[1..100,1..100] of real;
R:array[1..100] of real;
i,j,n:integer;
implementation
{$R *.lfm}
{ TForm1 }
begin
randomize;
Edit3.Clear;
Edit2.Clear;
Edit1.Clear;
else begin
n:=StrToInt(SizeOfMatr.text);
StringGrid1.ColCount:=n;
StringGrid1.RowCount:=n;
for i:=1 to n do
for j:= 1 to n do
begin
M[i,j]:=(random(21)-10)*abs(cos(i));
StringGrid1.Cells[j-1,i-1]:=FloatToStrF(M[i,j],FFfixed,8,2);
end; end;
end;
begin
for i:=1 to n do
23
for j:= 1 to n do
M[i,j]:=StrToFloat(StringGrid1.Cells[j-1,i-1]);
Edit1.Clear;
Edit2.Clear;
Edit3.Clear;
Button1.Visible:=false;
end;
begin
if Memo1.Visible=false
then begin
Memo1.Visible:=true;
Button1.Visible:=false;
Edit2.Visible:=false;
Edit3.Visible:=false;
Label4.Visible:=false;
Sorting.Visible:=false;
Input_matrix.Visible:=false;
Label5.Visible:=false;
Result.Visible:=false;
Clear_all.Visible:=false;
Edit1.Visible:=false;
SizeOfMatr.Visible:=false;
Label1.Visible:=false;
Label2.Visible:=false;
Label3.Visible:=false;
StringGrid1.Visible:=false;end
24
else begin
Memo1.Visible:=false;
Edit2.Visible:=true;
Edit3.Visible:=true;
Label4.Visible:=true;
Sorting.Visible:=true;
Input_matrix.Visible:=true;
Label5.Visible:=true;
Result.Visible:=true;
Clear_all.Visible:=true;
Edit1.Visible:=true;
SizeOfMatr.Visible:=true;
Label1.Visible:=true;
Label2.Visible:=true;
Label3.Visible:=true;
StringGrid1.Visible:=true;end;
end;
var A_i_:real;
Neg:integer;
begin
Edit3.Clear;
Edit1.Clear;
Edit2.Clear;
for i:=1 to n do
begin
A_i_:=0; //cумма
25
if M[i,i]<0
then
begin
begin
end;
A_i_:=A_i_+M[i,j];
end;
if M[i,i]>=0
then
begin
for j:=1 to n do
begin
end;
A_i_:=A_i_+M[i,j];
end;
Edit2.Text:=Edit2.Text+FloatToStrF(A_i_,FFfixed,8,2)+'; ';
R[i]:=A_i_;
end;
end;
begin
Edit1.Clear;
26
Edit2.Clear;
Edit3.Clear;
SizeOfMatr.Clear;
StringGrid1.Cells[j,i]:=' ';
end;
var cOa,work:real;
_left,_right,max,cOFarray:integer;
begin
Edit3.Clear;
Edit1.Clear;
cOa:=R[1];
for i:=2 to n do
_left:=0;
_right:=0;
inc (_left);
for i:=cOFarray+1 to n do
inc (_right);
if _left>_right
then
begin
begin
27
max:=i;
work:=R[max];
R[max]:=R[i];
R[i]:=work;
end;
begin
max:=i;
for j:=i+1 to n do
work:=R[max];
R[max]:=R[i];
R[i]:=work;
end;
end
else
begin
begin
max:=i;
work:=R[max];
R[max]:=R[i];
R[i]:=work;
end;
28
begin
max:=i;
for j:=i+1 to n do
work:=R[max];
R[max]:=R[i];
R[i]:=work;
end;
end;
if _left=_right
then
begin
begin
max:=i;
work:=R[max];
R[max]:=R[i];
R[i]:=work;
end;
begin
max:=i;
for j:=i+1 to n do
work:=R[max];
29
R[max]:=R[i];
R[i]:=work;
end;
end;
Label4.Caption:=Label4.Caption+FloatToStrF (cOa,FFfixed,8,2);
for i:=1 to n do
Edit3.Text:=Edit3.Text+FloatToStrF(R[i],FFfixed,8,2)+'; ';
end;
begin
Button1.Visible:=true;
end;
end.