Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Архив2 / курсовая docx100 / zapiska_k_kursovoy.docx
Скачиваний:
121
Добавлен:
07.08.2013
Размер:
581.76 Кб
Скачать
  1. Инструкция оператору

При запуске программы открывается окно показанное на рис 5.1.

Рисунок 5.1 – Окно программы

Чтобы начать работу программы ввести значение размерности и нажать кнопку «Заполнить матрицу». Если не ввести размерность, то программа выдаст сообщение (рис 5.2). При повторном нажатии данной кнопки поля «Последовательность», «Наибольший элемент», «Сортировка» очищаются от старых значений.

Рисунок 5.2 – Сообщение

Также предусмотрено изменение матрицы. Для этого необходимо кликнуть по ячейке, вписать свое значение и нажать появившуюся кнопку «Сохр. изменения». Если ее не нажать, то программа будет работать со старыми значениями. При повторном нажатии данной кнопки поля «Последовательность», «Наибольший элемент», «Сортировка» очищаются от старых значений.

Рисунок 5.3 – Изменение матрицы

Чтобы получить последовательность необходимо нажить кнопку «Результат», отсортировать ее кнопку «Сортировка». Результат выполнения операций показан на рис 5.4.

Рисунок 5.4 – Операции над последовательностью

Следует отметить, что из полей вывода нельзя удалить информацию. Это предотвращает случайную потерю данных. Если последовательность заходит за границы поля, то можно кликнуть по полю и переместить курсор вправо.

В программе имеется кнопка «Задание» предназначенная для просмотра текста задания. И кнопка «Очистить все» (очищает поля ввода и вывода).

ВЫВОДЫ

В ходе выполнения курсовой работы убедился в возможностях программирования в среде Lazarus. Язык Object Pascal удобен как для начинающих, так и опытных программистов.

Для упрощения алгоритма на стадии кодирования использовалось разбиение на процедуры. Так же можно было упростить код использовать процедуры сортировки, а потом передавать значения границ массива и сам массив. Но так как полученный объем кода не велик, то я решил не составлять процедуры.

Данное приложение работает под управлением ОС Windows.

ССЫЛки

    1. Семенова Н.С., Лекции Северодонецкого Технологического Института, «Программирование», 2005.

    2. http://lazarus.su/

    3. http://ru.wikipedia.org/wiki/Lazarus

    4. http://wiki.freepascal.org/Lazarus_Tutorial/ru

Приложение а. Схема алгоритма

Рисунок А.1 Схема алгоритма процедуры ResultClick (Sender: TObject)

Рисунок А.2 Схема алгоритма процедуры SortingClick (Sender: TObject)

Рисунок А.3 – Схема сортировки выбора по возрастанию

Рисунок А.4 - Схема сортировки выбором по убыванию

Приложение б. ЛистинГ программы

{Дана вещественная квадратная матрица порядка n. Построить последовательность a[1],...,a[n] по правилу:

если в i-ой строке матрицы элемент, принадлежащий главной диагонали, отрицателен, то a[i] равно сумме

элементов i-ой строки,предшествующих первому отрицательному элементу;в противном случае a[i] равно сумме

последних элементов i-ой строки начиная с первого по порядку положительного элемента. в полученной

последовательности a[1],...,a[n] найти наибольший элемент (последний по порядку, если их несколько),

который разделит последовательность на две части. В большей части последовательности упорядочить

элементы по убыванию, в меньшей- по возрастанию;если обе части будут равними, то левую упорядочить

по убыванию, а правую - по возрастанию}

unit Unit1;

{$mode objfpc}{$H+}

interface

uses

Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,

Grids, ExtCtrls, CheckLst, ActnList, Buttons;

type

{ TForm1 }

TForm1 = class(TForm)

Button1: TButton;

Button2: TButton;

Edit2: TEdit;

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;

procedure Button1Click(Sender: TObject);

procedure Button2Click(Sender: TObject);

procedure Input_matrixClick(Sender: TObject);

procedure ResultClick(Sender: TObject);

procedure Clear_allClick(Sender: TObject);

procedure SortingClick(Sender: TObject);

procedure StringGrid1Click(Sender: TObject);

private

{ private declarations }

public

{ public declarations }

end;

var

Form1: TForm1;

M:array[1..100,1..100] of real;

R:array[1..100] of real;

i,j,n:integer;

implementation

{$R *.lfm}

{ TForm1 }

procedure TForm1.Input_matrixClick(Sender: TObject);

begin

randomize;

Edit3.Clear;

Edit2.Clear;

Edit1.Clear;

Label4.Caption:='Наибольший элемент ';

if (SizeOfMatr.text='') then ShowMessage ('Введите размерность матрицы')

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;

procedure TForm1.Button1Click(Sender: TObject);

begin

for i:=1 to n do

for j:= 1 to n do

M[i,j]:=StrToFloat(StringGrid1.Cells[j-1,i-1]);

Label4.Caption:='Наибольший элемент ';

Edit1.Clear;

Edit2.Clear;

Edit3.Clear;

Button1.Visible:=false;

end;

procedure TForm1.Button2Click(Sender: TObject);

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

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;

procedure TForm1.ResultClick(Sender: TObject);

var A_i_:real;

Neg:integer;

begin

Edit3.Clear;

Edit1.Clear;

Label4.Caption:='Наибольший элемент ';

Edit2.Clear;

for i:=1 to n do

begin

A_i_:=0; //cумма

if M[i,i]<0

then

begin

for j:=1 to n do //цикл поиска первого отрицательного элемента

begin

if M[i,j]<0 then begin Neg:=j; break;end;

end;

for j:=1 to Neg-1 do

A_i_:=A_i_+M[i,j];

end;

if M[i,i]>=0

then

begin

for j:=1 to n do

begin

if M[i,j]>0 then begin Neg:=j; break;end;

end;

for j:=n downto Neg do

A_i_:=A_i_+M[i,j];

end;

Edit2.Text:=Edit2.Text+FloatToStrF(A_i_,FFfixed,8,2)+'; ';

R[i]:=A_i_;

end;

end;

procedure TForm1.Clear_allClick(Sender: TObject);

begin

Label4.Caption:='Наибольший элемент ';

Edit1.Clear;

Edit2.Clear;

Edit3.Clear;

SizeOfMatr.Clear;

for i:=0 to n-1 do

for j:=0 to n-1 do

StringGrid1.Cells[j,i]:=' ';

end;

procedure TForm1.SortingClick(Sender: TObject);

var cOa,work:real;

_left,_right,max,cOFarray:integer;

begin

Edit3.Clear;

Edit1.Clear;

Label4.Caption:='Наибольший элемент ';

cOa:=R[1];

for i:=2 to n do

if cOa<R[i] then begin cOa:=R[i]; cOFarray:=i;end;

_left:=0;

_right:=0;

for i:=1 to cOFarray do //в левую часть включаем наибольший элемент

inc (_left);

for i:=cOFarray+1 to n do

inc (_right);

if _left>_right

then

begin

for i:=1 to cOFarray-1 do

begin

max:=i;

for j:=i+1 to cOFarray do

if R[j]>R[max] then max:=j;

work:=R[max];

R[max]:=R[i];

R[i]:=work;

end;

for i:=cOFarray+1 to n-1 do

begin

max:=i;

for j:=i+1 to n do

if R[j]<R[max] then max:=j;

work:=R[max];

R[max]:=R[i];

R[i]:=work;

end;

end

else

begin

for i:=1 to cOFarray-1 do

begin

max:=i;

for j:=i+1 to cOFarray do

if R[j]<R[max] then max:=j;

work:=R[max];

R[max]:=R[i];

R[i]:=work;

end;

for i:=cOFarray+1 to n-1 do

begin

max:=i;

for j:=i+1 to n do

if R[j]>R[max] then max:=j;

work:=R[max];

R[max]:=R[i];

R[i]:=work;

end;

end;

if _left=_right

then

begin

for i:=1 to cOFarray-1 do

begin

max:=i;

for j:=i+1 to cOFarray do

if R[j]>R[max] then max:=j;

work:=R[max];

R[max]:=R[i];

R[i]:=work;

end;

for i:=cOFarray+1 to n-1 do

begin

max:=i;

for j:=i+1 to n do

if R[j]<R[max] then max:=j;

work:=R[max];

R[max]:=R[i];

R[i]:=work;

end;

end;

Label4.Caption:=Label4.Caption+FloatToStrF (cOa,FFfixed,8,2);

Edit1.Text:='Левая часть:'+FloatToStr (_left)+'; Правая часть:'+FloatToStr (_right);

for i:=1 to n do

Edit3.Text:=Edit3.Text+FloatToStrF(R[i],FFfixed,8,2)+'; ';

end;

procedure TForm1.StringGrid1Click(Sender: TObject);

begin

Button1.Visible:=true;

end;

end.

Соседние файлы в папке курсовая docx100