С Новым годом! Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 30.06.2017
Сообщений: 10
1
.NET 4.x

Преобразовать матрицу, чтобы на месте первой строки находилась вторая и т.д

10.03.2019, 16:08. Показов 643. Ответов 1

Author24 — интернет-сервис помощи студентам
Приветствую всех. Никак не могу написать функцию в программе выполняющую заданное условие. Ниже полная задача.

Написать и протестировать метод, который преобразует заданную целочисленную прямоугольную матрицу таким образом, чтобы на месте первой строки находилась вторая, на месте второй – третья, и т.д., а на месте последней – первая. Результатом работы метода является преобразо-вания матрица. Метод должен генерировать хотя бы одно исключение. Прямоугольная матрица должна генерироваться случайным образом и вы-водиться на экран в методе Main.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
 
namespace OOP_lab7
{
    class Program
    {
        static int[] Fun(int[][] arr)
        {
// необходимая ф-ция
            }
            return b; //вернуть необходимую матрицу
        }
 
        static void Main()
        {
            int m;
            Random r = new Random();
            int[][] a = new int[0][];
            int n = 0;
            try
            {
                Console.Write("Введите количество строк: ");
 
                n = int.Parse(Console.ReadLine());
            }
            catch (FormatException e)
            {
                Console.WriteLine("FormatException", e.Message, e.Source, e.TargetSite);
            }
            a = new int[n][];
            bool flag = false;
            do
            {
                try
                {
                    for (int i = 0; i < n; i++)
                    {
                        Console.Write("Введите количество символов в {0} - ой строке ступенчатого массива: ", i);
                        m = int.Parse(Console.ReadLine()); if (m == 0) throw new Exception("В строке не может быть 0 элементов");
                        a[i] = new int[m];
                        for (int j = 0; j < m; j++)
                            a[i][j] = r.Next(-20, 21);
                        flag = false;
 
 
                    }
                }
                catch (FormatException e)
                {
                    flag = true;
                    Console.WriteLine("FormatException : {0}\nFile: {1}\nLocation : {2} ", e.Message, e.Source, e.TargetSite);
                }
                catch (Exception e)
                {
                    flag = true;
                    Console.WriteLine(e.Message);
                }
            } while (flag);
 
 
 
 
            Console.WriteLine("Исходный массив: ");
            foreach (int[] mas in a)
            {
                foreach (int el in mas)
                    Console.Write("\t" + el);
                Console.WriteLine();
            }
 //а здесь вывести необходимую матрицу
            Console.ReadKey(); 
        }
    }
 
}
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
10.03.2019, 16:08
Ответы с готовыми решениями:

Преобразовать матрицу так, чтобы элементы первой строки стали упорядочены по возрастанию
Доброго времени суток, хотел бы попросить у Вас помощи в решение задач в turbo pascal: Задана...

Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой строки, с которой вторая строка содер-жится в ней
Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции первой...

Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции, с которой вторая строка содержится в первой.
Ввести две символьных строки. Выполнить поиск второй строки в первой и вывести номер позиции, с...

Преобразовать массив таким образом, чтобы в каждом элементе первая цифра стала второй, вторая третьей, ..., а шестая цифра стала первой
Прошу помощи!!! Задан массив из 6 элементов. Каждый элемент рассматривается как 6 16-х цифр....

1
70 / 44 / 28
Регистрация: 14.02.2017
Сообщений: 126
12.03.2019, 08:10 2
Добрый день!

Предлагаю воспользоваться решением с несколько другой логикой и применить LINQ. Вообще применение LINQ к двумерному массиву возможно только с приведением типов из-за того, что int[,] реализует IEnemerable, но не IEnemerable<T>, т.е. надо применять Cast(). Кроме того, необходимо переприсваивать значения в массиве, т.е., например, как в данном случае, первое значение первой "строки" было с "индексом" (0,0 - первая строка, первый столбец), а станет (n, 0 - последняя строка, первый столбец). А что, если привязать к значению его "координаты"? Ведь тогда можно будет творить с этой "матрицей" что угодно!
Используем для этого дополнительный класс Element, в котором и привяжем значения к "координатам"
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
    public class Element : IComparable<Element>
    {
        public int X { get; set; }
        public int Y { get; set; }
        public int Val { get; set; }
 
        public Element(int x, int y, int val)
        {
            X = x;
            Y = y;
            Val = val;
        }
 
        public int CompareTo(Element element)
        {
            return this.X.CompareTo(element.Val);
        }
    }
и при создании двумерного массива и заполнении его псевдослучайными значениями Random создадим одномерную коллекцию List<Element>, с которой и будем работать дальше. Я в классе Matrix все свалил в одну кучу - и создание массива размерности n на m, и присвоение его элементам значений Random, и заполнение коллекции List<Element> - так делать не надо, это некрасиво, так-то все должно быть по полочкам. FullMatrix представляет здесь стандартный двумерный массив, а MyElements - тот, с которым будем работать
Класс Matrx
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
    public class Matrix
    {
        public int N { get; set; }
        public int M { get; set; }
        public int A { get; set; }
        public int B { get; set; }
 
        public int[,] FullMatrix { get; private set; }
        public List<Element> MyElements { get; private set; }
 
        public Matrix() { }
        public Matrix(int n, int m, int a, int b) : this()
        {
            Random rnd = new Random();
            N = n;
            M = m;
            A = a;
            B = b;
            List<Element> elList = new List<Element>();
            int[,] myMatrix = new int[N, M];
            for (int i = 0; i < myMatrix.GetLength(0); i++)
            {
                for (int j = 0; j < myMatrix.GetLength(1); j++)
                {
                    myMatrix[i, j] = rnd.Next(A, B);
                    elList.Add(new Element(i, j, myMatrix[i, j]));
                    Console.Write("{0}\t", myMatrix[i, j]);
                }
                Console.WriteLine("\n");
            }
            FullMatrix = myMatrix;
            MyElements = elList;
        }
 
        internal IEnumerable<int> GetNumber(List<Element> list)
        {
            foreach (Element el in list)
            {
                yield return el.Val;
            }
        }
    }
ну и наконец класс MatrixTransform с единственным методом, который и переставляет строки - здесь мы просто присваиваем полям Element нужное значение и выводим, с помощью LINQ, в "стандартном виде" матрицы. Можно вместо Сonsole опять же присвоить значения стандартному массиву типа int[,].
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
    public class MatrixTransform
    {
        public void GetTransformMatrix(Matrix m)
        {
            List<Element> neoList = new List<Element>();
            foreach (Element i in m.MyElements)
            {
                if (i.X > 0 && i.X <= m.N - 1)
                {
                    i.X -= 1;                    
                }
                else if (i.X == 0)
                {
                    i.X += m.N - 1;
                }
            }
            foreach (Element i in m.MyElements)
            {
                int x = i.X;
                int y = i.Y;
                int val = i.Val;
                neoList.Add( new Element (x, y, val));
            }            
            for (int i = 0; i < m.N; i++)
            {
                for (int j = 0; j < m.M; j++)
                {
                    //var qwer = neoList.Where(x => x.X == i && x.Y == j).SingleOrDefault().Val;
                    Console.Write($"{neoList.Where(x => x.X == i && x.Y == j).SingleOrDefault().Val}\t");                    
                }
                Console.WriteLine("\n");
            }
        }
    }
Так вызываю в Main
C#
1
2
3
4
            Matrix m = new Matrix(5, 4, 1, 10);//размерность массива 5 строк и 4 столбца, значения элементов от 1 до 10
            MatrixTransform mt = new MatrixTransform();
            mt.GetTransformMatrix(m);
            Console.ReadKey();
0
12.03.2019, 08:10
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
12.03.2019, 08:10
Помогаю со студенческими работами здесь

Преобразовать матрицу, чтобы элементы каждой нечетной строки расположились в обратном порядке
Очень нужна помощь, помогите пожалуйста - Решить задачу, используя функцию. Дана символьная...

Преобразовать матрицу так, чтобы строки с нечетными индексами были упорядочены по убыванию, c четными - по возрастанию
Здравствуйте,нужна помощь в одной задачке,а именно(Преобразовать матрицу так, чтобы строки с...

Преобразовать матрицу так, чтобы в начале каждой строки были положительные элементы, а в конце отрицательные
Рассчитал матрицу по исходной формуле. Нужно преобразовать матрицу так, чтобы в начале каждой...

Преобразовать матрицу так, чтобы строки с нечентыми элементами были упорядочены по убыванию, с четными по взорастанию.
Программка выдает решение на половину правильное, появляются какие то лишние нули. И ещё ругается...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
Использование GraphQL в Go (Golang)
InfoMaster 08.01.2025
Go (Golang) является одним из наиболее популярных языков программирования, используемых для создания высокопроизводительных серверных приложений. Его архитектурные особенности и встроенные. . .
Что лучше использовать при создании класса в Java: сеттеры или конструктор?
Alexander-7 08.01.2025
Вопрос подробнее: На вопрос: «Когда одновременно создаются конструктор и сеттеры в классе – это нормально?» куратор уточнил: «Ваш класс может вообще не иметь сеттеров, а только конструктор и геттеры. . .
Как работать с GraphQL на TypeScript
InfoMaster 08.01.2025
Введение в GraphQL и TypeScript В современной разработке веб-приложений GraphQL стал мощным инструментом для создания гибких и эффективных API. В сочетании с TypeScript, эта технология. . .
Счётчик на базе сумматоров + регистров и генератора сигналов согласования.
Hrethgir 07.01.2025
Создан с целью проверки скорости асинхронной логики: ранее описанного сумматора и предополагаемых fast регистров. Регистры созданы на базе ранее описанного, предполагаемого fast триггера. То-есть. . .
Как перейти с Options API на Composition API в Vue.js
BasicMan 06.01.2025
Почему переход на Composition API актуален В мире современной веб-разработки фреймворк Vue. js продолжает эволюционировать, предлагая разработчикам все более совершенные инструменты для создания. . .
Архитектура современных процессоров
inter-admin 06.01.2025
Процессор (центральный процессор, ЦП) является основным вычислительным устройством компьютера, которое выполняет обработку данных и управляет работой всех остальных компонентов системы. Архитектура. . .
История создания реляционной модели баз данных, правила Кодда
Programming 06.01.2025
Предпосылки создания реляционной модели В конце 1960-х годов компьютерная индустрия столкнулась с серьезными проблемами в области управления данными. Существовавшие на тот момент модели данных -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru