Автор работы: Пользователь скрыл имя, 31 Января 2011 в 15:52, курсовая работа
Процедуры и функции представляют собой важный инструмент Турбо Паскаля, позволяющий писать хорошо структурированные программы. В структурированных программах обычно легко прослеживается основной алгоритм, их нетрудно понять любому читателю, они проще в отладке и менее чувствительны к ошибкам программирования. Все эти свойства являются следствием важной особенности процедур (функций), каждая из которых представляет собой во многом самостоятельный фрагмент программы, связанный с основной программой лишь с помощью нескольких параметров.
Введение______________________________________________________________3
1.Задание на курсовую работу ________________________________________3
2.Анализ задания ___________________________________________________3
3.Разработка структур данных ________________________________________4
4.Разработка алгоритмов_____________________________________________5
5.Текст программы__________________________________________________9
6.Тестирование программы___________________________________________20
7.Руководство пользователя __________________________________________22
Заключение____________________________________________________________26
Список использованных источников_______________________________________
evmousedown:
begin
makelocal(mousewhere,r);
location:=delta.y+r.y;
scrolldraw
end;
evkeydown:
case event.keycode of
kbgrayminus:if location>delta.y then
begin
dec(location); scrolldraw
end;
kbgrayplus:if location<delta.y+pred(size.y) then
begin
inc(location);
scrolldraw
end;
end;
end;
end;
{_____________________________
constructor twin.init(bounds:trect); {инициализация прокрутки}
var
hs,vs:pscrollbar;
interior:pinterior;
begin
twindow.init(bounds,'',0);
getcliprect(bounds);
bounds.grow(-1,-1);
vs:=standardscrollbar(
interior:=new(pinterior,init(
insert(interior);
readmas;
end;
{_____________________________
procedure tinputwindow.handleevent;
begin
inherited handleevent(event);
if event.what=evcommand then
endmodal(event.command);
end;
{_____________________________
procedure tmatrix.PrintMatrix; {Вывод рабочей матрицы в окне}
var
i,j:integer; {счётчики}
sr:string;
r:trect;
begin
r.assign(0,0,80,23);
wind:=new(pwind,init(r));
desktop^.insert(wind);
with wind^ do
begin
r.assign(2,1,70,3);
insert(new(pstatictext,init(r,
for i:=1 to n do
begin
for j:=1 to m do
begin
str(mxx[i,j],sr);
r.assign(1+j*4,1+i,4+j*4,3+i);
insert(new(pstatictext,init(r,
end;
end;
r.assign(2,i+2,70,4+i); insert(new(pstatictext,init(r,
end;
end;
{_____________________________
procedure tmatrix.initmenubar; {Инициализация панели меню}
var
r:trect;
begin
getextent(r);
r.b.y:=succ(r.a.y);
menubar:=new(pmenubar,init(r,
newsubmenu('Ввод',hcnocontext,
newmenu(
newitem('Ручной','F3', kbf3,cmvvod,hcnocontext,
newitem('Автоматический','F4',
newitem('Из файла','F7',kbf7,cmisfl,
newline(
newitem('Выход','Alt+X',
newsubmenu('Результат',
newmenu(
newitem('Все подматрицы','F5', kbf5,cmvvse,hcnocontext,
newitem('По условию','F6',kbf6,cmvusl,
newline(
newitem('Записать все','F7', kbf7,cmfilv,hcnocontext,
newitem('Записать по
условию','F8',kbf8,cmfilu,
nil)))))),
newitem('О программе','F1', kbf1,cmvhel,hcnocontext,nil))) )))
end;
{_____________________________
procedure tmatrix.initstatusline; {Инициализация строки состояния}
var
r:trect;
begin
getextent(r);
r.a.y:=pred(r.b.y);
statusline:=new(pstatusline,
disablecommands(wincoml);
enablecommands(wincom2)
end;
{_____________________________
procedure tmatrix.GetRandomMatrix; {Автоматический ввод матрицы}
var
i,j:integer; {счётчики}
a,pred,s_i,s_j,s_pred:integer;
r:trect; col,row,max: PInputLine;
inputwindow,inputw:
begin
r.assign(15,5,65,16);
inputwindow:=new(pinputwindow, Init(r, 'Автоматический ввод'));
with inputwindow^ do
begin {выводим модальное окно, в котором вводим количество строк, столбцов и мак. значение}
r.Assign(37,2,45,3);
col:=New(PInputLine, Init(r,4));
Insert(col); r.Assign(2,2 , 35,3);
Insert(New(PLabel, Init(r, 'Количество строк матрицы', col)));
r.Assign(37,4,45,5);
row:=New(PInputLine, Init(r,4));
Insert(row); r.Assign(2,4,35,5);
Insert(New(PLabel, Init(r, 'Количество столбцов матрицы', row)));
r.Assign(37,6,45,7);
max:=New(PInputLine, Init(r,4)) ;
Insert(max); r.Assign(2,6,35,7);
Insert(New(PLabel, Init(r, 'Максимальное значение элемента', max)));
r.Assign(19,8,32,10);
Insert(New(PButton, Init(r, 'OK', cmOk, bfdefault)));
end;
if desktop^.execview(inputwindow)
begin {вводим элементы в матрицу}
inputwindow^.getdata(data);
val(data.col,n,s_i);
val( data.row,m,s_j) ;
val(data.max,pred,s_pred) ;
for i:=1 to N do
for j:=1 to M do
begin
a:=random(pred)+1;
Mxx[i,j]:=a;
end;
mf:=true; {флаг ввода исходной матрицы}
dispose(inputwindow,done);
enablecommands(wincoml);
tmatrix.printmatrix; {выводим рабочую матрицу}
end;
end;
{_____________________________
procedure tmatrix.InputMatrix; {Ручной ввод матрицы}
var
i,j,s_i,s_j:integer; {счётчики}
a:integer;
r:trect;
col,row,c: PInputLine;
inputwindow,inputw:
s,t:string;
begin
r.assign(15,5,65,16);
inputwindow:=new(pinputwindow, Init(r, 'Ручной ввод'));
with inputwindow^ do
begin {выводим модальное окно, в котором вводим количество строк, столбцов}
r.Assign(37,2,45,3);
col:=New(PInputLine, Init(r,4));
Insert(col);
r.Assign(2,2 , 35,3);
Insert(New(PLabel, Init(r, 'Количество строк матрицы', col)));
r.Assign(37,4,45,5);
row:=New(PInputLine, Init(r,4));
Insert(row);
r.Assign(2,4,35,5);
Insert(New(PLabel, Init(r, 'Количество столбцов матрицы', row)));
r.Assign(19,8,32,10);
Insert(New(PButton, Init(r, 'OK', cmOk, bfdefault)));
end;
if desktop^.execview(inputwindow)
begin {водим элементы матрицы в окне}
inputwindow^.getdata(data);
val(data.col,n,s_i);
val( data.row,m,s_j);
dispose(inputwindow,done);
for i:=1 to N do
for j:=1 to M do
begin
str(i,t);
str(j,s);
r.assign(15,5,65,16);
inputwindow:=new(pinputwindow, Init(r, 'Ввод элемента матрицы'));
with inputwindow^ do
begin
r.Assign(2,4,35,5);
Insert(New(PLabel, Init(r, 'Элемент матрицы'+'['+t+','+s+']', c)));
r.Assign(37,4,45,5);
Insert(New(PInputLine, Init(r,4)));
r.Assign(19,8,32,10);
Insert(New(PButton, Init(r, 'OK', cmOk, bfdefault)));
end;
if desktop^.execview(inputwindow)
begin {заносим в матрицу Mxx значения}
inputwindow^.getdata(data);
val(data.col,a,s_i);
Mxx[i,j]:=a;
dispose(inputwindow,done);
end;
end;
mf:=true; {флаг ввода исходной матрицы}
enablecommands(wincoml);
tmatrix.printmatrix; {выводим рабочую матрицу}
end;
end;
{_____________________________
procedure tmatrix.fileinput; {ввод данных из файла}
var
pf:pfiledialog;
s:pathstr;
x:char;
i,j:integer; {счётчики}
begin
new(pf,init('*.txt','Выберите нужный файл:','Имя файла',fdopenbutton,0));
if desktop^.execview(pf)=stddlg.
begin {считывание матрицы из файла}
pf^.getfilename(s);
assign(filework,s);
reset(filework); {открываем файл для чтения}
enablecommands(wincoml);
dispose(pf,done);
i:=1;
j:=1;
while not eof(filework ) do
begin
while not eoln(filework) do
begin
read(filework,mxx[i,j]); {заносим в матрицу значения}
read(filework,x);
j:=j+1;
n:=i;
m:=j-1;
end;
j:=1;
i:=i+1;
readln(filework);
end;
close(filework); {закрываем файл}
tmatrix.printmatrix; {выводим рабочую матрицу}
end;
end;
{_____________________________
procedure Sort; {сортируем элементы периметра по возрастанию}
var
i,j:integer; {счётчики}
p:integer; {вспомогательная переменная для обмена значениями}
begin
for i:=2 to l do
for j:=l downto i do
if per[j-1]>per[j] then
begin {меняем местами элементы}
p:=per[j-1];
per[j-1]:=per[j];
per[j]:=p;
end;
end;
{_____________________________
procedure GetPerimetr(n_1,m_1,n_2,m_2:
var
i:integer; {счётчик}
k:integer;
begin {обнуляем массив}
for i:=1 to 2*N+2*M do
per[i]:=0;
k:=1;
for i:=m_1 to m_2 do {выбираем элементы столбца периметра}
begin
per[k]:=Mxx[n_1,i];
per[k+1]:=Mxx[n_2,i];
inc(k,2)
end;
for i:=(n_1+1) to (n_2-1) do {выбираем элементы строк периметра}
begin
per[k]:=Mxx[i,m_1];
per[k+1]:=Mxx[i,m_2];
inc(k,2)
end;
dec(k,2);
l:=k;