Поможем написать учебную работу
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Если у вас возникли сложности с курсовой, контрольной, дипломной, рефератом, отчетом по практике, научно-исследовательской и любой другой работой - мы готовы помочь.
Лабораторная работа №5 по Delphi. Фёдоров Виктор. Вариант №17 2
Лабораторная работа №5
«УКАЗАТЕЛИ И ИХ ИСПОЛЬЗОВАНИЕ ПРИ РАБОТЕ С
ДИНАМИЧЕСКИМИ МАССИВАМИ»
Выполнил: студент 2 курса факультета Информатики Фёдоров Виктор
Вариант № 17
Постановка задачи: Дан массив, состоящий из символов. Преобразовать его по следующему правилу: сначала должны находиться цифры, а затем все остальные символы, сохраняя при этом взаимное расположение символов в каждой из этих двух групп.
Описание объектов, используемых в проекте:
i, j, k:integer; //счётчики
A : array of Char; //массив, элементы которого надо отсортировать
M : set of '0'..'9'; //множество символов десятичных цифр
F : Boolean; // переменная для промежуточных вычислений
C : Char; //переменная для промежуточных вычислений
Листинг проекта:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, Grids, Buttons;
type
TForm1 = class(TForm)
Edit1: TEdit;
Label1: TLabel;
Mas1: TStringGrid;
Label2: TLabel;
Button1: TButton;
Mas2: TStringGrid;
Label4: TLabel;
SpeedButton1: TSpeedButton;
SpeedButton2: TSpeedButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure SpeedButton1Click(Sender: TObject);
procedure SpeedButton2Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
i, j, k : Integer; //Счётчики.
A : array of Char; //Массив, элементы которого надо отсортировать.
M : set of '0'..'9'; //Множество символов десятичных цифр.
F : Boolean; //Для промежуточных вычислений.
C : Char; //Для промежуточных вычислений.
begin
//Проверки.
if Length(Edit1.Text) = 0 then begin
ShowMessage('Вы ничего не набрали, пожалуйста, проверьте строку.');
Exit;
end;
M := ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']; //Инициализация множества.
//Инициализация таблиц и массива.
Mas1.ColCount := Length(Edit1.Text);
Mas2.ColCount := Length(Edit1.Text);
SetLength(A, Length(Edit1.Text));
//Заполнение таблицы и массива.
For i := 1 to Length(Edit1.Text) do begin
Mas1.Cells[i - 1, 0] := Edit1.Text[i];
A[i - 1] := Edit1.Text[i];
end;
//Сортировка элементов массива.
//Перебор символов в массиве, начиная с самого первого символа.
For i := Low(A) to High(A) do begin
If not (A[i] in M) then begin //Если очередной символ оказался буквой (не цифрой).
//Ищем первую цифру правее текущей буквы.
F := False;
For j := i + 1 to High(A) do begin
If A[j] in M then begin
F := True;
Break;
end;
end;
If F then begin //Если цифра найдена.
C := A[j]; //Запоминаем найденную цифру.
For k := j - 1 downto i do begin//Смещаем все элементы массива с индексами i..(j-1) на 1 позицию вправо.
A[k + 1] := A[k];
end;
A[i] := C;//Записываем найденную цифру в позицию, где была буква.
end else begin
//Если цифра не найдена - значит прдолжать сортировку дальше
//нет смысла - сортировка завершена.
Break;
end;
end;
end;
//Переписываем элементы отсортированного массива в таблицу.
For i := Low(A) to High(A) do begin
Mas2.Cells[i, 0] := A[i];
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
;;
end;
procedure TForm1.SpeedButton1Click(Sender: TObject);
begin
Close;
end;
procedure TForm1.SpeedButton2Click(Sender: TObject);
begin
Edit1.Clear;
end;
end.
Тесты: