Создайте универсальную функцию PrintAnyArr (печать любого массива, кроме усеченных) - C#
Формулировка задачи:
Ребят, всем доброго времени суток, нужна ваша помощь) Имеется следующее задание:
1. Создайте универсальную функцию PrintAnyArr (печать любого массива, кроме усеченных);
Методические указания: Второй параметр функции должен быть типа Array. Для того, чтобы отличить размерность массива (отличить вектор от матрицы) слудует использовать свойство Rank. К элементам массива A, имеющего класс Array, нет возможности прямого доступа в обычной манере - A [<индексы>], но зато есть специальные методы GetValue (<индексы>) и SetValue (<индексы>).
2. Дополнительно. Попробуйте модифицировать функцию, таким образом чтобы она могла печатать усеченные массивы. (10 баллов)
В принципе, решение уже есть, вот как оно у меня выглядит:
Суть моего вопроса о помощи заключается в следующем. Преподаватель сказал, что неверно выполнено дополнительное задание, т.е. если будет, к примеру, существовать какой-то изрезанный массив с вот такой вот инициализацией : int[][,][] C = new int[][,][]{......} т.е. какой-нибудь трехмерный и т.д., то такая функция для его печати работать не будет. Вроде как решить эту проблему как-то через рекурсию.. Только вот я не пойму как
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ArrayTest
{
class Program
{
class Arrs
{
public static void PrintAnyArr(string name, Array A)
{
Console.WriteLine(name);
int n = A.Rank;
if (n == 1)
{
var en = A.GetEnumerator();
en.MoveNext();
if (en.Current.GetType() == Type.GetType("System.Int32"))
for (int i = 0; i < A.GetLength(0); i++)
Console.Write(A.GetValue(i) + " ");
else
foreach (int[] mas in A)
{
for (int i = 0; i < mas.GetLength(0); i++)
Console.Write(mas.GetValue(i) + " ");
Console.WriteLine();
}
}
if (n == 2) //матрица
{
for (int i = 0; i < A.GetLength(0); i++)
{
for (int j = 0; j < A.GetLength(1); j++)
{
Console.Write(A.GetValue(i, j) + " ");
}
Console.WriteLine();
}
}
}
}
static void Main(string[] args)
{
int[] A = { 6, 2, 9 };
int[,] B = { { 4, 2, 3 }, { 4, 8, 6 } };*/
int[][] C = new int[3][]
{
new int[] {1,2,3},
new int[] {4,5,6,7,8},
new int[] {9}
};
Arrs.PrintAnyArr("Одномерный массив", A);
Console.WriteLine();
Arrs.PrintAnyArr("Матрица",B);
Console.WriteLine();
Arrs.PrintAnyArr("Усеченный массив",R);
}
}
}Решение задачи: «Создайте универсальную функцию PrintAnyArr (печать любого массива, кроме усеченных)»
textual
Листинг программы
printfn "Array 1 : \r\n%A"