Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.54/26: Рейтинг темы: голосов - 26, средняя оценка - 4.54
0 / 0 / 1
Регистрация: 28.11.2012
Сообщений: 31
1

Побочная диагональ массива

17.12.2012, 21:59. Показов 5343. Ответов 13
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, сия проблемка, нужно вычислить сумму побочной диагонали матрицы, естественно квадратной, но, это моя первая работа с двумерным массивом, формулу вроде просёк, как выявить эту диагональ то, но запутался с циклом. Сразу скажу на счёт кода, решил поступить так, чтобы программа хотя бы, работала, находя сумму всего массива, чтобы понять суть, но не смог и этого :C

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
42
43
44
45
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
 
type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
type
  mas=array[1..6,1..6] of Integer;
var
  i,s,j:Integer;
  X:mas;
  begin
  s:=0;
  for i:=1 to 6 do
  X[i]:=StrToInt(StringGrid1.Cells[i,j]);
  for j:=1 to 6 do
  X[i]:=StrToInt(StringGrid1.Cells[i,j]);
  s:=s+X[i];
  Label1.Caption:='Количество='+IntToStr(s);
 
end;
 
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
17.12.2012, 21:59
Ответы с готовыми решениями:

Используя только один цикл, заполнить массив, чтобы главная диагональ была равна 1, а побочная - 0
Как заполнить,чтобы главный диагональ был равен 1,а побочный диагональ 0.Но использовать только...

Массив: Упорядочить диагональ массива в порядке убывания ключей.
Дан массив целых чисел из 100 элементов. На его базе создать двумерный массив 10 10, в четных...

главная и побочная формы
Здравствуйте. Помогите пожалуйста. Трудность вот в чем: Есть кнопка на главной форме, при нажатии...

Определить, являются ли симметричными в квадратной матрице главная и побочная диагонали
Написать процедуру и функцию,которая определяет,являются ли симметричными в квадратной матрице...

13
1085 / 571 / 79
Регистрация: 07.04.2011
Сообщений: 971
Записей в блоге: 2
18.12.2012, 01:04 2
1.Если Х есть двухмерный массив, то и обращатся к нему надо как к двухмерному, а не к одномерному
Delphi
1
2
3
4
5
6
for i:=1 to 6 do
   for j:=1 to 6 do
     begin
       X[i,j]:=StrToInt(StringGrid1.Cells[j,i]);
       s:=s+X[i];
     end;
2. Не забывать, что ячейки StringGrid нумеруются с нуля, а также обращение к ним так [столбец,строка] а не как в двухмерном массиве [строка,столбец]
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32991 / 21297 / 8180
Регистрация: 22.10.2011
Сообщений: 36,591
Записей в блоге: 8
18.12.2012, 11:40 3
Цитата Сообщение от antikiler_ Посмотреть сообщение
обращатся к нему надо как к двухмерному, а не к одномерному
А сам в пятой строке продолжаешь обращаться, как к одномерному
Newbie58, для того, чтобы посчитать сумму элементов на побочной диагонали, не надо вложенных циклов, всё прекрасно считается одним. По строкам. В зависимости от номера строки легко (зная количество столбцов) вычисляется второй индекс.
0
0 / 0 / 1
Регистрация: 28.11.2012
Сообщений: 31
18.12.2012, 11:52  [ТС] 4
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
type
  mas=array[1..6,1..6] of Integer;
var
  i,s,j:Integer;
  X:mas;
  begin
  s:=0;
  j:=6;
  for i:=1 to 6 do
     begin
       X[i,j]:=StrToInt(StringGrid1.Cells[j,i]);
       s:=s+X[i,j];
       j:=j-1;
     end;
  Label1.Caption:=floattostr(s);
вот вроде, чтобы в 1 цикле я сделал, компилирует, после запуска , заполняю массив числами, для примера единичками, он выдает ошибку "Project1.exe raised exception class EConvertError with message ''' is not a valid integer value'. process stopped.
как я понял фишка в переводе из стринг грида в числа, или то , что ответ не число, что вводит в заблуждение мой разум)
0
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
18.12.2012, 12:23 5
А что в StringGrid1 записывается, код покажи.
0
0 / 0 / 1
Регистрация: 28.11.2012
Сообщений: 31
18.12.2012, 12:29  [ТС] 6
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
42
43
44
45
46
47
unit Unit1;
 
interface
 
uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls, Grids;
 
type
  TForm1 = class(TForm)
    StringGrid1: TStringGrid;
    Button1: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.dfm}
 
procedure TForm1.Button1Click(Sender: TObject);
type
  mas=array[1..6,1..6] of Integer;
var
  i,s,j:Integer;
  X:mas;
  begin
  s:=0;
  j:=6;
  for i:=1 to 6 do
     begin
       X[i,j]:=StrToInt(StringGrid1.Cells[j,i]);
       s:=s+X[i,j];
       j:=j-1;
     end;
  Label1.Caption:=floattostr(s);
 
end;
 
end.
А если имеешь ввиду числа какие, то тут любые, вводишь вручную) можно и рандомом, но я не стал с ним возиться
0
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
18.12.2012, 12:34 7
А сколько в гриде столбцов/строк? Должно быть 7 (0..6).
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32991 / 21297 / 8180
Регистрация: 22.10.2011
Сообщений: 36,591
Записей в блоге: 8
18.12.2012, 12:34 8
Newbie58, ну ведь говорили, что индексация в StringGrid-е начинается с 0. Значит, если в гриде у тебя 6 строк и 6 столбцов, то обращение к ячейке Cells[1, 6] на первой же итерации будет происходить к невидимой ячейке, значение которой ты не назначал. По умолчанию там - пустая строка. Вот тебе и сообщение об ошибке...
0
0 / 0 / 1
Регистрация: 28.11.2012
Сообщений: 31
18.12.2012, 12:45  [ТС] 9
я 1 строку и 1 столбец заблокировал
0
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
18.12.2012, 12:49 10
И что это меняет?
Цитата Сообщение от gorfil Посмотреть сообщение
Должно быть 7 (0..6).
0
0 / 0 / 1
Регистрация: 28.11.2012
Сообщений: 31
18.12.2012, 12:54  [ТС] 11
можно с кодом , пожалуйста?) где именно 0..6
0
Модератор
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
18.12.2012, 13:04 12
В Инспекторе Объектов Грида поставь 7 у ColCount и RowCount.
1
0 / 0 / 1
Регистрация: 28.11.2012
Сообщений: 31
18.12.2012, 13:48  [ТС] 13
Всё, заработало, всем спасибо)
0
antikiler_
19.12.2012, 01:46     Побочная диагональ массива
  #14

Не по теме:

Цитата Сообщение от UI Посмотреть сообщение
А сам в пятой строке продолжаешь обращаться, как к одномерному
Бывает....:-[

0
19.12.2012, 01:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.12.2012, 01:46
Помогаю со студенческими работами здесь

Побочная диагональ
Побочная диагональ может быть только в квадратной матрице или в любой??????????? Чем отличается...

Побочная диагональ в 1с
Стоит задача вывести побочную диагональ в 1с, пишу код ориентируясь на формула N+1-I и выходит...

побочная диагональ
как в бейсики можно задать побочную диагональ???

Побочная диагональ
Помогите, пожалуйста Дано число n, n 100 . Создайте массив n×n и заполните его по следующему...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru