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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.12.2012, 00:16   #1
Elena04
Пользователь
 
Регистрация: 04.04.2012
Сообщений: 20
По умолчанию C#-массивы. (исправить)

помогите пожалуйста, а то ни как не додуматься.
нужно дописать неопределённый массив с помощью конструктора и вызвать с помощью индексатора:
using System;
//Описать класс, реализующий тип данных «матрица целых чисел». Класс должен
//реализовывать метод проверки, является ли матрицы верхней треугольной.


namespace ConsoleApplication1
{
class Matrica
{
//поля
public int a; //закрытое поле класса Marticia-для строк
int b; //открытое поле класса Marticia-для столбцов
int[,] M; //закрытое поле класса Marticia-для массива


//свойство
public int B //свойство для открытия доступа к полю'b'
{
get { return b; } //полученное значение 'b'
set { b = value; } // запись' значения в 'b'
}


//индексатор
public int this[int st,int sl] //индексатор для М,где'st' и 'sl'-индексы массива
{
get //получится
{
if (st >= 0 && st <= a && sl >= 0 && sl <= b) //условие для правильной инициализации ьассива в заданном ли диапозоне индексы 'st' и 'sl'
return M[st,sl]; //получчение значемого элемента
else
{
throw new FormatException(); //генерация ошибок о неверном вводе
}
}
set { M[st,sl] = value; } //истоновить значение элемента
}


//конструктор
public Matrica() //конструктор по умолчанию без параметров
{
this.a = 5; //полю а присваевается значение 5
this.b = 5; //полю b присваевается значение 5
this.M = new int[5, 5] { { 1, 2, 3, 4, 5 }, { 0, 7, 8, 9, 10 }, { 0, 0, -2, -6, 2 }, { 0, 0, 0, 5, 3 }, { 0, 0, 0, 0, -9 } }; //inisializaciya dvuhmernogo massiva znacheniyami
}

//конструктор
public Matrica(int a, int b) //конструктор по умолчанию с параметрами
{
this.a = a; //полю а присваевается значение a
this.b = b; //полю b присваевается значение b
this.M = new int[a, b]; //полю М присваевается массивом размерности 'yu 'a'x'b'
}

//метод
public void Print() //метод ввода массива на экран
{
for (int i = 0; i < a; i++) //от 0 до строки
{
for (int j = 0; j < b; j++) //от 0 до столбца
{
Console.Write(M[i, j] + "\t"); //вывод элемента массива на экран череззнак таблицы
}
Console.WriteLine();
Console.WriteLine();
}
Console.WriteLine();
}

//метод
public void PrintEl(int x, int y) //mметод ввода элемента массива
{
if (x > 0 && x <= a && y > 0 && y <= b) //если элемент в диапозоне массива
{
Console.WriteLine("Элемент [" + x + ";" + y + "] равен " + M[x - 1, y - 1]); //вывод элемента массива на экран
}
else
throw new FormatException(); //возвращаем вид оштбки 'FormatException'
}
Elena04 вне форума Ответить с цитированием
Старый 21.12.2012, 00:16   #2
Elena04
Пользователь
 
Регистрация: 04.04.2012
Сообщений: 20
По умолчанию

//метод
public bool Treugol() //метод проверяющий является ли матрица верхней треугольной
{
bool z = true; // догическая переменная для ответа из метода

for (int i = 0; i < a; i++) //от 0 .. a
for (int j = 0; j < b; j++) //от 0 .. b
{
if (i > j) //если индекс строчки больше индекса столбца то эл-т массива находится ниже диоганали матрицы
if (M[i, j] != 0 && z == true) //если этот эл-т M[i, j]=0 и 'z'=true то 'z'= false
z = false;
}
return z; // ответ из метода переменной 'z'
}
}

class Program
{
static void Main(string[] args)
{
try //контролирующий блок оштбок
{
Console.WriteLine("Введите размерность массива");
Console.Write("Строки ");
int a = Convert.ToInt32(Console.ReadLine()) ; //ввод стороки
Console.Write("Столбцы ");
int b = Convert.ToInt32(Console.ReadLine()) ; //ввод столбца

Matrica Matr = new Matrica(a, b); //создпние объектаа с помощью конструктора с параметрами 'a' i 'b'

Console.WriteLine("Введите значения елементов массива через enter");
for (int i = 0; i < Matr.a; i++) //от 0.. значение поля 'a' в объект Mart
for (int j = 0; j < Matr.B; j++) //от 0.. значение поля 'b' v объект Mart
{
Matr[i, j] = Convert.ToInt32(Console.ReadLine()) ; //ввод значения эл-та массива
}

Matr.Print();// выполнение метода Print для объекта Matr

if (Matr.Treugol() == true) //если выполнение метода Treugol для объекта Matr выдаёт ответ = true
Console.WriteLine("Матрица является верхней треугольной");
else
Console.WriteLine("Матрица НЕ является верхней треугольной");

Console.WriteLine();
Console.WriteLine("Введите индексы искомого элемента");
Console.Write("Строки ");
int k = Convert.ToInt32(Console.ReadLine()) ; //ввод строки
Console.Write("Столбцы ");
int l = Convert.ToInt32(Console.ReadLine()) ; //ввод столбца
Console.WriteLine();
Matr.PrintEl(k, l); //выполнение метода PrintEl для объекта Matr - то есть вывод эл-та на экран
Console.WriteLine();

Matrica Matric = new Matrica();//объект создания с помощью конструктора по умолчанию

Console.WriteLine();
Console.WriteLine("Матрица по умолчанию:");
Console.WriteLine();
Matric.Print(); //выполнение метода'Print' для объекта Matric

if (Matric.Treugol() == true) //если выполнение метода Treugol для объекта Matric выдаёт ответ = true
Console.WriteLine("Матрица является верхней треугольной"); //выввод на экран этого значения
else
Console.WriteLine("Матрица НЕ является верхней треугольной");
}
catch (FormatException) //если вид ошибки - FormatException то вывод следуемого сообщение на экран {
Console.WriteLine("ERROR! Выход за границы массива или неверное значение индексов!");
}
catch (OverflowException) //если вид ошибки - OverflowException то вывод следуемого сообщение на экран
{
Console.WriteLine("ERROR! Переполнение по типу переменной!");
}


Console.ReadKey();



}
}
}
Elena04 вне форума Ответить с цитированием
Старый 21.12.2012, 00:32   #3
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

0) Для оформления программного кода используйте тег CODE.

1) Если массив M инициализирован конструкцией new int[5,5], то обращение M[5,5] вызовет исключение. В индексаторе Вы этим пренебрегаете.
2) В методе проверки можно сократить тело цикла до
Код:
if (M[i, j] != 0) return false;
И возвращать true по достижении конца цикла, соответственно. z при этом станет ненужной.
3) "Исправить" - это задание либо для Вас, либо для человека с миелофоном. Мой, к сожалению, в ремонте. Что не работает?
Abstraction вне форума Ответить с цитированием
Старый 21.12.2012, 01:10   #4
Elena04
Пользователь
 
Регистрация: 04.04.2012
Сообщений: 20
По умолчанию

всё работает, но мне надо дописать неопределённый массив с помощью конструктора и чтоб вызывалось с помощью индексатора
Elena04 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Исправить зaдачку на двумерные массивы... Делфи. kazzz Помощь студентам 0 18.05.2011 18:12
одномерные массивы (паскаль)(исправить)) Rfn.if Помощь студентам 1 28.12.2010 22:50
Массивы(исправить программу) ilyas22 Паскаль, Turbo Pascal, PascalABC.NET 3 26.05.2010 22:35
Массивы, частное, остаток(исправить) Alter Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 24.05.2008 23:37