Объектно-ориентированное программирование. Модуль Graph, страница 6

Задание

Меню:

1)  Графическая заставка, где должны присутствовать ФИО и номер группы студента. Работать заставка должна на любых мониторах без привязки к конкретным координатам.

2)  Массив: найти минимальный элемент и поменять его с первым.

3)  Матрица: заменить элементы столбцов, где положительных элементов больше чем отрицательных, на 1

4)  Связанный список: поиск элементов в связанном списке по полю «табельный номер».

5)  Выход.


Блок схемы:


index.pas

program MyKurs;

uses

Crt,JobUnit,Grafika;

begin

q:=nil;

repeat

clrscr;

textmode(3);

Write('В этой программе вы можете выполнять ');

WriteLn('следующие действия:');

WriteLn('1: Работа с массивом');

WriteLn('2: Работа с матрицей');

WriteLn('3: Работа со связанным списком');

WriteLn('4: Просмотр заставки');

WriteLn('5: Выход');

WriteLn;

Write('Ваш выбор: ');

ReadLn(answer);

case answer of

1:            begin

st1:='Вывод исходного массива:';

st2:='Вывод сформированного массива ';

clrscr;

write('Введите количество элементов массива: ');

readln(minit);

q:=new(ptrmas,Init(minit))

end;

2:            begin

st1:='Вывод исходной матрицы:';

st2:='Вывод сформированноy матрицы:';

clrscr;

writeln('Введите размерность матрицы:');

write('m = ');

readln(minit);

write('n = ');

readln(ninit);

q:=new(ptrmatr,Init(minit,ninit))

end;

3:            begin

st1:='Вывод исходноgo списка:';

st2:='Вывод найденных элементов списка:';

clrscr;

write('Введите количество записей для ввода: ');

readln(minit);

q:=new(ptrlist,Init(minit))

end;

4:            begin

zastavka;

minit:=0;

end;

5:            begin

exit

end;

end;

if minit<>0 then begin

clrscr;

writeln(st1);

q^.OutData;

q^.Job;

writeln(st2);

q^.OutData;

writeln;

writeln('Для продолжения работы программы нажмите любую клавишу...');

readkey;

dispose(q,Done);

q:=nil;

end;

until false;

end.

JobUnit.PAS

unit JobUnit;

interface

uses

Crt;

const

mmax=50;

nmax=50;

type

{Описание простых типов...}

massiv=array [1..mmax] of integer;

matrix=array [1..mmax,1..nmax] of integer;

bazarec=record

tabnum:word;

mesac:string[3];

vidNachisl:string[20];

summ:real;

nalogi:real;

numOtdel:word;

end;

link=^elem;

elem=record

data:bazarec;

next:link;

pred:link;

end;

{Описание типов объектов...}

ptrquan=^Quantity;

Quantity=object

m:integer;

Constructor Init(minit:integer);

Destructor Done;

procedure OutData; virtual;

procedure Job; virtual;

end;

ptrmas=^Mas;

Mas=object(quantity)

a:massiv;

Constructor Init(minit:integer);

procedure OutData; virtual;

procedure Job; virtual;

end;

ptrmatr=^Matr;

Matr=object(quantity)

a:matrix;

n:integer;

Constructor Init(minit,ninit:integer);

procedure OutData; virtual;

procedure Job; virtual;

end;

ptrlist=^list;

List=object(quantity)

first,last:link;

Constructor Init(minit:integer);

Destructor Done;

procedure OutData; virtual;

procedure Job; virtual;

end;

var

{Данные переменные нужны для меню...}

answer:integer;

st1,st2:string;

minit,ninit:integer;

{Данные переменные нужны для описания объектов...}

q:ptrquan;

implementation

{Описание соответствующих методов обработки объектов...}

Constructor Quantity.Init;

begin

m:=minit;

end;

Destructor Quantity.Done;

begin

end;

procedure Quantity.Job;

begin

end;

procedure Quantity.OutData;

begin

end;

Constructor Mas.Init; {Процедура инициализации массива}

var

i:integer;

begin

if minit<1 then begin

WriteLn('Неправильно введено количество елементов!');

readkey;

exit

end;

m:=minit;

For i:=1 to m do begin

textattr:=$07; Write(i,': ');

textattr:=$0F; ReadLn(a[i])

end;

textattr:=07;

end;

procedure Mas.Job; {Процедура обработки массива}

var

i,min,minpoz:integer;

begin

if m<1 then exit;

min:=a[1];

minpoz:=1;

For i:=2 to m do

if min>a[i] then begin

min:=a[i];

minpoz:=i

end;

a[minpoz]:=a[1];

a[1]:=min

end;

procedure Mas.OutData; {Процедура вывода массива на экран}

const

colls=4;

var