отчет19 (АЯиП отчеты по лабам (кроме 24))
Описание файла
Файл "отчет19" внутри архива находится в следующих папках: АЯиП отчеты по лабам (кроме 24), Отчеты. Документ из архива "АЯиП отчеты по лабам (кроме 24)", который расположен в категории "". Всё это находится в предмете "информатика" из 2 семестр, которые можно найти в файловом архиве МГТУ им. Н.Э.Баумана. Не смотря на прямую связь этого архива с МГТУ им. Н.Э.Баумана, его также можно найти и в других разделах. Архив можно найти в разделе "лабораторные работы", в предмете "информатика" в общих файлах.
Онлайн просмотр документа "отчет19"
Текст из документа "отчет19"
Лабораторная работа 19.
Программирование с использованием метаклассов. Создание контейнеров. Использование исключений при программировании в среде Delphi.
Задача: Моделировать очередь, в качестве элементов которой могут использоваться числа и слова. Операции: добавление элемента, удаление элемента, печать элементов очереди. Создать класс - потомок, который содержит процедуру определения слова максимальной длины. Тестировать полученную модель.
В отчете представить структуру использованных классов и обосновать выбранную структуру представления данных.
Объектная декомпозиция:
1
Главное окно приложения
1 1 1
Определение слова максимальной длины
Добавление
Удаление
1 – Активизировать
Граф состояния интерфейса:
Главное
окно приложения
Определение слова максимальной длины
Удаление
5 1 - Нажатие кнопки «Добавить»
2 - Нажатие кнопки «Удалить»
3 - Нажатие кнопки «Длиннейшее слово»
4 – Завершение обработки
5 - Нажатие кнопки «Выход»
1 4 3 4
Добавление
2 4Диаграмма классов:
Текст программы:
unit Main;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics,
Controls, Forms, Dialogs, StdCtrls, Menus;
type
TMainForm = class(TForm)
AddButton: TButton;
DelButton: TButton;
SumButton: TButton;
IOEdit: TEdit;
IOLabel: TLabel;
ExitButton: TButton;
ListLabel: TLabel;
ListBox1: TListBox;
procedure SumButtonClick(Sender: TObject);
procedure AddButtonClick(Sender: TObject);
procedure IOEditKeyPress(Sender: TObject; var Key: Char);
procedure DelButtonClick(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure N2Click(Sender: TObject);
procedure ExitButtonClick(Sender: TObject);
procedure IOEditChange(Sender: TObject);
end;
var
MainForm: TMainForm;
implementation
Uses MySpisok,Spisok;
Var S:TMySpisok;
{$R *.DFM}
procedure TMainForm.FormActivate(Sender: TObject);
begin
IOLabel.Visible:=false;
IOEdit.Visible:=false;
end;
procedure TMainForm.AddButtonClick(Sender: TObject);
begin
addButton.Enabled:=false;
IOLabel.Visible:=true;
IOEdit.Visible:=true;
IOEdit.SetFocus;
end;
procedure TMainForm.IOEditChange(Sender: TObject);
begin
addButton.Enabled:=false;
end;
procedure TMainForm.IOEditKeyPress(Sender: TObject; var Key: Char);
var I, Code: Integer; v:TElement;
begin
addButton.Enabled:=true;
if Key=#13 then
begin
Key:=#0;
Val(IOEdit.Text, I, Code);
Listbox1.Items.Add(IOEdit.Text);
if Code = 0 then v:=TNumber.Create(I)else v:=TStr.Create(IOEdit.Text);
S.Add(v);
AddButton.SetFocus;
IOLabel.Visible:=false;
IOEdit.Visible:=false;
end;
end;
procedure TMainForm.DelButtonClick(Sender: TObject);
var v:TElement;
begin
IOLabel.Visible:=true;
IOEdit.Visible:=true;
v:=S.Del;
if v<>nil then
begin
ListBox1.Items.Delete(0);
if v is TNumber {или v.ClassType = TNumber} then
IOEdit.Text:=inttoStr((v as TNumber).MyNum)
else IOEdit.Text:=(v as TStr).MyString;
v.Free;
end
else IOEdit.Text:='Список пуст.';
end;
procedure TMainForm.SumButtonClick(Sender: TObject);
begin
IOLabel.Visible:=false;
IOEdit.Visible:=false;
Application.MessageBox(Pchar(S.Summa),'Самое длинное слово:',MB_OK);
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
close;
end;
procedure TMainForm.N2Click(Sender: TObject);
begin
close;
end;
procedure TMainForm.ExitButtonClick(Sender: TObject);
begin
close;
end;
initialization S:=TMySpisok.Create;
finalization S.Destroy;
end.
Unit Spisok;
Interface
Var a:integer;
Type TElement=class(TObject)
public
pre,suc:TElement;
end;
TSpisok=class(TObject)
private
first,last,cur:TElement;
public
destructor Destroy;override;
procedure Add(e:TElement);
function Del:TElement;
function IFirst:TElement;
function INext:TElement;
end;
Implementation
var n:integer;
Destructor TSpisok.Destroy;
var v:TElement;
Begin
v:=Del;
while v<>nil do
begin
v.Destroy;
v:=Del;
end;
inherited Destroy;
End;
Procedure TSpisok.Add;
Var n:integer;
Begin
if first=nil then begin
first:=e;
last:=e;
end
else begin
e.suc:=first;
first.pre:=e;
first:=e;
a:=a+1;
end;
n:=(n+1);
End;
Function TSpisok.Del;
Begin
Del:=last;
if last<>nil then
begin
last:=last.pre;
if last<>nil then last.suc:=nil;
end;
if last=nil then first:=nil;
End;
Function TSpisok.IFirst;
begin
cur:=first;
Result:=cur;
end;
Function TSpisok.INext;
begin
cur:=cur.suc;
Result:=cur;
end;
End.
unit MySpisok;
interface
Uses Spisok;
Type TNumber=class(TElement)
private FMyNum:integer;
public
constructor Create(aMyNum:integer);
property MyNum:integer read FMyNum write FMyNum;
end;
TStr=class(TElement)
private FMyString:string;
public
constructor Create(aMyString:string);
property MyString:string read FMyString Write FMyString;
end;
TMySpisok=class(TSpisok)
function Summa:string;
end;
implementation
Var n:integer; r:integer;
Constructor TNumber.Create;
begin
inherited Create;
FMyNum:=aMyNum;
end;
Constructor TStr.Create;
begin
inherited Create;
FMyString:=aMyString;
end;
Function TMySpisok.Summa;
Var c:TElement;
h:integer;
t1,t2:integer;
Begin
Result:='Вы не ввели никакой информации';
h:=0;
c:=IFirst;
if (c is TStr) then
begin
val ((c as Tstr).MyString,t1,t2);
if t2<>0 then begin
h:=length((c as Tstr).MyString);
Result:=(c as Tstr).MyString;
end;
end;
while c<>nil do
begin
if (c is TStr) then val ((c as Tstr).MyString,t1,t2);
if (c is TStr) and (t2<>0) and (length ((c as Tstr).MyString)>h)
then begin
h:=length((c as tstr).MyString);
Result:=(c as Tstr).MyString;
c:=INext;
end
else c:=INext;
end;
end;
end.