Читайте также:
|
|
РОССИЙСКИЙ УНИВЕРСИТЕТ ДРУЖБЫ НАРОДОВ
ИНЖЕНЕРНЫЙ ФАКУЛЬТЕТ
КАФЕДРА КИБЕРНЕТИКИ И МЕХАТРОНИКИ
Курсовая работа
по дисциплине
“Программирование и основы алгоритмизации”
Вариант № 15
Студент __________________Избасаров А.К
(подпись)
Группа: ИУБ-203
Страна: Казахстан
Оценка ______________
Преподаватель __________________ Дивеев А.И.
(подпись)
Москва
2011 г.
ЗАДАНИЕ
Курсовая работа состоит из приложения, созданного в среде Borland Developer Studio 2006, и пояснительной записки.
Найти в матрице случайных целых чисел размерностью наибольшую по количеству чисел подматрицу, сумма чисел в которой равна числу из множества .
//Главная форма
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, Menus, Unit2, Grids, Unit3, ComCtrls, StdCtrls, ComObj,
Word2000, Unit4;
type
TForm1 = class(TForm)
MainMenu1: TMainMenu;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
N1: TMenuItem;
N2: TMenuItem;
N3: TMenuItem;
N4: TMenuItem;
N5: TMenuItem;
N6: TMenuItem;
N7: TMenuItem;
N8: TMenuItem;
N9: TMenuItem;
StringGrid1: TStringGrid;
StringGrid2: TStringGrid;
ProgressBar1: TProgressBar;
Label1: TLabel;
word1: TMenuItem;
StringGrid3: TStringGrid;
Edit1: TEdit;
N11: TMenuItem;
N12: TMenuItem;
Button1: TButton;
procedure N6Click(Sender: TObject);
procedure N7Click(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure N3Click(Sender: TObject);
procedure word1Click(Sender: TObject);
procedure N4Click(Sender: TObject);
procedure N9Click(Sender: TObject);
procedure N12Click(Sender: TObject);
procedure N11Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
Thread:Thread1;
{ Public declarations }
end;
var
Form1: TForm1;
n,m,Amax,Amin,step: integer;
a: array of array of integer;
f: TextFile;
rng,app: variant;
implementation
uses Unit5, Unit6;
{$R *.dfm}
procedure TForm1.N6Click(Sender: TObject);
begin
Form2:=TForm2.Create(self);
Form2.ShowModal;
end;
procedure TForm1.N7Click(Sender: TObject);
var
i,j: integer;
r: extended;
begin
try
for i:=0 to n-1 do
for j:=0 to m-1 do
begin
a[i,j]:=StrToInt(StringGrid1.Cells[j,i])
end;
except
Application.MessageBox('Ошибка ввода данных','Внимание',MB_OK);
exit;
end;
for i:=0 to n-1 do
for j:=0 to m-1 do
begin
StringGrid2.Cells[j,i]:='';
end;
r:=exp(n*ln(2))*exp(m*ln(2));
if r>1e7 then
ProgressBar1.Max:=10000000
else
ProgressBar1.Max:=trunc(r);
ProgressBar1.Step:=ProgressBar1.Max div 20;
ProgressBar1.Position:=0;
Thread:=Thread1.Create(True);
Thread.Priority:=tpLower;
Thread.FreeOnTerminate:=true;
Thread.Resume;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
r:integer;
k:integer;
ser1,ser0,ser:integer;
begin
try
r:=strtoint(Edit1.Text);
except
Showmessage('только числа ');
exit;
end;
Stringgrid3.RowCount:=r;
ser0:=1;
ser1:=2;
Stringgrid3.Cells[0,0]:=IntToStr(ser0);
Stringgrid3.Cells[0,1]:=IntToStr(ser1);
for k:= 0 to r - 1 do
begin;
ser:=2*(ser0)+ser1;
ser0:=ser1;
ser1:=ser;
Stringgrid3.Cells[0,k+2]:=IntToStr(ser);
end;
end;
procedure TForm1.N11Click(Sender: TObject);
begin
form6.Visible:=true;
end;
procedure TForm1.N12Click(Sender: TObject);
begin
form5.Visible:=true;
form1.Visible:=false;
end;
procedure TForm1.N2Click(Sender: TObject);
var
i,j: integer;
begin
if OpenDialog1.Execute then
if ExtractFileExt(OpenDialog1.FileName)='.txt' then
AssignFile(f,OpenDialog1.FileName)
else
exit
else
exit;
reset(f);
ReadLn(f,n);
ReadLn(f,m);
SetLength(a,n,m);
for i:=0 to N-1 do
begin
for j:=0 to M-1 do
read(f,a[i,j]);
end;
CloseFile(f);
StringGrid1.ColCount:=m;
StringGrid1.RowCount:=n;
Randomize;
for i:=0 to N-1 do
for j:=0 to M-1 do
begin
StringGrid1.Cells[j,i]:=IntToStr(a[i,j]);
end;
N3.Enabled:=true;
N7.Enabled:=true;
end;
procedure TForm1.N3Click(Sender: TObject);
var
i,j: integer;
begin
if SaveDialog1.Execute then
AssignFile(f,SaveDialog1.FileName)
else
exit;
Rewrite(f);
WriteLn(f,n);
WriteLn(f,m);
for i:=0 to n-1 do
begin
for j:=0 to m-1 do
Write(f,a[i,j],' ');
WriteLn(f);
end;
CloseFile(f);
end;
procedure TForm1.Word1Click(Sender: TObject);
var
i,j: integer;
s: string;
begin
app:=CreateOleObject('Word.Application');
app.Documents.Add;
app.Documents.Item(1).Activate;
rng:=App.Selection.Range;
rng.InsertAfter('Результат');
rng.collapse(wdcollapseend);
for i:=0 to StringGrid2.RowCount-1 do
begin
s:='';
for j:=0 to StringGrid2.ColCount-1 do
s:=s+StringGrid2.Cells[j,i]+'_';
delete(s,length(s),1);
rng.InsertAfter(s);
rng.InsertParagraphAfter;
end;
rng.ConvertToTable('_');
App.Visible:=true;
end;
procedure TForm1.N4Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.N9Click(Sender: TObject);
begin
Form4:=TForm4.Create(self);
Form4.ShowModal;
end;
end.
//Генерация
unit Unit2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm2 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Edit3: TEdit;
Edit4: TEdit;
Label1: TLabel;
Label2: TLabel;
Label3: TLabel;
Label4: TLabel;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form2: TForm2;
implementation
Uses Unit1;
{$R *.dfm}
procedure TForm2.Button1Click(Sender: TObject);
var
i,j: integer;
begin
try
Unit1.n:=StrToInt(Edit1.Text);
Unit1.m:=StrToInt(Edit2.Text);
Unit1.Amin:=StrToInt(Edit3.Text);
Unit1.Amax:=StrToInt(Edit4.Text);
except
Application.MessageBox('Ошибка ввода данных','Внимание',MB_OK);
exit;
end;
if (Unit1.n<1)or(Unit1.m<1)or(Unit1.Amax<Unit1.Amin) then
begin
Application.MessageBox('Ошибка ввода данных','Внимание',MB_OK);
exit;
end;
Form1.StringGrid1.ColCount:=Unit1.m;
Form1.StringGrid1.RowCount:=Unit1.n;
randomize;
SetLength(Unit1.a,Unit1.n,Unit1.m);
for i:=0 to Unit1.n-1 do
for j:=0 to Unit1.m-1 do
begin
Unit1.a[i,j]:=random(Amax-Amin+1)+Amin;
Form1.StringGrid1.Cells[j,i]:=IntToStr(Unit1.a[i,j]);
end;
Form1.N3.Enabled:=true;
Form1.N7.Enabled:=true;
Close;//форма
end;
end.
//Поток
unit Unit3;
interface
Uses
Classes;
Type
Thread1 = class(TThread)
protected
procedure Execute; override;
end;
Var
B: array of array of integer;
Xopt,Yopt: array of integer;
sum: integer;
implementation
Uses Unit1,SysUtils;
Procedure LexP(var x:array of integer; var flag:boolean);
var
i,j:integer;
Begin
i:=high(x);
while (i>=0)and(x[i]<>0) do i:=i-1;
if i>=0 then
begin
flag:=false;
x[i]:=1;
for j:= i+1 to high(x) do
x[j]:=0;
end
else flag:=true;
end;
function Check(x: integer):boolean;
var
a,a0,a1: real;
begin
a0:=1;
a1:=2;
a:=0;
while a<x do
begin
a:=2*(a0)+a1;
a0:=a1;
a1:=a;
end;
if x=a then
result:=true
else
result:=false;
end;
procedure Thread1.Execute;
var
X,Y: array of integer;
i,j,bn,bm,tbn,tbm,s,Qstep: integer;
flag1,flag2: boolean;
begin
SetLength(X,n);
SetLength(Xopt,n);
SetLength(Y,m);
SetLength(Yopt,m);
for i:=0 to n-1 do
X[i]:=0;
sum:=0;
bn:=0;
bm:=0;
Qstep:=0;
repeat
LexP(X,flag1);
for j:=0 to m-1 do
Y[j]:=0;
repeat
LexP(Y,flag2);
s:=0;
tbn:=0;
tbm:=0;
for i:=0 to n-1 do
if x[i]<>0 then
begin
for j:=0 to m-1 do
if y[j]<>0 then
begin
inc(tbm);
s:=s+a[i,j];
end;
inc(tbn);
end;
tbm:=trunc(tbm/tbn);
if check(s) and (tbn+tbm>bn+bm) then
begin
for i:=0 to n-1 do
Xopt[i]:=X[i];
for j:=0 to m-1 do
Yopt[j]:=Y[j];
sum:=s;
bn:=tbn;
bm:=tbm;
end;
inc(Qstep);
if Qstep>=Form1.ProgressBar1.Max div 20 then
begin
Qstep:=0;
Form1.ProgressBar1.StepIt;
end;
until flag2;
until flag1;
if bn=0 then
begin
Form1.Label1.Caption:='Не найдено ни одной подматрицы';
exit;
end;
SetLength(B,bn,bm);
Form1.StringGrid2.ColCount:=bm;
Form1.StringGrid2.RowCount:=bn;
tbn:=0;
for i:=0 to n-1 do
if Xopt[i]<>0 then
begin
tbm:=0;
for j:=0 to m-1 do
if Yopt[j]<>0 then
begin
B[tbn,tbm]:=A[i,j];
inc(tbm);
end;
inc(tbn);
end;
for i:=0 to bn-1 do
for j:=0 to bm-1 do
Form1.StringGrid2.Cells[j,i]:=IntToStr(B[i,j]);
Form1.Label1.Caption:='Подматрица размерностью ' + IntToStr(bn) + ' x ' +
IntToStr(bm) + #13 +'Сумма элементов: '+ IntToStr(sum);
Form1.word1.Enabled:=true;
end;
end.
//О программе
unit Unit4;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm4 = class(TForm)
Label1: TLabel;
procedure FormCreate(Sender: TObject);
procedure Label1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form4: TForm4;
implementation
{$R *.dfm}
procedure TForm4.FormCreate(Sender: TObject);
begin
Label1.Caption:='Вариант 15'+#13+'15. Найти в матрице случайных целых чисел размерностью MxN наибольшую по количеству чисел подматрицу, сумма чисел в которой равна числу из множества a[i]=2a[i-1]+a[i-2]: a[0]=1,a[1]=2;a=0,1,2...';
end;
procedure TForm4.Label1Click(Sender: TObject);
begin
close;
end;
end.
//заставка
unit Unit5;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls;
type
TForm5 = class(TForm)
Timer1: TTimer;
Image1: TImage;
procedure FormCreate(Sender: TObject);
procedure Image1Click(Sender: TObject);
procedure Timer1Timer(Sender: TObject);
procedure FormClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form5: TForm5;
RUDN: TBitMap; // для картинки
FIO,Gruppa,Variant,P1,P2,P3,P4,P5,P6:string;
fon:TBitMap;
Dom,Dom1:TRect;
x0,y0,dx,dy,kx,ky:integer;
ris:Tbitmap;
rect:trect;
implementation
uses unit1;
{$R *.dfm}
procedure TForm5.FormClick(Sender: TObject);
begin
form1.Visible:=true;
end;
procedure TForm5.FormCreate(Sender: TObject);
begin
FIO:='Избасаров Алтынбек';
Gruppa:='ИУБ-203';
Variant:='15 вариант';
P1:='Константинов С.В.';
P2:='Инженерный факультет';
P3:='Кафедра кибернетики и мехатроники';
P4:='Технологии интерактивных систем';
P5:='Москва';
P6:='2010 г.';
// задаем начальные координаты картинке
Image1.Top:=0;
Image1.Left:=0;
// задаем параметры картинке(ширина и высота)
Image1.Width:=Clientwidth;
Image1.Height:=Clientheight;
image1.canvas.pen.color:=claqua;
Image1.Canvas.Brush.Color:=claqua;
Image1.Canvas.Rectangle(0,0,Clientwidth,ClientHeight div 3);
image1.canvas.pen.color:=claqua;
Image1.Canvas.Brush.Color:=clyellow;
Image1.Canvas.Rectangle(0,ClientHeight div 3,Clientwidth,2*ClientHeight div 3);
Image1.Canvas.Brush.Color:=clAqua;
Image1.Canvas.Rectangle(0,2*ClientHeight div 3,Clientwidth,ClientHeight);
//**********************************************************\\
// эмблема РУДН
rudn:=tbitmap.create; //создание
rudn.LoadFromFile('RUDN.bmp'); //загрузка
Image1.Canvas.Draw(5,5,rudn); //вставка
//ФИО студента
Image1.Canvas.Font.Size:=12; // размер шрифта
Image1.Canvas.Brush.Style:=bsClear; //область не закрашивается
Image1.Canvas.Font.Color:=ClBLUE; //серый текс
Image1.Canvas.TextOut(500,80,FIO); //пишем ФИО по центру
//Номер группы и номер варианта
Image1.Canvas.Brush.Style:=bsClear; //область не закрашивается
Image1.Canvas.Font.Color:=ClBlack;
Image1.Canvas.TextOut((Clientwidth)- length(Variant)*Font.size*2,Font.size,Gruppa);
Image1.Canvas.TextOut((Clientwidth)- length(Variant)*Font.size*2,Font.size+30,Variant);
//фамилия и инициалы преподавателя
Image1.Canvas.Font.Size:=10; // размер шрифта
Image1.Canvas.Brush.Style:=bsClear;
Image1.Canvas.Font.Color:=ClBlack;
Image1.Canvas.TextOut((Clientwidth)- length(p1)*Font.size,ClientHeight-Font.size*2,p1);
//наименование факультета, кафедры и дисциплины
Image1.Canvas.Font.Size:=15;
Image1.Canvas.Brush.Style:=bsClear;
Image1.Canvas.Font.Color:=ClBlack;
Image1.Canvas.TextOut(length(FIO)*Font.Size,(ClientHeight div 2)+Font.size*9,p2);
Image1.Canvas.TextOut(length(FIO)*Font.Size,(ClientHeight div 2)+Font.size*12,p3);
Image1.Canvas.TextOut(length(FIO)*Font.Size,(ClientHeight div 2)+Font.size*15,p4);
//год и место создания
Image1.Canvas.Font.Size:=10;
Image1.Canvas.Brush.Style:=bsClear;
Image1.Canvas.Font.Color:=ClBlack;
Image1.Canvas.TextOut(length(p6)+5,ClientHeight-Font.size*6,p5);
Image1.Canvas.TextOut(length(p6)+5,ClientHeight-Font.size*4,p6);
//для рисунка (создаем прямоугольник)
Ris:=TBitmap.Create;
Ris.Width:=135;
Ris.height:=105;
//выделяем мнимую область рисунка
rect.left:=0;
rect.Top:=0;
rect.Right:=ris.Width;
rect.Bottom:=ris.Height;
//закрашиваем мнимую область
ris.Canvas.Brush.Color:=clyellow;
ris.Canvas.FillRect(rect);
// делаем ее невидимой
ris.Transparent:=true; //прозрачный фон
with ris.Canvas do // рисунок из лабы
begin
pen.Color:=clFuchsia; //ярко-фиолетовый цвет карандаша
pen.Width:=3; // толщина карандаша
RECTANGLE(20,30,60,80);
end;
//выделяем прямоугольник(область рисунка)
fon:=TBitmap.Create;
fon.Width:=Ris.Width;
fon.Height:=Ris.Height;
//начальные координаты
Dom.Left:=0;
Dom.Top:=0;
Dom.Right:=Ris.Width;
Dom.Bottom:=Ris.Height;
// на сколько сдвиг
x0:=5;
y0:=5;
//сдвиг координат
Dom1.Left:=x0;
Dom1.Top:=y0;
Dom1.Right:=x0+Ris.Width;
Dom1.Bottom:=y0+Ris.Height;
//(в какую область,из какого объекта, из какой области)
fon.Canvas.CopyRect(Dom,Image1.Canvas,Dom1); //для фона(восстановление фона)
dx:=5; dy:=5; //на сколько сдвиг происходит
kx:=1; ky:=1; // направление движения
end;
procedure TForm5.Image1Click(Sender: TObject);
begin
Form5.Visible:=false;
Form1.Visible:=true;
end;
procedure TForm5.Timer1Timer(Sender: TObject);
begin
begin
timer1.Interval:=15; //интервал повтора
Image1.Canvas.Draw(x0,y0,fon); //восстановление фона
//если рисунок дошел до границы ширины, то меняем направление
if (x0+Ris.Width>=Clientwidth)or (x0<0) then
kx:=-kx;
//если рисунок дошел до границы высоты, то меняем направление
if (y0+Ris.Height>=Clientheight)or (y0<0) then
ky:=-ky;
// перемещение картинки на 5(или -5)
x0:=x0+kx*dx;
y0:=y0+ky*dy;
//сдвиг координат
Dom1.Left:=x0;
Dom1.Top:=y0;
Dom1.Right:=x0+Ris.Width;
Dom1.Bottom:=y0+Ris.Height;
//(в какую область,из какого объекта, из какой области)
fon.Canvas.CopyRect(Dom,Image1.Canvas,Dom1);//для фона(восстановление фона)
//смещаем рисунок (по типу вставки)
Image1.Canvas.Draw(x0,y0,Ris);
end;
end;
end.
//об авторе
unit Unit6;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, StdCtrls;
type
TForm6 = class(TForm)
Label1: TLabel;
Label2: TLabel;
Image1: TImage;
procedure FormClick(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form6: TForm6;
implementation
{$R *.dfm}
procedure TForm6.FormClick(Sender: TObject);
begin
close;
end;
end.
Дата добавления: 2015-08-03; просмотров: 60 | Нарушение авторских прав
<== предыдущая страница | | | следующая страница ==> |
Послесловие | | | Русская Правда 1 страница |