
- •Пояснительная записка к курсовой работе по программированию на тему: Обработка массивов
- •Реферат
- •Содержание
- •Введение
- •Постановка задачи
- •Основные понятия
- •Методы исследования
- •Разработка алгоритма
- •Составление программы. Разработка пользовательского интерфейса
- •Инструкция оператору
- •Приложение а. Схема алгоритма
- •Приложение б. ЛистинГ программы
Инструкция оператору
При запуске программы открывается окно показанное на рис 5.1.
Рисунок 5.1 – Окно программы
Чтобы начать работу программы ввести значение размерности и нажать кнопку «Заполнить матрицу». Если не ввести размерность, то программа выдаст сообщение (рис 5.2). При повторном нажатии данной кнопки поля «Последовательность», «Наибольший элемент», «Сортировка» очищаются от старых значений.
Рисунок 5.2 – Сообщение
Также предусмотрено изменение матрицы. Для этого необходимо кликнуть по ячейке, вписать свое значение и нажать появившуюся кнопку «Сохр. изменения». Если ее не нажать, то программа будет работать со старыми значениями. При повторном нажатии данной кнопки поля «Последовательность», «Наибольший элемент», «Сортировка» очищаются от старых значений.
Рисунок 5.3 – Изменение матрицы
Чтобы получить последовательность необходимо нажить кнопку «Результат», отсортировать ее кнопку «Сортировка». Результат выполнения операций показан на рис 5.4.
Рисунок 5.4 – Операции над последовательностью
Следует отметить, что из полей вывода нельзя удалить информацию. Это предотвращает случайную потерю данных. Если последовательность заходит за границы поля, то можно кликнуть по полю и переместить курсор вправо.
В программе имеется кнопка «Задание» предназначенная для просмотра текста задания. И кнопка «Очистить все» (очищает поля ввода и вывода).
ВЫВОДЫ
В ходе выполнения курсовой работы убедился в возможностях программирования в среде Lazarus. Язык Object Pascal удобен как для начинающих, так и опытных программистов.
Для упрощения алгоритма на стадии кодирования использовалось разбиение на процедуры. Так же можно было упростить код использовать процедуры сортировки, а потом передавать значения границ массива и сам массив. Но так как полученный объем кода не велик, то я решил не составлять процедуры.
Данное приложение работает под управлением ОС Windows.
ССЫЛки
Семенова Н.С., Лекции Северодонецкого Технологического Института, «Программирование», 2005.
http://lazarus.su/
http://ru.wikipedia.org/wiki/Lazarus
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.