Входная и выходная информация, Протокол контрольного примера - Исследование и программная реализация алгоритмов теории графов

На вход программе подается строка, каждый символ которой ходе работы программы станет элементом алфавита. Положение символа в строке определяет его положение в алфавите. Повторение символа в алфавите не допускаются. программирование delphi двоичный

Также задается целое число (hв тексте задания) - длина слова в словаре. Ограничение на длину слова - 99 символов.

Далее на вход подаются непосредственно слова. При наборе слова необходимо использовать только те символы, которые содержатся в заданном алфавите.

Выходная информация программы представляет собой список добавленных пользователем слов, упорядоченных по правилам составления стандартных словарей.

На рисунке 1 представлен внешний вид программы.

снимок экрана программы

Рисунок 1 - Снимок экрана программы

2. 2 Текстпрограммы

Unit Unit1;

Interface

Uses

Winapi. Windows, Winapi. Messages, System. SysUtils, System. Variants,

System. Classes, Vcl. Graphics, Vcl. Controls, Vcl. Forms, Vcl. Dialogs,

Vcl. StdCtrls, Vcl. ComCtrls;

Type

TForm1 = class(TForm)

ListBox1: TListBox;

Edit1: TEdit;

Button1: TButton;

GroupBox1: TGroupBox;

GroupBox2: TGroupBox;

Memo1: TMemo;

Button2: TButton;

Label1: TLabel;

Label3: TLabel;

Edit2: TEdit;

Label2: TLabel;

Procedure Button1Click(Sender: TObject);

Procedure Button2Click(Sender: TObject);

Private

Type

NumArr = array [1..64] of Integer;

TreePointer = ^tree;

Tree = record

Word: NumArr;

Left, right: TreePointer;

End;

FunctionSTree(root, r: TreePointer; Word: NumArr): TreePointer;

ProcedureInOrder(root: TreePointer);

FunctionPosInABC(C: Char; ABC: string): Integer;

Function Str2Num(Str: string; ABC: string): NumArr;

Function Num2Str(Arr: NumArr; ABC: string): string;

FunctionIsSmaller(Arr1, Arr2: NumArr): Boolean;

FunctionIsNotNil(Arr: NumArr): Boolean;

ProcedureGrowTree(root: TreePointer; FirstWord: NumArr);

FunctionReSymb(Str: string): Boolean;

Public

{ Public declarations }

End;

Var

Form1: TForm1;

Alphabet: string;

H: Integer;

Implementation

{$R *.dfm}

{Возвращает True, если в строке есть повторяющиеся символы}

Function TForm1.ReSymb(Str: string): Boolean;

Var

I, J: Integer;

Begin

Result := False;

For I := 1 to Length(Str)-1 do

For J := I+1 to Length(Str) do

IfStr[I] = Str[J] then

Begin

Result := True;

Exit;

End;

End;

Procedure TForm1.Button2Click(Sender: TObject);

Var

I: Integer;

Begin

If Button2.Tag = 0 then

Begin

Button2.Caption := 'Сохранить';

Memo1.Enabled := True;

Edit2.Enabled := True;

Edit1.Enabled := False;

ListBox1.Enabled := False;

Button1.Enabled := False;

LIstBox1.Clear;

Button2.Tag := 1;

End

Else

Begin

Alphabet := '';

For i := 1 to Length(Memo1.Lines. Text) do

If Memo1.Lines. Text[i] <> ' ' then

Alphabet := Alphabet + Memo1.Lines. Text[i];

If Alphabet = '' then

MessageBox(0, 'Алфавитпуст', 'Ошибка', 0)

Else

IfReSymb(Alphabet) then

MessageBox(0, 'Алфавитсодержитповторяющиесясимволы', 'Ошибка', 0)

Else

IfStrToInt(Edit2.Text) > 0 then

Begin

Button2.Caption := 'Редактировать';

Memo1.Enabled := False;

Edit2.Enabled := False;

Button2.Tag := 0;

Edit1.Enabled := True;

ListBox1.Enabled := True;

Button1.Enabled := True;

H := StrToInt(Edit2.Text);

Edit1.MaxLength := h;

End

Else

MessageBox(0, 'Длина слова не может быть равной 0', 'Ошибка', 0);

End;

End;

{Трансформация строки в массив позиций алфавита}

Function TForm1.Str2Num(Str: string; ABC: string): NumArr;

Var

I: Integer;

Begin

For I := 1 to h do

Result[I] := PosInABC(Str[i], ABC);

End;

{Трансформация массива позиций алфавита в строку}

Function TForm1.Num2Str(Arr: NumArr; ABC: string): string;

Var

I: Integer;

Begin

Result := '';

For I := 1 to h do

Result := Result + ABC[Arr[I]];

End;

{Возвращает True, если в Arr нет нулей}

Function TForm1.IsNotNil(Arr: NumArr): Boolean;

Var

I: Integer;

Begin

I := 1;

While (I < h) and (Arr[i] <> 0) do

Inc(I);

IfArr[i] = 0 then

Result := False

Else

Result := True;

End;

{Возвращает True, если Arr1 < Arr2}

Function TForm1.IsSmaller(Arr1, Arr2: NumArr): Boolean;

Var

I: Integer;

Begin

I := 1;

While (i < h) and (Arr1[I] = Arr2[I]) do

Inc(I);

If Arr1[I] > Arr2[I] then

Result := False

Else

Result := True;

End;

{Возврат позиции символа в алфавите. 0 еслиотсутствует}

Function TForm1.PosInABC(C: Char; ABC: string): Integer;

Var

I: Integer;

Begin

Result := 0;

I := 1;

While (i < Length(ABC)) and (C <> ABC[i]) do

Inc(i);

If C = ABC[i] then

Result :=i;

End;

{Восстановление списка из дерева}

Procedure TForm1.InOrder(root: TreePointer);

Begin

If root <> nil then

Begin

InOrder(root^.left);

ListBox1.Items. Add(Num2Str(root^.Word, Alphabet));

InOrder(root^.right);

End;

End;

{Добавлениеэлемента в дерево}

Function TForm1.STree(root, r: TreePointer; Word: NumArr): TreePointer;

Begin

If r = nil then

Begin

New(r);

R^.left := nil;

R^.right := nil;

R^.Word := Word;

IfIsSmaller(Word, root^.Word) then

Root^.left := r

Else

Root^.right := r;

STree := r;

End

Else

Begin

IfIsSmaller(Word, r^.Word) then

STree :=STree(r, r^.left, Word)

Else

STree :=STree(r, r^.right, Word);

End;

End;

{Выращиваниедерева}

Procedure TForm1.GrowTree(root: TreePointer; FirstWord: NumArr);

Var

Dummy: TreePointer;

I: Integer;

Word: NumArr;

Begin

Root^.left := nil;

Root^.right := nil;

Root^.Word := FirstWord;

For i := 0 to ListBox1.Items. Count-1 do

Begin

Word := Str2Num(ListBox1.Items. Strings[i], Alphabet);

Dummy := STree(root, root, Word);

End;

End;

Procedure TForm1.Button1Click(Sender: TObject);

Var

I: Integer;

FirstW: NumArr;

Rt: TreePointer;

Begin

If Length(Edit1.Text) = h then

Begin

FirstW := Str2Num(Edit1.Text, Alphabet);

IfIsNotNil(FirstW) then

Begin

New(rt);

GrowTree(rt, FirstW);

{Составление списка по дереву}

ListBox1.Clear;

InOrder(rt);

Edit1.Text := '';

End

Else

MessageBox(0, 'Некоторые символы не совпадают с алфавитом', 'Ошибка', 0);

End

Else

MessageBox(0, PChar('Длина слова должна быть равна '+Edit2.Text),

'Ошибка', 0);

End;

End.

Протокол контрольного примера

Алфавит: "abcdefghijklmnopqrstuvwxyz";

Длина слов в словаре: 4;

В таблице 1 представлен процесс добавления слов.

Таблица 1 - Добавление слов в словарь

Добавляемое слово

Boom

Head

Here

Boot

Anna

Body

Состояние словаря

Boom

Boom

Head

Boom

Head

Here

Boom

Boot

Head

Here

Anna

Boom

Boot

Head

Here

Anna

Body

Boom

Boot

Head

Here

На рисунке 2 представлен снимок экрана при прохождении контрольного примера.

контрольный пример

Рисунок 2 - Контрольный пример

Похожие статьи




Входная и выходная информация, Протокол контрольного примера - Исследование и программная реализация алгоритмов теории графов

Предыдущая | Следующая