Создать класс для работы с двумерным массивом вещественных чисел.
Разработать следующие функциональные члены класса:
1. Поля:
• double [][] doubelArray;
2. Конструктор, позволяющий создать ступенчатый массив.
3. Методы, позволяющие:
• ввести элементы массива с клавиатуры;
• вывести элементы массива на экран;
• отсортировать элементы каждой строки массива в порядке убывания.
4. Свойство:
• возвращающее общее количество элементов в массиве (доступное только для чтения);
• позволяющее увеличить значение всех элементов массива на скаляр (доступное
только для записи).
5. Двумерный индексатор, позволяющий обращаться к соответствующему элементу
массива.
6. Перегрузку:
• операции ++ (--): одновременно увеличивает (уменьшает) значение всех элементов
массива на 1;
• констант true и false: обращение к экземпляру класса дает значение true, если каждая
строка массива упорядочена по возрастанию, иначе false.
• операции преобразования класса массив в ступенчатый массив (и наоборот).
Причина в том что метод IntpuTwotArray как то не корректно работает и не могу понять почему!
Using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using static System.Console;
using static System.Convert;
namespace array
{
class Program
{
static void Main(string[] args)
{
//Защищенный блок
try
{
double[][] x = null;
DoubleTwoArray d = new DoubleTwoArray(x);
d.IntputTwoArray();
WriteLine("Исходный массив: ");
d.ShowTwoArray();
d.SortTwoArrayRevers();
WriteLine("Отсортированный массив: ");
d.ShowTwoArray();
}
//Ловим исключение
catch (Exception e)
{
WriteLine(e.Message);
}
//Блок выполняющийся в любом случае
finally
{
//выход из программы
WriteLine();
WriteLine("Нажмите любую клавишу для выхода...");
ReadKey(true);
}
}
class DoubleTwoArray
{
public double[][] doubleArray { get; private set; }
/// Конструктор для инициализации ступенчатого массива
/// Ссылка на ступенчатый массив
public DoubleTwoArray(double[][] doubleArray)
{
this.doubleArray = doubleArray;
}
public void IntputTwoArray()
{
Write("Укажите размер массива: ");
int n = ToInt32(ReadLine());
Write($"Введите количество элементов в строке: ");
int m = ToInt32(ReadLine());
doubleArray = new double[n][];
for (int i = 0; i < doubleArray.Length; i++)
{
doubleArray[i] = new double[m];
for (int j = 0; j < doubleArray[i].Length; j++)
{
Write($"DoubleArray [{i}][{j}]: ");
doubleArray[i][j] = ToDouble(ReadLine());
}
}
}
public void ShowTwoArray()
{
WriteLine("Элементы массива doubleArray: ");
for (int i = 0; i < doubleArray.Length; i++)
{
for (int j = 0; j < doubleArray.Length; j++)
{
Write($"{doubleArray[i][j]} ");
}
WriteLine();
}
}
public void SortTwoArrayRevers()
{
Array.Reverse(doubleArray);
}
}
}
}
C#
Помогите исправить сложную программу на C#
using System;
namespace Answer {
class Program {
static private void Main() {
var matrix = new Matrix(3, new int[]{ 4, 6, 5 });
matrix.FillRandom(10, 20);
Console.WriteLine("\nВывод исходного массива: \n");
matrix.ShowMatrix();
matrix.SortMatrix();
Console.WriteLine("\nВывод отсортированного массива: \n");
matrix.ShowMatrix();
Console.WriteLine($"\nКоличество элементов в массиве: {matrix.Length}");
matrix.Multiply = 2.5;
Console.WriteLine("\nПосле увеличения на скаляр: \n");
matrix.ShowMatrix();
++matrix;
Console.WriteLine("\nИнкрементация на единицу: \n");
matrix.ShowMatrix();
matrix--;
Console.WriteLine("\nДекрементация на единицу: \n");
matrix.ShowMatrix();
Console.WriteLine($"\nОтсортирован ли по возрастанию? {matrix.IsIncrease()}");
double[][] box = (double[][])matrix;
Console.WriteLine("\nВывод зубчатого массива после явного приведения типа: \n");
foreach (var row in box) {
foreach (var x in row) Console.Write($" {x:F3} ");
Console.WriteLine();
}
Console.WriteLine("\nВывод объекта после приведения типа: \n");
Matrix mx = box;
mx.ShowMatrix();
Console.WriteLine($"\nЭлемент matrix[2][3] до изменения: {matrix[2, 3]:F3}");
matrix[2, 3] = 13.113;
Console.WriteLine($"\nЭлемент matrix[2][3] после изменения: {matrix[2, 3]:F3}");
Console.WriteLine();
Console.ReadKey();
}
}
class Matrix {
private double[][] box;
public int Length {
get {
int length = 0;
for (var i = 0; i < box.Length; ++i) length += box[i].Length;
return length;
}
}
public double Multiply {
set {
for (var i = 0; i < box.Length; ++i) {
for (var j = 0; j < box[i].Length; ++j) {
box[i][j] += value;
}
}
}
}
public Matrix(int rows, int[] cols) {
box = new double[rows][];
for (var i = 0; i < rows; ++i) {
box[i] = new double[cols[i]];
}
}
public Matrix(double[][] mx) {
box = new double[mx.Length][];
for (var i = 0; i < mx.Length; ++i) {
box[i] = new double[mx[i].Length];
for (var j = 0; j < mx[i].Length; ++j) {
box[i][j] = mx[i][j];
}
}
}
// Я старенький и мне лень заполнять массив с клавиатуры
public void FillRandom(double left, double right) {
var rand = new Random();
for (var i = 0; i < box.Length; ++i) {
for (var j = 0; j < box[i].Length; ++j) {
box[i][j] = left + rand.NextDouble() * (right - left);
}
}
}
public void ShowMatrix() {
for (var i = 0; i < box.Length; ++i) {
for (var j = 0; j < box[i].Length; ++j) {
Console.Write($" {box[i][j]:F3} ");
}
Console.WriteLine();
}
}
public void SortMatrix() {
for (var i = 0; i < box.Length; ++i) {
Array.Sort(box[i]);
Array.Reverse(box[i]);
}
}
public double this[int i, int j] {
get {
return box[i][j];
}
set {
box[i][j] = value;
}
}
public static Matrix operator ++(Matrix mx) {
for (var i = 0; i < mx.box.Length; ++i) {
for (var j = 0; j < mx.box[i].Length; ++j) {
mx.box[i][j] += 1;
}
}
return mx;
}
public static Matrix operator --(Matrix mx) {
for (var i = 0; i < mx.box.Length; ++i) {
for (var j = 0; j < mx.box[i].Length; ++j) {
mx.box[i][j] -= 1;
}
}
return mx;
}
public bool IsIncrease() {
for (var i = 0; i < box.Length; ++i) {
for (var j = 1; j < box[i].Length; ++j) {
if (box[i][j - 1] > box[i][j]) return false;
}
}
return true;
}
public static implicit operator Matrix(double[][] mx) {
return new Matrix(mx);
}
public static explicit operator double[][](Matrix mx) {
return mx.box;
}
}
}
namespace Answer {
class Program {
static private void Main() {
var matrix = new Matrix(3, new int[]{ 4, 6, 5 });
matrix.FillRandom(10, 20);
Console.WriteLine("\nВывод исходного массива: \n");
matrix.ShowMatrix();
matrix.SortMatrix();
Console.WriteLine("\nВывод отсортированного массива: \n");
matrix.ShowMatrix();
Console.WriteLine($"\nКоличество элементов в массиве: {matrix.Length}");
matrix.Multiply = 2.5;
Console.WriteLine("\nПосле увеличения на скаляр: \n");
matrix.ShowMatrix();
++matrix;
Console.WriteLine("\nИнкрементация на единицу: \n");
matrix.ShowMatrix();
matrix--;
Console.WriteLine("\nДекрементация на единицу: \n");
matrix.ShowMatrix();
Console.WriteLine($"\nОтсортирован ли по возрастанию? {matrix.IsIncrease()}");
double[][] box = (double[][])matrix;
Console.WriteLine("\nВывод зубчатого массива после явного приведения типа: \n");
foreach (var row in box) {
foreach (var x in row) Console.Write($" {x:F3} ");
Console.WriteLine();
}
Console.WriteLine("\nВывод объекта после приведения типа: \n");
Matrix mx = box;
mx.ShowMatrix();
Console.WriteLine($"\nЭлемент matrix[2][3] до изменения: {matrix[2, 3]:F3}");
matrix[2, 3] = 13.113;
Console.WriteLine($"\nЭлемент matrix[2][3] после изменения: {matrix[2, 3]:F3}");
Console.WriteLine();
Console.ReadKey();
}
}
class Matrix {
private double[][] box;
public int Length {
get {
int length = 0;
for (var i = 0; i < box.Length; ++i) length += box[i].Length;
return length;
}
}
public double Multiply {
set {
for (var i = 0; i < box.Length; ++i) {
for (var j = 0; j < box[i].Length; ++j) {
box[i][j] += value;
}
}
}
}
public Matrix(int rows, int[] cols) {
box = new double[rows][];
for (var i = 0; i < rows; ++i) {
box[i] = new double[cols[i]];
}
}
public Matrix(double[][] mx) {
box = new double[mx.Length][];
for (var i = 0; i < mx.Length; ++i) {
box[i] = new double[mx[i].Length];
for (var j = 0; j < mx[i].Length; ++j) {
box[i][j] = mx[i][j];
}
}
}
// Я старенький и мне лень заполнять массив с клавиатуры
public void FillRandom(double left, double right) {
var rand = new Random();
for (var i = 0; i < box.Length; ++i) {
for (var j = 0; j < box[i].Length; ++j) {
box[i][j] = left + rand.NextDouble() * (right - left);
}
}
}
public void ShowMatrix() {
for (var i = 0; i < box.Length; ++i) {
for (var j = 0; j < box[i].Length; ++j) {
Console.Write($" {box[i][j]:F3} ");
}
Console.WriteLine();
}
}
public void SortMatrix() {
for (var i = 0; i < box.Length; ++i) {
Array.Sort(box[i]);
Array.Reverse(box[i]);
}
}
public double this[int i, int j] {
get {
return box[i][j];
}
set {
box[i][j] = value;
}
}
public static Matrix operator ++(Matrix mx) {
for (var i = 0; i < mx.box.Length; ++i) {
for (var j = 0; j < mx.box[i].Length; ++j) {
mx.box[i][j] += 1;
}
}
return mx;
}
public static Matrix operator --(Matrix mx) {
for (var i = 0; i < mx.box.Length; ++i) {
for (var j = 0; j < mx.box[i].Length; ++j) {
mx.box[i][j] -= 1;
}
}
return mx;
}
public bool IsIncrease() {
for (var i = 0; i < box.Length; ++i) {
for (var j = 1; j < box[i].Length; ++j) {
if (box[i][j - 1] > box[i][j]) return false;
}
}
return true;
}
public static implicit operator Matrix(double[][] mx) {
return new Matrix(mx);
}
public static explicit operator double[][](Matrix mx) {
return mx.box;
}
}
}
Дмитрий Качалов
Вы сделал через Fill.Random, могли бы кинуть версию, где с клавиатуры ввод каждого элемента матрицы, пожалуйста?
Раз массив ступенчатый - Вам нужно на каждую строку спрашивать размер.
Write("Укажите размер массива: ");
int n = ToInt32(ReadLine());
doubleArray = new double[n][];
for (int i = 0; i < doubleArray.Length; i++)
{
Write($"Введите количество элементов в строке: "); //<--- здесь
int m = ToInt32(ReadLine());
doubleArray[i] = new double[m];
for (int j = 0; j < doubleArray[i].Length; j++)
{
Write($"DoubleArray [{i}][{j}]: ");
doubleArray[i][j] = ToDouble(ReadLine());
}
}
Вывод массива неправильный.
WriteLine("Элементы массива doubleArray: ");
for (int i = 0; i < doubleArray.Length; i++)
{
for (int j = 0; j < doubleArray[i].Length; j++) //<-- doubleArray[i].Length!
{
Write($"{doubleArray[i][j]} ");
}
WriteLine();
ЗЫЖ
Вообще 3. Методы, позволяющие:
• ввести элементы массива с клавиатуры;
• вывести элементы массива на экран;
Противоречат нормальному ООП. По крайней мере эти методы не должны быть членами этого класса. Но Вас заставляют делать так.
Write("Укажите размер массива: ");
int n = ToInt32(ReadLine());
doubleArray = new double[n][];
for (int i = 0; i < doubleArray.Length; i++)
{
Write($"Введите количество элементов в строке: "); //<--- здесь
int m = ToInt32(ReadLine());
doubleArray[i] = new double[m];
for (int j = 0; j < doubleArray[i].Length; j++)
{
Write($"DoubleArray [{i}][{j}]: ");
doubleArray[i][j] = ToDouble(ReadLine());
}
}
Вывод массива неправильный.
WriteLine("Элементы массива doubleArray: ");
for (int i = 0; i < doubleArray.Length; i++)
{
for (int j = 0; j < doubleArray[i].Length; j++) //<-- doubleArray[i].Length!
{
Write($"{doubleArray[i][j]} ");
}
WriteLine();
ЗЫЖ
Вообще 3. Методы, позволяющие:
• ввести элементы массива с клавиатуры;
• вывести элементы массива на экран;
Противоречат нормальному ООП. По крайней мере эти методы не должны быть членами этого класса. Но Вас заставляют делать так.
Похожие вопросы
- Помогите исправить код на C#
- Как сделать программу на C#?
- Помогите написать программу на C# По задачнику PascalABC Case20
- Срочно создать программу в C#
- Написать программу на C# вычисления стоимости покупки с учетом скидки.
- Помогите решить простую задачу на c#
- Помогите пожалуйста с решением на C#. Я как начинающий программист не совсем понимаю как сделать. Буду Благодарен
- Помогите исправить код пожалуйста
- Помогите исправить ошибку в коде.
- Помогите пожалуйста изменить программу