12.03.2014, 11:53 | #1 (permalink) |
Member
Регистрация: 12.03.2014
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
Delphi, тип, запись
в программе ввести в массив данные и вывести на экран список машин, отсортированный по маркам. сам не справляюсь, с формами у меня плохо( нужна помощь, буду очень благодарен!! |
12.03.2014, 11:53 | |
Helpmaster
Member
Регистрация: 08.03.2016
Сообщений: 0
|
Рекомендую почитать содержимое этих топиков Запись BD-R DELPHI Delphi |
12.03.2014, 18:28 | #3 (permalink) |
Member
Регистрация: 12.03.2014
Сообщений: 13
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 10
|
ну как я понял уже готовое приложение должно работать примерно так:
пользователю предлагается ввести данные о 10 машинах (марка машины, год выпуска, цвет, дата продажи, цена.) и программа должна отсортировать например bmw с bmw, лада с ладой. и вывести в таком виде, как я понимаю это делается с помощью Memo, хотя я никогда не работал с типом записи |
13.03.2014, 04:34 | #4 (permalink) |
Member
Регистрация: 07.08.2012
Адрес: Находка, Приморский край
Сообщений: 336
Сказал(а) спасибо: 14
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 1671
|
Только не 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; |
13.03.2014, 09:40 | #5 (permalink) | ||
Member
Регистрация: 05.03.2014
Сообщений: 200
Сказал(а) спасибо: 2
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 834
|
ага. как то так. а щас еще окажется, что тема в школе (универе) - работа с компонентами BDE и надо было писать данные в таблицу Table и сортировать уже в ней при помощи Query и выводить в DBGrid =)
|
||
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
13.03.2014, 20:27 | #6 (permalink) |
Member
Регистрация: 31.03.2010
Адрес: Тульская область
Сообщений: 1,309
Сказал(а) спасибо: 11
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 13090
|
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. Последний раз редактировалось Евгений; 13.03.2014 в 20:32 |
14.03.2014, 02:47 | #8 (permalink) |
VIP user
Регистрация: 10.03.2011
Сообщений: 765
Записей в дневнике: 1
Сказал(а) спасибо: 10
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 3453
|
|
Ads | |
Member
Регистрация: 31.10.2006
Сообщений: 40200
Записей в дневнике: 0
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Репутация: 55070
|
|
|