Вопрос № 174098: Добрый день уважаемые эксперты! помогите пожалуйста в написании программы в Дельфи! Обработка массива с использованием компонента stringgrid. Дан массив A(5;5) и дан массив(вектор) B(5) вычислить А*В. (везде использовать stringgrid). и ес...
Вопрос № 174119: Здравствуйте, уважаемые эксперты у меня такой вопрос. Надо написать метод класса для сортировки сведений по заработной плате, используя метод сортировки простым выбором. Имеется класс для обработки сведений о сотрудниках (Tperson=class) , стру...
Вопрос № 174098:
Добрый день уважаемые эксперты! помогите пожалуйста в написании программы в Дельфи! Обработка массива с использованием компонента stringgrid. Дан массив A(5;5) и дан массив(вектор) B(5) вычислить А*В. (везде использовать stringgrid). и если можно с коментариями! Заранее огромное спасибо!!!
Отвечает Евгений/Genia007/, Бакалавр :
Здравствуйте, Андреев Дмитрий Фёдорович. Вектор x можно умножать на матрицу A подходящей размерности. При этом вектор-столбец умножается справа Ax, а вектор строка — слева xtA. Если размерность вектора J, а размерность матрицы I×J то в результате получится вектор размерности I. Если матрица A — квадратная (I×I), то вектор y = Ax имеет ту же размерность, что и x. Вот один из примеров как можно это сделать, в нём происходит умножение массива A(5;5) на массив(вектор - строка) B(5). Массив A(5;5)
хранится в stringgrid1, массив(вектор - строка) B(5) в stringgrid2, а результат А*В выводится в stringgrid3.
type TForm1 = class(TForm) StringGrid1: TStringGrid; StringGrid2: TStringGrid; StringGrid3: TStringGrid; Button1: TButton; procedure FormCreate(Sender: TObject); procedure Button1Click(Sender: TObject); private { Private declarations } public { Public declarations } end;
var Form1: TForm1; Matrix: array [0..4, 0..4] of integer; // Массив А(5, 5) Vector: array [0..4] of integer;
// Массив В(вектор(5)) Element: integer; // Новый элемент полученного массива
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject); var i, j: integer; begin For i:=0 to 4 do For j:=0 to 4 do Matrix[i, j]:= StrToInt(StringGrid1.Cells[i, j]); // Получение матрицы из сетки For i:=0 to 4 do Vector[i]:= StrToInt(StringGrid2.Cells[i, 0]); // Получение вектора из сетки for i:=0
to 4 do // Умножение массивов A*B begin Element:= 0; for j:=0 to 4 do Element:= Element + (Matrix[i, j]) * (Vector[j]); // Получение нового элемента массива C StringGrid3.Cells[i, 0]:= IntToStr(Element); // Вывод полученного элемента массива в сетку end; end;
procedure TForm1.FormCreate(Sender: TObject); var i, j: integer; begin Randomize; // Инициализация генератора случайных чисел For i:=0 to 4 do For j:=0
to 4 do StringGrid1.Cells[i, j]:= IntToStr(Random(11)); // Заполнение первой сетки случайными числами в диапазоне (0..10) For i:=0 to 4 do StringGrid2.Cells[i, 0]:= IntToStr(Random(11)); // Заполнение второй сетки случайными числами в диапазоне (0..10) end;
end.
----- Помогли тебе, помоги и ты.
Ответ отправил: Евгений/Genia007/, Бакалавр
Ответ отправлен: 10.11.2009, 11:38
Оценка ответа: 5
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 256342
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Вопрос № 174119:
Здравствуйте, уважаемые эксперты у меня такой вопрос. Надо написать метод класса для сортировки сведений по заработной плате, используя метод сортировки простым выбором. Имеется класс для обработки сведений о сотрудниках (Tperson=class) , структура данных типа запись Sotrud=record Famil:str; Dolgn:str; Zarpl:real; данные хранятся в диамическом массиве Tdata=array of sotrud; надо написать процедуру procedure Tperson.Sort_stat(var pp:Tdata); var x:sotrud; ------ : integer;
заранее
спасибо. ---------------------------------- Добавлено из мини-форума: Сортировка нужна по значению заработной платы.
Отвечает Евгений/Genia007/, Бакалавр :
Здравствуйте, Vlad9240. Вот процедура, которая Вам нужна:
Код:
procedure Tperson.Sort_stat(var pp: Tdata; col: integer); {col - количество записей в массиве} var i, j, min: integer; buf, buf1: string; buf2: real; begin for i:= 0 to col - 1 do begin
{ поиск минимального элемента в части массива} min:= i; for j:= i + 1 to col - 1 do if pp[j].Zarpl < pp[min].Zarpl then min:= j; { поменяем местами pp[min] и pp[i] } buf:= pp[i].Famil; buf1:= pp[i].Dolgn; buf2:= pp[i].Zarpl; pp[i].Famil:= pp[min].Famil; pp[i].Dolgn:= pp[min].Dolgn; pp[i].Zarpl:= pp[min].Zarpl; pp[min].Famil:= buf; pp[min].Dolgn:= buf1; pp[min].Zarpl:= buf2; end; end;
----- Помогли тебе, помоги и ты.
Ответ отправил: Евгений/Genia007/, Бакалавр
Ответ отправлен: 14.11.2009, 14:50
Как сказать этому эксперту "спасибо"?
Отправить SMS
#thank 256498
на номер 1151 (Россия) |
Еще номера »
Вам помогли? Пожалуйста, поблагодарите эксперта за это!
Оценить выпуск »
Нам очень важно Ваше мнение об этом выпуске рассылки!
* Стоимость одного СМС-сообщения от 7.15 руб. и зависит от оператора сотовой связи.
(полный список тарифов)
** При ошибочном вводе номера ответа или текста #thank услуга считается оказанной, денежные средства не возвращаются.
*** Сумма выплаты эксперту-автору ответа расчитывается из суммы перечислений на портал от биллинговой компании.