Описать класс для работы с двумерным массивом - C#
Формулировка задачи:
Здравствуйте. Помогите пожалуйста с задачей:
Задание:
Разрабатываемый класс должен содержать следующие элементы: скрытые и открытые поля, конструкторы, перегруженные операции. В программе должна выполняться проверка всех разработанных элементов класса.Условие:
Описать класс для работы с двумерным массивом. Реализовать перегруженные операции отношений (>,<), выполняющие сравнение сумм элементов главной диагонали.Решение задачи: «Описать класс для работы с двумерным массивом»
textual
Листинг программы
using System;
// класс двумерного массива
class Array2
{
private int[,] _data; // внутренний массив для хранения значений
// конструктор по двум измерениям
public Array2( int dim1, int dim2 )
{
_data = new int[dim1,dim2]; // создание внутреннего массива
}
// конструктор копирования
public Array2( Array2 other )
{
_data = other._data;
}
// геттер длины измерения d
public int GetLength( int d )
{
/*if( d == 0 || d == 1 )
return _data.GetLength( d );
else
throw string( "Dimension number mismatch" ); */
return _data.GetLength( d );
}
/*// аксессор элемента по индексам
public int operator[] ( int i1, int i2 )
{
return как здесь передать ссылку _data[i1,i2];
}*/
// геттер элемента по индексам
public int GetValue( int i1, int i2 )
{
return _data[i1, i2];
}
// сеттер элемента
public void SetValue( int i1, int i2, int val )
{
_data[i1, i2] = val;
}
// перегруженный оператор 'меньше'
public static bool operator< ( Array2 a1, Array2 a2 )
{
int min1 = Math.Min( a1.GetLength( 0 ), a1.GetLength( 1 ) );
int sum1 = 0;
for( int i1 = 0; i1 < min1; i1++ )
sum1 += a1.GetValue( i1, i1 );
int min2 = Math.Min( a2.GetLength( 0 ), a2.GetLength( 1 ) );
int sum2 = 0;
for( int i2 = 0; i2 < min2; i2++ )
sum2 += a2.GetValue( i2, i2 );
return sum1 < sum2;
}
// перегруженный оператор 'больше'
public static bool operator> ( Array2 a1, Array2 a2 )
{
int min1 = Math.Min( a1.GetLength( 0 ), a1.GetLength( 1 ) );
int sum1 = 0;
for( int i1 = 0; i1 < min1; i1++ )
sum1 += a1.GetValue( i1, i1 );
int min2 = Math.Min( a2.GetLength( 0 ), a2.GetLength( 1 ) );
int sum2 = 0;
for( int i2 = 0; i2 < min2; i2++ )
sum2 += a2.GetValue( i2, i2 );
return sum1 > sum2;
}
}
class Program
{
public static void Main()
{
// длины массивов
int
len11 = 3,
len12 = 4,
len21 = 5,
len22 = 3;
// создание двух двумерных массивов
Console.Write( "Создаём двумерный массив [{0},{1}]...", len11, len12 ) ;
Array2 a21 = new Array2( len11, len12 );
//Console.WriteLine();
Console.Write( "\nСоздаём двумерный массив [{0},{1}]...", len21, len22 );
Array2 a22 = new Array2( len21, len22 );
Console.WriteLine( "\n" );
// заполнение и вывод этих массивов
int min = -10, max = 10;
Random r = new Random();
//std::cout.width( 2 );
Console.WriteLine( "Заполняем массив 1 случайными числами из отрезка [{0},{1}]", min, max );
for( int i = 0; i < a21.GetLength(0); i++ )
{
for( int j = 0; j < a21.GetLength(1); j++ )
{
a21.SetValue( i, j, r.Next( min, max ) );
Console.Write( "{0,3} ", a21.GetValue( i, j ) );
}
Console.WriteLine();
}
Console.WriteLine( "Заполняем массив 2 случайными числами из отрезка [{0},{1}]", min, max );
for( int i = 0; i < a22.GetLength(0); i++ )
{
for( int j = 0; j < a22.GetLength(1); j++ )
{
a22.SetValue( i, j, r.Next( min, max ) );
Console.Write( "{0,3} ", a22.GetValue( i, j ) );
}
Console.WriteLine();
}
Console.WriteLine();
// сравнение массивов обеими операциями
Console.WriteLine( "Сравниваем массивы:" );
Console.WriteLine( "Массив 1 меньше массива 2: {0}", a21 < a22 );
Console.WriteLine( "Массив 1 больше массива 2: {0}", a21 > a22 );
Console.ReadLine();
}
}