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

Сумма побочной диагонали

04.03.2013, 19:21. Показов 2001. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Написал программу для вычисления суммы побочной диагонали квадратной матрицы. Почему-то в результате выдает полнейший бред. Сам код ниже:

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
procedure TForm1.Button1Click(Sender: TObject);
var a:array [1..5,1..5]of integer; i,j,h,sum:integer;
begin
 sum:=0;
 for i:=1 to 5 do begin
 for j:=1 to 5 do
  begin
  if StringGrid1.Cells[i,j]=' ' then a[i,j]:=0 else begin
  a[i,j]:=StrToInt(StringGrid1.Cells[i,j]);
  end;
end;
  for h:=1 to 5 do
  sum:=sum+a[h,(5+1-h)];
  Label5.Caption:='Ñóììà: '+IntToStr(sum);
  end;
  end;
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.03.2013, 19:21
Ответы с готовыми решениями:

Сумма элементов побочной диагонали
Задайте двумерный массив (матрицу) размером 9х9.Составьте программу для решения задачи: вычислить...

Закрасить ячейки побочной диагонали и ячейки, находящиеся ниже побочной диагонали
Добрый день. Задана квадратная матрица n-го порядка. Надо закрасить в цвет ячейки побочной...

Обнулить элементы матрицы, находящие под побочной диагональю и на побочной диагонали
составить программу, для данной матрицы составил программу, что зануляет элементы находящие под...

Дан двумерный массив B размера m*m. Поменять местами максимальный элемент в главной диагонали матрицы с минимальным элементом в побочной диагонали
Дан двумерный массив B размера m*m. Поменять местами максимальный элемент в главной диагонали...

17
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
04.03.2013, 19:59 2
В StringGrid нумерация строк и столбцов идет не с 1,а с 0.Замени
Delphi
1
2
if StringGrid1.Cells[i,j]=' ' then a[i,j]:=0 else begin
  a[i,j]:=StrToInt(StringGrid1.Cells[i,j]);
на
Delphi
1
2
if StringGrid1.Cells[i,j]=' ' then a[i-1,j-1]:=0 else begin
  a[i,j]:=StrToInt(StringGrid1.Cells[i-1,j-1]);
0
3 / 1 / 0
Регистрация: 25.12.2011
Сообщений: 120
04.03.2013, 20:06  [ТС] 3
Проблема не в этом, ничего не изменилось((
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
04.03.2013, 20:08 4
Тогда даже не знаю.
0
3 / 1 / 0
Регистрация: 25.12.2011
Сообщений: 120
04.03.2013, 20:10  [ТС] 5
А так все правильно?
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
04.03.2013, 21:14 6
А что выдает?
0
3 / 1 / 0
Регистрация: 25.12.2011
Сообщений: 120
04.03.2013, 21:19  [ТС] 7
Что-то вроде 238671039 каждый раз разное))
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
04.03.2013, 21:23 8
Да,что-то непонятное,может глюк среды?Может просто перезагрузить?Откуда там такое значение может быть?
0
3 / 1 / 0
Регистрация: 25.12.2011
Сообщений: 120
04.03.2013, 21:26  [ТС] 9
Понятия не имею, компьютер перезагружал, среду открывал-закрывал, даже проект три раза пересоздавал. Завтра в универе попробую на там стоящем компе прописать. Ты проверял? У тебя норм считает?
0
Пишу на Delphi...иногда
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
04.03.2013, 21:28 10
Delphi
1
2
3
for h:=1 to 5 do
  sum:=sum+a[h,(5+1-h)];
  Label5.Caption:='Сумма: '+IntToStr(sum);
должно выполняться 25 раз?
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
04.03.2013, 21:30 11
Даже не знаю,я попробовал код,слегка упростил.
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
procedure TForm1.Button1Click(Sender: TObject);
var a:array [1..5,1..5]of integer;
i,j,h,sum:integer;
begin
sum:=0;
for i:=1 to 5 do
for j:=1 to 5 do
if StringGrid1.Cells[i,j]=' ' then a[i,j]:=0 else
a[i,j]:=StrToInt(StringGrid1.Cells[i-1,j-1]);
for h:=1 to 5 do
sum:=sum+a[h,(5+1-h)];
Label1.Caption:='Сумма: '+IntToStr(sum);
end;
Все работает,только label1 на label5 заменишь.
0
3 / 1 / 0
Регистрация: 25.12.2011
Сообщений: 120
04.03.2013, 21:30  [ТС] 12
По идее нет, он же из строки i должен элемент выбрать с индексом вторым, который при вычислениях получается всего 5 раз, ибо 5 строк.
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
04.03.2013, 21:31 13
cotseec,зачем 25?

Добавлено через 54 секунды
Mind_Hunter,попробуй тот код.Я поубирал лишние begin end чтобы проще с кодом работать было и все работает на ура.
0
Пишу на Delphi...иногда
1423 / 1278 / 286
Регистрация: 03.12.2012
Сообщений: 3,914
Записей в блоге: 5
04.03.2013, 21:33 14
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
procedure TForm1.Button1Click(Sender: TObject);
var a:array [1..5,1..5]of integer; i,j,h,sum:integer;
begin
 sum:=0;
 for i:=1 to 5 do begin
 for j:=1 to 5 do
  begin
  if StringGrid1.Cells[i,j]=' ' then a[i,j]:=0 else begin
  a[i,j]:=StrToInt(StringGrid1.Cells[i,j]);
  end;
end;
end;
  for h:=1 to 5 do
  sum:=sum+a[h,(5+1-h)];
  Label5.Caption:='Сумма: '+IntToStr(sum);
 
end;
ПРАВИЛЬНО расставляйте скобки begin .... end и будет вам счастье

Добавлено через 38 секунд
Цитата Сообщение от Андрей_Новичок Посмотреть сообщение
cotseec,зачем 25?
посмотри внимательно
2
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
04.03.2013, 21:36 15
А точно да я и не заметил лишние begin end но удалил чтобы удобнее было,лишние скобки не к чему только запутаться,но код который я выложил выше правильно работает,проверял.
1
3 / 1 / 0
Регистрация: 25.12.2011
Сообщений: 120
04.03.2013, 21:38  [ТС] 16
Все работает! Спасибо огромное!
0
1642 / 1091 / 487
Регистрация: 17.07.2012
Сообщений: 5,345
04.03.2013, 21:40 17
Mind_Hunter,в следующий раз будьте внимательней.
0
45 / 45 / 15
Регистрация: 17.01.2013
Сообщений: 328
05.03.2013, 17:20 18
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
procedure TForm1.Button1Click(Sender: TObject);
var
  a: array [1..4, 1..4] of Integer;
  Res, i, j: Integer;
begin
  Randomize;
 
  for i:=1 to 4 do
    for j:=1 to 4 do begin
      a[i, j]:=RandomRange(1, 10);
      StringGrid1.Cells[i, j]:=IntToStr(a[i, j]);
    end;
 
  i:=4;
  Res:=0;
 
  for j:=1 to 4 do begin
    Res:=Res+a[i, j];
    i:=i-1;
  end;
 
  Form1.Caption:=IntToStr(Res);
Все работает. Только если RandomRange будешь использовать в Uses библиотеку Math подключи.
Delphi
1
2
uses
  ..., Math;
0
05.03.2013, 17:20
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.03.2013, 17:20
Помогаю со студенческими работами здесь

Если элементы главной диагонали образуют возрастающую последовательность, заменить элементы побочной диагонали на значения суммы элементов
Если элементы главной диагонали образуют возрастающую последовательность, заменить элементы...

Найти столбец матрицы, в котором значение элемента главной диагонали больше элемента побочной диагонали
Дан квадратный двухмерный массив целых чисел. Найти столбец, в котором значение элемента главной...

Поменять местами максимум ниже главной диагонали с минимумом ниже побочной диагонали матрицы
В матрице, поменять максимальный элемент среди элементов лежащий ниже главной диагонали, местами с...

Найти сумму элементов побочной диагонали
Найти сумму элементов побочной диагонали массива размером MxN, элементы вводятся с клавиатуры var...


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

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