Delphi, тип, запись
Определить тип данных запись, имеющий поля марка машины, год выпуска, цвет, дата продажи, цена. определить массив из 10 записей.
в программе ввести в массив данные и вывести на экран список машин, отсортированный по маркам. сам не справляюсь, с формами у меня плохо( нужна помощь, буду очень благодарен!! |
с типом запись и массивом все понятно. куда в программе ввести? куда вывести сортировку???
|
ну как я понял уже готовое приложение должно работать примерно так:
пользователю предлагается ввести данные о 10 машинах (марка машины, год выпуска, цвет, дата продажи, цена.) и программа должна отсортировать например bmw с bmw, лада с ладой. и вывести в таком виде, как я понимаю это делается с помощью Memo, хотя я никогда не работал с типом записи |
Только не 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; |
ага. как то так. а щас еще окажется, что тема в школе (универе) - работа с компонентами BDE и надо было писать данные в таблицу Table и сортировать уже в ней при помощи Query и выводить в DBGrid =)
|
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. |
спасибо всем огромное, сейчас буду разбираться, еще отпищусь)
|
Цитата:
Если будут вопросы, могу помочь с БД. |
Часовой пояс GMT +4, время: 06:45. |
Powered by vBulletin® Version 4.5.3
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.