Алгоритм не хочет перезаписывать массив C#
Помогите пожалуйста с задачей, алгоритм странно ведёт себя, хотя все returnы выполнены. Хочется понять, что не так делаю
//Дана квадратная матрица A порядка M. Найти сумму элементов каждой ее диагонали,
//параллельной главной (начиная с одноэлементной диагонали A1,
//M
//).
using System;
namespace Zadacha41_LR10
{
class Program
{
static void Main(string[] args)
{
try {
Console.WriteLine("Введите M-размерн матрицы:");
int m = int.Parse(Console.ReadLine());
int[,] arrInt;
arrInt = new int[m, m];
//int[] b = new int[2 * m - 1];
Input(m);
int[] b =Algorhythm(arrInt,m);
Output(b);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
static int [,] Input(int m)
{
int[,] arrInt;
arrInt = new int[m, m];
for (int i = 0; i < arrInt.GetLength(0); i++)
for (int j = 0; j < arrInt.GetLength(1); j++)
{
Console.WriteLine("Введите элемент матрицы{0}{1}", i, j);
arrInt[i, j] = int.Parse(Console.ReadLine());
}
return arrInt;
}
static int[] Algorhythm(int[,] arrInt, int m)
{
int count = 0; int sum;
int[] b = new int[2 * m - 1];
int k = m;
for (int i = 0; i < 2 * m - 1; i++)
{
sum = 0;
m = 0;
for (int j = k; j < m; j++)
{
sum += arrInt[m, j];
m++;
b[count] = sum;
count++;
Console.WriteLine(b[count]);
k--;
}
}
return b;
}
static void Output(int[]b)
{
for(int i=0;i<b.Length;i++)
{
Console.WriteLine("Суммы элементов, параллельных главной диагонали:");
Console.Write("{0}", b[i]);
}
}
}
}
Необходимая отладка:
Необходимая отладка: 21 37 46 125 123 15
Отладка Текущая: 0 0 0 0 0 0 0 0 0
Ответы (2 шт):
Ознакомьтесь с отладкой приложений через отладчик и возьмите на вооружение. Это поможет вам лучше понимать происходящие в вашей программы процессы и отлавливать логические ошибки. Когда вы запускаете свое приложение в debug версии, вы можете поставить точку остановки и посмотреть, чему равны различные переменные.
К примеру ниже, поставив точку остановки от 20-й строки, я могу посмотреть спокойно значение введенной мною переменной m и содержимое массива.
К тому же можно от точки проходить пошагово код и по вызову QuickWatch просматривать содержимое в более удобном виде. К примеру ниже видно, что в коде Algorhythm значение m=0, j=3 и j < m всегда будет false. И раз вы занулили m, то верхний цикл тоже закончит работу.
Освоив этот инструмент, вам станет намного легче работать. После того, как поправите arrInt = Input(m);, ищите проблемы в коде Algorhythm, он неправильно отрабатывает.
Считает только для первой верхней диагонали справа. На этом мои навыки исчерпаны Если вы знаете как исправить, дайте знать :-)
//41.Дана квадратная матрица A порядка M. Найти сумму элементов каждой ее диагонали,
//параллельной главной (начиная с одноэлементной диагонали A1,
//M
//).
using System;
namespace Zadacha41_LR10
{
class Program
{
static void Main(string[] args)
{
try {
Console.WriteLine("Введите M-размерн матрицы:");
int m = int.Parse(Console.ReadLine());
int[,] arrInt;
arrInt = new int[m, m];
//int[] b = new int[2 * m - 1];
arrInt = Input(m);
int[] b =Algorhythm(arrInt,m);
Output(b);
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
static int [,] Input(int m)
{
int[,] arrInt;
arrInt = new int[m, m];
for (int i = 0; i < arrInt.GetLength(0); i++)
for (int j = 0; j < arrInt.GetLength(1); j++)
{
Console.WriteLine("Введите элемент матрицы{0}{1}", i, j);
arrInt[i, j] = int.Parse(Console.ReadLine());
}
return arrInt;
}
static int[] Algorhythm(int[,] arrInt, int m)
{
int count = 0; int sum = 0;
int[] b = new int[count];
int k = 2*arrInt.GetLength(0)-1;
int f= arrInt.GetLength(1)-1;
int N = arrInt.GetLength(0);
int s = arrInt.GetLength(1);
for (int i = 0; i < N - 1 && f >= 0;)
{
if (i == m)
{
break;
}
f--;
i++;
for (int j = s; j > 0 + i;)
{
sum = 0;
if (j < 0 & j == 0)
{
break;
}
Array.Resize(ref b, count + 1);
j--;
sum += arrInt[i, j] + arrInt[i, f];
if (b[count] == 0)
{
b[count] = sum;
}
count++;
//return b;
}
}
return b;
}
static void Output(int[]b)
{
for(int i=0;i<b.Length;i++)
{
Console.WriteLine("Суммы элементов, параллельных главной диагонали:");
Console.Write("{0}", b[i]);
}
}
}
}


