Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Компоненты Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.03.2019, 10:10   #1
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию Работа с матрицами в delphi7

Здравствуйте. Нужна помощь с задачей: Дана квадратная матрица, она вводится и выводится в stringgrid, расположенный в pagecontrol.
Если среднее арифметическое элементов стоящих над главной диагональю больше суммы элементов стоящих на побочной диагонали, то поменять местами строки и столбцы (транспонировать матрицу). В противном случае матрицу оставить без изменения.
У меня почему-то выводится та же матрица без изменений в stringgrid.
И ещё такой вопрос: Как сделать вывод результатов на другую закладку в pagecontrol? Допустим на 1 закладке у меня вводится исходная матрица, а на другую выводиться полученная.
Вот мой исходный код:
Код:
procedure TForm1.Button3Click(Sender: TObject);
begin
n:=StringGrid1.RowCount;
n:=StringGrid1.ColCount;
k:=0;
sr:=0;
For i:=0 to n-1 do
For j:=0 to n-1 do
a[i+1,j+1]:=StrToInt(StringGrid1.Cells[j,i]);
for i:=1 to n-1 do
for j:=i+1 to n do
begin
k:=k+1;
sr:=sr+a[i,j];
end;
sr:=sr/k;
//Writeln('Cреднее арифметическое элементов над главной диагональю:', sr);
j:=n+1;
For i:=1 to n do
begin
j:=j-1;
sum:=sum+a[i,j];
end;
//Writeln('Сумма элементов побочной диагонали:',s);
if sr>sum then begin
//Writeln('Транспонированная матрица:');
for i:=1 to n do
for j:=1 to n do begin
b:=a[i,j];
a[i,j]:=a[j,i];
a[j,i]:=b;
end;
For i:=0 to n-1 do
For j:=0 to n-1 do
StringGrid1.Cells[j,i]:=IntToStr(a[j+1,i+1]);
end;
end;
Enotik_1998 вне форума Ответить с цитированием
Старый 26.03.2019, 10:30   #2
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию

Всё с первой частью я разобрался, там была путаница с переменными. Помогите, пожалуйста, с этим: Как сделать вывод результатов на другую закладку в pagecontrol? Допустим на 1 закладке у меня вводится исходная матрица, а на другую выводиться полученная.
Enotik_1998 вне форума Ответить с цитированием
Старый 26.03.2019, 10:34   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

во-первых,
Цитата:
Сообщение от Enotik_1998 Посмотреть сообщение
Код:
n:=StringGrid1.RowCount;
n:=StringGrid1.ColCount;
я, как мне помнится, уже говорил Вам, что такой код БЕССМЫСЛИЦА.
подумайте, что будет если Вы напишете такой код:
Код:
   n := 2;
   n := 3;
   n := 1;
   n := 5;
чему будет равно n? будет ли этот код отличаться от кода:
Код:
   n := 5;
если да, будет отличаться, то назовите - чем.

во-вторых, код нужно форматировать с помощью отступов.
Это резко повышает его наглядность и удобство чтения (для человека, разумеется, компьютеру, точнее, компилятору, абсолютно всё равно, как записан исходный код).


Цитата:
Сообщение от Enotik_1998 Посмотреть сообщение
У меня почему-то выводится та же матрица без изменений в stringgrid.
так может быть, у Вас sr <= sum ?
и, по-моему, цикл при транспонировании выполняется строго до n/2
вот смотрите, матрица 3*3

1 2 3
4 5 6
7 8 9

цикл по i от 1 до 3 цикл по j:=1 to 3:
i=1 j=1 поменяли a[1,1] с a[1,1]
i=1 j=2 поменяли a[1,2] с a[2,1]
i=1 j=3 поменяли a[1,3] с a[3,1]
i=2 j=1 поменяли a[2,1] с a[1,2] - вернули на место
i=2 j=2 поменяли a[2,2] с a[2,2]
i=2 j=3 поменяли a[2,3] с a[3,2]
i=3 j=1 поменяли a[3,1] с a[1,3] - вернули на место
i=3 j=2 поменяли a[3,2] с a[2,3] - вернули на место
i=3 j=3 поменяли a[3,3] с a[3,3]

одинаковым цветом пометил строки, где замена обращается назад.
в результате получим ту же матрицу, что и была изначально!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.03.2019, 11:39   #4
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию

Спасибо. Как сделать вывод результатов на другую закладку в pagecontrol? Допустим на 1 закладке у меня вводится исходная матрица, а на другую выводиться полученная.
Enotik_1998 вне форума Ответить с цитированием
Старый 26.03.2019, 12:11   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Сообщение от Enotik_1998 Посмотреть сообщение
Спасибо. Как сделать вывод результатов на другую закладку в pagecontrol? Допустим на 1 закладке у меня вводится исходная матрица, а на другую выводиться полученная.
и какая разница - на pagecontrol находится StringGrid или нет?
Вы не знаете, как из одного грида перенести в другой?

вот так:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var i, j : integer;
begin
  StringGrid2.FixedCols := StringGrid1.FixedCols;
  StringGrid2.FixedRows := StringGrid1.FixedRows;
  StringGrid2.ColCount := StringGrid1.ColCount;
  StringGrid2.RowCount := StringGrid1.RowCount;
  for i := 0 to StringGrid1.RowCount - 1 do
    for j := 0 to StringGrid1.ColCount - 1 do
        StringGrid2.Cells[j,i] := StringGrid1.Cells[j,i];
end;
исходник: PageControl.rar
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.03.2019, 18:07   #6
Enotik_1998
Пользователь
 
Регистрация: 09.03.2018
Сообщений: 77
По умолчанию

Спасибо
Enotik_1998 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[РЕШЕНО] Работа с матрицами в delphi7 Enotik_1998 Компоненты Delphi 9 22.03.2019 10:46
С++ работа с матрицами w0lf16 Помощь студентам 2 28.11.2010 14:43
Работа с матрицами (норма матрицы, работа со строками) Neitrosha Помощь студентам 1 26.11.2010 20:19
Работа с матрицами Vladimir-888 Помощь студентам 2 21.06.2010 06:51
Работа с матрицами A_Orlov Паскаль, Turbo Pascal, PascalABC.NET 0 14.06.2010 14:20