Консультация № 168362
27.05.2009, 01:17
0.00 руб.
0 17 1
необходимо создать объект, в котором содержится 70 элементов. все числа - целые, проеизвести сортировку по возрастанию

Обсуждение

давно
Студент
15716
139
27.05.2009, 02:02
общий
это ответ
Здравствуйте, jzemskova.

Что то вроде этого:
Массив из 70 элементов, все целые числа.
Сначала заполняем его Random'om
Затем проходим по нему сортировкой вставкой

Приложение:
const
MaxItems = 69;

var
i, j, min, t : Cardinal;
a : array[0..MaxItems] of Cardinal;

begin
for i := 0 to MaxItems do
a[i] := Random(1000000);

for i := 0 to MaxItems - 1 do begin
min := i;
for j := i + 1 to MaxItems do
if a[min] > a[j] then
min := j;

t := a[i];
a[i] := a[min];
a[min] := t;
end;
end;
Неизвестный
27.05.2009, 02:23
общий
Спасибо, но как это сделать через создаваемый объект?
давно
Студент
15716
139
27.05.2009, 02:38
общий
А как вы хотите хранить данные в объекте?
Если там тоже планируете использовать массив, то обьявите массивом переменную в объекте, и в Create() заполняйте его, а процедуру сортировки можно вынести в отдульную процедуру
Выглядеть, примерно, это будет так:

SortArray = class
fArray : array[0..69] of Cardinal;
public;
constructor Create; override;
procedure Sort;
end;

constructor Create;
var
i:intger
begin
for i := 0 to 69 do
fArray[i] := Random(1000000);
end;

procedure Sort;
var
i, j, min, t : Cardinal;

begin
for i := 0 to 68 do begin
min := i;
for j := i + 1 to 69 do
if fArray[min] > fArray[j] then
min := j;

t := fArray[i];
fArray[i] := fArray[min];
fArray[min] := t;
end;
end;
Неизвестный
27.05.2009, 19:33
общий
А как этот код


begin
for i := 0 to MaxItems do
a[i] := Random(1000000);

for i := 0 to MaxItems - 1 do begin
min := i;
for j := i + 1 to MaxItems do
if a[min] > a[j] then
min := j;

t := a[i];
a[i] := a[min];
a[min] := t;
end;
end;

будет выглядеть не в консольном приложении, а в окне?(с использованием TList)
давно
Студент
15716
139
27.05.2009, 19:57
общий
Вместо а : array of cardinal; - List1 : TList;

вместо a[i] - List1[i]

+ Создание и уничтожение обьекта TList
Неизвестный
28.05.2009, 11:39
общий
как переделать код под мою задачу? Какие кнопки и свойства надо менять в Form1?

необходимо создать объект, в котором содержится 70 элементов. все числа - целые, проеизвести сортировку по возрастанию


КОД

unit Unit1;

interface

uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls;

type
TCustomer = class
private
CustomerName : String;
CustomerNumber : Integer;

public
property Name : String
read CustomerName;
property Number : Integer
read CustomerNumber;

constructor Create(const CustomerName : String;
const CustomerNumber : Integer);
end;

TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);

private
myList : TList;

procedure ShowListContents;

public

end;

var
Form1: TForm1;

implementation

{$R *.dfm}

constructor TCustomer.Create(const CustomerName : String;
const CustomerNumber : Integer);
begin
self.CustomerName := CustomerName;
self.CustomerNumber := CustomerNumber;
end;

function compareByName(Item1 : Pointer; Item2 : Pointer) : Integer;
var
customer1, customer2 : TCustomer;
begin
customer1 := TCustomer(Item1);
customer2 := TCustomer(Item2);

// Теперь сравнение строк
if customer1.Name > customer2.Name
then Result := 1
else if customer1.Name = customer2.Name
then Result := 0
else Result := -1;
end;

procedure TForm1.ShowListContents;
var
i : Integer;
begin
for i := 0 to myList.Count-1 do
begin
ShowMessage(TCustomer(myList[i]).Name+' is customer number '+
IntToStr(TCustomer(myList[i]).Number));
end;
end;

procedure TForm1.FormCreate(Sender: TObject);
var
customer : TCustomer;

begin
myList := TList.Create;

customer := TCustomer.Create('Neil Moffatt', 123);
myList.Add(customer);
customer := TCustomer.Create('Bill Gates', 64);
myList.Add(customer);

myList.Add(TCustomer.Create('Henry Cooper', 999));
myList.Add(TCustomer.Create('Alan Sugar', 2));

ShowListContents;

myList.Sort(compareByName);
ShowListContents;

myList.Insert(2, TCustomer.Create('Added as item 3', 33));
myList.Delete(4);

ShowListContents;
end;
end.
Неизвестный
28.05.2009, 13:29
общий
По нажатию кнопки1 список должен сортироваться по возрастанию
давно
Студент
15716
139
28.05.2009, 16:01
общий
Добавь метод Sort по аналогии
Неизвестный
28.05.2009, 16:21
общий
CustomerName надо удалить
и все что с ним связано
и как добавить метод Sort
давно
Студент
15716
139
28.05.2009, 17:03
общий
public
...
Procedure Sort
....
end;

procedure TCustomer.Sort;
begin
for i := 0 to Length(myList) - 2 do
begin
min := i;
for j := i + 1 to Length(myList) - 1 do
if myList[min] > myList[j] then
min := j;

t := myList[i];
myList[i] := myList[min];
myList[min] := t;
end;
end;


Примерно так
Неизвестный
28.05.2009, 21:16
общий
CustomerName надо удалить

какие кнопки нужно разместить на форме1
какие свойства формы необходимо поменять

как вставить sort в имеющийся код?
давно
Студент
15716
139
28.05.2009, 23:42
общий
Что непонятно в коде выше?
На форме судя по вашему коду, только кнопка и нужна.
Что мешает просто удалить CustomerName?
Неизвестный
29.05.2009, 14:02
общий
Я уже ничего не понимаю!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
Как бедет выглядеть сортировка 70 чисел в Tlist?
Неизвестный
29.05.2009, 14:31
общий
+ Создание и уничтожение обьекта TList
как это сделать в моем примере
Как будет выглядеть сортировка 70 чисел в Tlist?
Неизвестный
29.05.2009, 16:15
общий
горю
Неизвестный
29.05.2009, 18:12
общий
Пожалуйста, напишите весь код
Я запуталась, а работу завтра сдавать
давно
Студент
15716
139
29.05.2009, 21:56
общий
К утру если время найду напишу полный код.

Как то так
http://narod.ru/disk/9284887000/168362.rar.html
Форма ответа