Технический форум

Технический форум (http://www.tehnari.ru/)
-   Delphi, Kylix and Pascal (http://www.tehnari.ru/f43/)
-   -   Delphi, тип, запись (http://www.tehnari.ru/f43/t95142/)

Anton5475 12.03.2014 11:53

Delphi, тип, запись
 
Определить тип данных запись, имеющий поля марка машины, год выпуска, цвет, дата продажи, цена. определить массив из 10 записей.
в программе ввести в массив данные и вывести на экран список машин, отсортированный по маркам.

сам не справляюсь, с формами у меня плохо( нужна помощь, буду очень благодарен!!

poiu 12.03.2014 17:01

с типом запись и массивом все понятно. куда в программе ввести? куда вывести сортировку???

Anton5475 12.03.2014 18:28

ну как я понял уже готовое приложение должно работать примерно так:

пользователю предлагается ввести данные о 10 машинах (марка машины, год выпуска, цвет, дата продажи, цена.) и программа должна отсортировать например bmw с bmw, лада с ладой. и вывести в таком виде, как я понимаю это делается с помощью Memo, хотя я никогда не работал с типом записи

Debianer 13.03.2014 04:34

Только не Memo - этот компонент представляет из себя, по сути, аналог Блокнота в Windows.
Вот так можно определить запись:
type
TAuto = Record
Firm : string;
Year : ShortInt;
Color : string;
SellDate : TDate;
Price : integer;
end;

А так объявляем массив:
var
AutoAr: array[0..9] of TAuto;

После ввода всех элементов массива сортировку можно сделать несколькими способами. Вот один из вариантов: на форму кидаем TStringGrid, пишем в него данные из массива и потом уже сортируем. Вот процедура сортировки StringGrid по указанному столбцу:
procedure SgSort(aSg : TStringGrid; const aCol : Integer);
var
SlSort, SlRow : TStringList;
i, j : Integer;
begin
//Сортируемый список.
SlSort := TStringList.Create;
//Добавляем в сортируемый список пары: "строка - объект".
//В качестве строки будем записывать значения ячеек того
//столбца, по которому надо провести сортировку. Будем брать те ячейки, которые
//не принадлежат фиксированным строкам - чтобы не подвергнуть сортировке
//шапку таблицы, если она есть.
//А в качестве объекта будем присоединять копии соответствующих строк таблицы.
for i := aSg.FixedRows to aSg.RowCount - 1 do begin
//Создаём контейнер для копии строки таблицы.
SlRow := TStringList.Create;
//Копируем строку таблицы в контейнер.
SlRow.Assign(aSg.Rows[i]);
//Добавляем в сортируемый список пару:
//строка: строка из ячейки целевого столбца;
//объект: контейнер, содержащий копию строки таблицы.
SlSort.AddObject(aSg.Cells[aCol, i], SlRow);
end;
//Сортируем столбец.
SlSort.Sort;
//Возвращаем в таблицу строки, отсортированные по столбцу с номером aCol.
j := 0;
for i := aSg.FixedRows to aSg.RowCount - 1 do begin
//Берём очередной контейнер.
SlRow := SlSort.Objects[j] as TStringList;
//Записываем содержимое контейнера в строку таблицы.
aSg.Rows[i].Assign(SlRow);
//Уничтожаем контейнер.
SlRow.Free;
//Следующий индекс списка.
Inc(j);
end;
//Уничтожаем сортируемый список.
SlSort.Free;
end;

poiu 13.03.2014 09:40

ага. как то так. а щас еще окажется, что тема в школе (универе) - работа с компонентами BDE и надо было писать данные в таблицу Table и сортировать уже в ней при помощи Query и выводить в DBGrid =)


Предупреждение:
Чем зазря клавиши истирать, лучше бы предложили ваш вариант решения. Ваш модератор.

Евгений 13.03.2014 20:27

Const CSize= 10;
type Tmass= record
mBrand: string;
mYear: integer;
mColor: string;
mDate: string;
mPrice: integer;
end;
TCar= array[1..CSize] of Tmass;
var Car: TCar;
procedure BubbleSort(var arg: TCar);
var i,j: integer;
t: Tmass;
begin
for i:=1 to CSize-1 do
for j:=1 to CSize-1 do
if arg[j]. mBrand > arg[j+1]. mBrand then begin
t:= arg[j];
arg[j]:= arg[j+1];
arg[j+1]:= t;
end;
end;
var i: integer;
begin
for i:=1 to CSize do begin
Write('Brand: '); Readln(Car[i]. mBrand);
Write('Year: '); Readln(Car[i]. mYear);
Write('Color: '); Readln(Car[i]. mColor);
Write('Date: '); Readln(Car[i]. mDate);
Write('Price: '); Readln(Car[i]. mPrice);
end;
BubbleSort(Car);
Writeln(' Brand Year Color Date Price');
for i:=1 to CSize do
Writeln(Car[i]. mBrand:2,Car[i]. mYear: (14-Length(Car[i]. mBrand)),
Car[i]. mColor:10,Car[i]. mDate:14,Car[i]. mPrice:10);
Readln;
end.

Anton5475 14.03.2014 01:56

спасибо всем огромное, сейчас буду разбираться, еще отпищусь)

Gruvi 14.03.2014 02:47

Цитата:

Сообщение от Anton5475 (Сообщение 1015144)
спасибо всем огромное, сейчас буду разбираться, еще отпищусь)

Можешь посмотреть БД подобные сделанные по школе и ученикам, коих на форуме куча.
Если будут вопросы, могу помочь с БД.


Часовой пояс GMT +4, время: 06:45.

Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.