- •Лабораторна робота №1 «Cтрокові змінні в середовищі програмування Delphi»
- •3 Теоретичний матеріал
- •4 Варіанти завдань для виконання
- •Хід виконання практичної роботи
- •Питання до захисту :
- •Лабораторна робота №2 «Робота з чергою та стеком»
- •3 Теоретичний матеріал
- •4 Вихідні дані роботи
- •Хід виконання практичної роботи
- •Питання до захисту :
- •Лабораторна робота №3 «Розробка програми створення зв'язаного списку»
- •3 Теоретичний матеріал
- •4 Хід виконання практичної роботи
- •Питання до захисту :
- •Лабораторна робота №4
- •3 Теоретичний матеріал
- •4 Вихідні дані роботи
- •Хід виконання практичної роботи
- •Питання до захисту :
- •Лабораторна робота №5 «Побудова рекурсивних функцій»
- •3 Теоретичний матеріал
- •4 Вихідні дані роботи
- •5 Хід виконання практичної роботи
- •Питання до захисту :
- •Лабораторна робота №6 «Бінарне дерево пошуку»
- •3 Теоретичний матеріал
- •4 Вихідні дані роботи
- •5 Хід виконання практичної роботи
- •Питання до захисту :
- •Лабораторна робота №7 «Реалізація алгоритмів обмінних сортувань»
- •3 Теоретичний матеріал
- •4 Вихідні дані роботи
- •5 Хід виконання практичної роботи
- •Питання до захисту :
4 Вихідні дані роботи
Дано рядок з цифрами та літерами, необхідно здійснити перетворення, з цього рядка в такий рядок, таким чином, що всі букви переносяться в початок, при цьому в кінець рядка всі вхідні в неї цифри зі збереженням вихідного взаємного порядку як серед цифр, так і серед решти букв рядка.
Вираз вводиться з вибираного файлу.
Також вираз вводиться з клавіатури.
Хід виконання практичної роботи
У програмі використовується стек, який реалізовано таким чином:
type
tRange = Integer;
tValue = string;
tMas = array[0..MaxMem] of tValue;
tStack = record
Mas: tMas;
Top: tRange;
end;
Опис процедур і функцій:
function CreateStack: tLink;
Призначення: Створення стека.
Параметри: -
function Null (stack: tLink): boolean;
Призначення: Повертає true, якщо стек порожній.
Параметри: stack-посилання на стек [вх.]
function Top (stack: tLink): tValue;
Призначення: Повертає значення верхнього елементу стека.
Параметри: stack-посилання на стек [вх.]
procedure Pop (var stack: tLink);
Призначення: Видаляє верхній елемент стека.
Параметри: stack-посилання на стек [вх. - Вих.]
procedure Push (var stack: tLink; Val: tValue);
Призначення: Додає елемент в стек, який станови-ться верхнім елементом.
Параметри: stack-посилання на стек [вх. - Вих.]; Val-вставляється значення [вх.]
function TopPop (var stack: tLink): tValue;
Призначення: Повертає значення верхнього елементу стека і видаляє його з стека.
Параметри: stack-посилання на стек [вх. - Вих.]
procedure DestroyStack (var stack: tLink);
Призначення: Видаляє стек.
Параметри: stack-посилання на стек [вх. - Вих.]
function Transfer (InputStr: tValue): tValue;
Призначення: функція яка обробляє рядок, ко-торая вводиться в поле введення (InputStr) і виводить в поле виводу (Result).
Параметри: Inpustr [вх.]
Текст программы:
unit stack2;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Menus, StrUtils, ExtCtrls, MMSystem;
const
MaxMem = 32767;
type
tRange = Integer;
tValue = string;
tMas = array[0..MaxMem] of tValue;
tStack = record
Mas: tMas;
Top: tRange;
end;
TForm1 = class(TForm)
opOpenFile: TOpenDialog;
memInputStr: TMemo;
Label1: TLabel;
memOutputStr: TMemo;
Label2: TLabel;
btnFileOpen: TButton;
procedure memInputStrChange(Sender: TObject);
procedure mmFileOpenClick(Sender: TObject);
private
function CreateStack:tRange;
function Null(stack: tStack):boolean;
function Top(stack: tStack):tValue;
procedure Pop(var stack: tStack);
procedure Push(var stack: tStack; Val:tValue);
function TopPop(var stack: tStack):tValue;
procedure DestroyStack(var stack: tStack);
function Transfer(InputStr: tValue): tValue;
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
function TForm1.CreateStack:tRange;
begin
CreateStack:=-1;
end;
function TForm1.Null(stack: tStack):boolean;
begin
Null:= (stack.Top=-1);
end;
function TForm1.Top(stack: tStack):tValue;
begin
if Null(stack) then
Result:='0'
else
Result:= stack.Mas[stack.Top];
end;
procedure TForm1.Pop(var stack: tStack);
begin
if not Null(stack) then
dec(stack.Top);
end;
procedure TForm1.Push(var stack: tStack; Val:tValue);
begin
with stack do
begin
inc(Top);
Mas[Top]:=Val;
end;
end;
function TForm1.TopPop(var stack: tStack):tValue;
begin
TopPop:=Top(stack);
Pop(stack);
end;
procedure TForm1.DestroyStack(var stack: tStack);
begin
if not Null(stack) then
while not Null(stack) do
Pop(stack);
end;
procedure TForm1.memInputStrChange(Sender: TObject);
begin
memOutputStr.Lines.Clear;
memOutputStr.Lines.Add(Transfer(memInputStr.Lines.Text));
end;
procedure TForm1.mmFileOpenClick(Sender: TObject);
var f: TextFile;
begin
if opOpenFile.Execute then
begin
AssignFile(f,opOpenFile.FileName);
reset(f);
if eof(f) then
ShowMessage('Файл пуст!')
else
begin
memInputStr.Lines.Clear;
memInputStr.Lines.LoadFromFile(opOpenFile.FileName);
end;
end;
end;
function TForm1.Transfer(InputStr: tValue): tValue;
var
i: tRange;
stack1, stack2: tStack;
s2: tValue;
begin
stack1.Top:=CreateStack;
stack2.Top:=CreateStack;
for i:=1 to Length(InputStr) do
if InputStr[i] in ['0'..'9'] then
Push(stack2,InputStr[i])
else if (InputStr[i]<>#13) then
Push(stack1,InputStr[i]);
InputStr:='';
s2:='';
while not Null(stack1) do
InputStr:=InputStr+TopPop(stack1);
InputStr:=AnsiReverseString(InputStr);
while not Null(stack2) do
s2:=s2+TopPop(stack2);
s2:=AnsiReverseString(s2);
DestroyStack(stack1);
DestroyStack(stack2);
Result:=InputStr+s2;
end;
end.
program stack;
uses
Forms,
stack2 in 'stack2.pas' {Form1};
{$R *.res}
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end.
