Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатика
ИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханика
ОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторика
СоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансы
ХимияЧерчениеЭкологияЭкономикаЭлектроника

Курсовая работа. Российский университет дружбы народов

Читайте также:
  1. IV. РАБОТА ПРАКТИКАНТА
  2. А работающие пенсионеры? Где тут справедливость: ограничить в выплатах тех, кто работает и зарабатывает больше остальных?
  3. Амплитудно-временные характеристики электрокардиограммы здорового человека Анализ электрокардиограммы здорового человека Работа 5.8 – стр.188
  4. Анализ обработанных материалов
  5. БОЕВАЯ РАБОТА В УСЛОВИЯХ ПРИМЕНЕНИЯ ПРОТИВНИКОМ ПРОТИВОРАДИОЛОКАЦИОННЫХ РАКЕТ
  6. Боевая работа на РЛС в условиях активных помех
  7. Боевая работа на РЛС в условиях пассивных помех

РОССИЙСКИЙ УНИВЕРСИТЕТ ДРУЖБЫ НАРОДОВ

ИНЖЕНЕРНЫЙ ФАКУЛЬТЕТ

КАФЕДРА КИБЕРНЕТИКИ И МЕХАТРОНИКИ

 

Курсовая работа

по дисциплине

“Программирование и основы алгоритмизации”

Вариант № 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 страница

mybiblioteka.su - 2015-2024 год. (0.07 сек.)