0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 27
1

Двумерные массивы

05.12.2012, 18:17. Показов 1020. Ответов 10

Студворк — интернет-сервис помощи студентам
Заданы матрицы A, B , C, D.
Вычислить след каждой матрицы и упорядочить их в порядке возрастания. Вычисление следа матрицы оформить в виде подпрограммы - функции.

В принципе я знаю как это делать, единственное что я бы хотел у Вас спросить, это то, как я смогу вывести эти массивы на форму?
Как я должен прописать процедуру кнопки, чтобы при нажатии на нее, скажем, массив А выводился на метку Label1.caption?
Для одномерного массива это простейшая задача, а для двумерного уже для меня, как для новичка, сложна.
Или как можно сделать процедуру той же кнопки, чтобы из файла происходил набор этого массива? И как тогда записывать числа в файле?
В интернете пока что не нашел, решил спросить у знатоков
Миниатюры
Двумерные массивы  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
05.12.2012, 18:17
Ответы с готовыми решениями:

Двумерные массивы!
Здравствуйте,товарищи.Будьте так любезны, помогите решить две задачи. Буду очень благодарен за...

двумерные массивы!
Разработать алгоритм и программу обработки матриц с небольшим количеством строк или столбцов: Для...

Двумерные массивы
Помогите пожалуйста! Я почти сделал программу, но не могу понять, почему она считает неправильно :c...

Двумерные массивы
Здравствуйте. Помогите, пожалуйста, с задачей :confusion: var A: array of Real; S: Real; ...

10
3943 / 1868 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
05.12.2012, 22:39 2
Вот, только сегодня в одной теме было, как выдавать массив в Label:
Delphi
1
2
3
4
5
6
7
for i:=1 To Index1 Do
Begin
  for j:=1 to Index2 do
  Label2.caption:=label2.caption+' '+IntTostr(a[i,j]);
 
  Label2.caption:=label2.caption+#13; //Перенос на следующую строку
end;
А вообще, можно это сделать через StringGrid-ы. Только в гридах индексация строки и столбца наоборот в отличии от обычного массива. И индексация начинается с 0 (ноля). Вот так выдать в грид:
Delphi
1
2
3
  for i:=1 To Index1 Do
  for j:=1 to Index2 do
  StringGrid1.Cells[j-1,i-1]:=IntTostr(a[i,j]);
Это если FixedCols и FixedRows равны 0.
0
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 27
06.12.2012, 21:04  [ТС] 3
Спасибо, я сделал через StringGrid
Вот программа, но не знаю как осуществить процедуру формирования по возрастанию.
Была мысль записать все в массив и сформировать просто, но не получилось...
Потом решил просто отдельный элемент в ручную записать в массив, решил, что могут придраться к тому, что в ручную сделал...
Не представляю как сделать...
Вложения
Тип файла: rar Лабораторная 7 делфи2.rar (272.7 Кб, 10 просмотров)
0
3943 / 1868 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
06.12.2012, 21:45 4
Ну, если тебе нужно их отсортировать. Значений не много. Можно сделать так. В событие "Упорядочивание следов" запиши:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
procedure TForm1.N3Click(Sender: TObject);
Var
  i,j : Integer;
  ss : Set Of 1..4;
  ch : Char;
  z: array [1..4] of real;
  t: array [1..4] of Integer;
begin
  ss:=[];
  z[1]:=Sled1(SGrA);
  z[2]:=Sled1(SGrB);
  z[3]:=Sled2(SGrC);
  z[4]:=Sled2(SGrD);
 
  //Сортируем по возрастанию
  For i:=1 To 4 Do
  Begin
    t[i]:=0;
    For j:=1 To 4 Do
    If Not (j In ss) Then
    If ((t[i]=0) Or (z[t[i]]>z[j])) Then
    t[i]:=j;
 
    Include(ss,t[i]);
  End;
 
  //Выдаём в Label
  label6.Caption:='Сформированные следы:'+#13;
  For j:=1 To 4 Do
  Begin
    ch:='D';
    Case t[j] Of
    1 : ch:='A';
    2 : ch:='B';
    3 : ch:='C';
    End;
    Label6.Caption:=label6.Caption+'След матрицы '+ch+': '+FloatToStr(z[t[j]])+#13;
  End;
end;

Не по теме:

Чтобы увидеть ответ - нужно обновлять страницу.

0
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 27
06.12.2012, 21:54  [ТС] 5
Спасибо больщущее)))
Но как-то очень сложно))
Ну да ладно, это уже не ваша забота.
Спасибо еще раз, что уделили время)
0
3943 / 1868 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
06.12.2012, 21:59 6
Если бы эти следы были в массиве и не нужно было-бы буквы массивов отображать в результатах - было-бы проще. Если не разберёшься - напишу комментарии.
0
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 27
06.12.2012, 22:01  [ТС] 7
Откровенно говоря, вопросов много по коду...
0
3943 / 1868 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
06.12.2012, 22:10 8
Была мысль записать все в массив и сформировать просто, но не получилось...
Потом решил просто отдельный элемент в ручную записать в массив, решил, что могут придраться к тому, что в ручную сделал...
Вот этого я вообще не понял.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
procedure TForm1.N3Click(Sender: TObject);
Var
  i,j : Integer;
  ss : Set Of 1..4; //Множество для запоминания уже отсортированных значений, чтобы повторно их не учитывать
  ch : Char;
  z: array [1..4] of real; //Массив в котором будут исходные следы (с массивом легче работать в цикле)
  t: array [1..4] of Integer; //Массив в котором будут индексы элементов массива Z в порядке сортировки
begin
  ss:=[]; //Множество пусто
  //Заносим следы в массив...
  z[1]:=Sled1(SGrA);
  z[2]:=Sled1(SGrB);
  z[3]:=Sled2(SGrC);
  z[4]:=Sled2(SGrD);
 
  //Сортируем по возрастанию
  For i:=1 To 4 Do
  Begin
    t[i]:=0;
    For j:=1 To 4 Do //Ищем в исходном массиве минимальный элемент
    If Not (j In ss) Then //Если элемент ещё не отсортирован
    If ((t[i]=0) Or (z[t[i]]>z[j])) Then //Если индекс ещё равен 0 или тек.эл. массива меньше
    //запоминаем его индекс
    t[i]:=j; 
 
    Include(ss,t[i]); //Отмечаем, что найденный минимальный элемент уже отсоротирован (индекс в множество)
  End;
 
  //Выдаём в Label
  label6.Caption:='Сформированные следы:'+#13;
  For j:=1 To 4 Do
  Begin
    ch:='D'; //Если индекс будет равен 4 - останется буква "D"
    Case t[j] Of //Определяем букву матрицы по индексу в массиве Z
    1 : ch:='A';
    2 : ch:='B';
    3 : ch:='C';
    End;
    Label6.Caption:=label6.Caption+'След матрицы '+ch+': '+FloatToStr(z[t[j]])+#13;
  End;
end;
0
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 27
06.12.2012, 22:15  [ТС] 9
Цитата Сообщение от Одиночка Посмотреть сообщение
Вот этого я вообще не понял.
Я имел в виду записать каждый след в массив, как это сделали Вы, a[1]:=sled1(SGrA)...и так с каждым, потом просто его отсортировать. Можно же так?
И, кстати, спасибо Вам за ваш труд
0
3943 / 1868 / 337
Регистрация: 16.03.2012
Сообщений: 3,880
06.12.2012, 22:25 10
Вообще ты мог бы функцию эту описать так:
Delphi
1
2
3
4
5
6
7
8
Function Sled(x:TStringGrid;Index:Integer):Real;
Var i:integer;sl:real;
Begin
  sl:=0;
  For i:=0 to x.RowCount-1 do sl1:=sl1+StrToFloat(x.cells[i,i]);
  z[Index]:=sl; //Сразу пишем значение в массив
  Result:=sl;
end;
Тогда обращение было-бы:
Delphi
1
2
3
4
Sled(SGrA,1);
Sled(SGrB,2);
Sled(SGrC,3);
Sled(SGrD,4);
0
0 / 0 / 0
Регистрация: 09.10.2012
Сообщений: 27
06.12.2012, 23:00  [ТС] 11
При такой функции, программа какую-то ошибку выдает...

Добавлено через 3 минуты
Блин, все работает, но так все сложно для меня...Как у вас так все получается..?
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.12.2012, 23:00
Помогаю со студенческими работами здесь

Двумерные массивы
Подскажите пожалуйста с программой. Есть два двумерных массива одинаковой размерности, одну матрицу...

Двумерные массивы
Дана матрица А. Размерность матрицы определяется идентификаторами типа константа, элементы матрицы...

Двумерные массивы
задание:Даны действительные числа a1..а64. Получить действительную квадратную матрицу порядка 8,...

Двумерные массивы
помогите пожалуйста задача:Дана квадратная матрица порядка 2n + 1. Зеркально отразить ее...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
11
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru