отчет19 (956702)
Текст из файла
Лабораторная работа 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.
Характеристики
Тип файла документ
Документы такого типа открываются такими программами, как Microsoft Office Word на компьютерах Windows, Apple Pages на компьютерах Mac, Open Office - бесплатная альтернатива на различных платформах, в том числе Linux. Наиболее простым и современным решением будут Google документы, так как открываются онлайн без скачивания прямо в браузере на любой платформе. Существуют российские качественные аналоги, например от Яндекса.
Будьте внимательны на мобильных устройствах, так как там используются упрощённый функционал даже в официальном приложении от Microsoft, поэтому для просмотра скачивайте PDF-версию. А если нужно редактировать файл, то используйте оригинальный файл.
Файлы такого типа обычно разбиты на страницы, а текст может быть форматированным (жирный, курсив, выбор шрифта, таблицы и т.п.), а также в него можно добавлять изображения. Формат идеально подходит для рефератов, докладов и РПЗ курсовых проектов, которые необходимо распечатать. Кстати перед печатью также сохраняйте файл в PDF, так как принтер может начудить со шрифтами.