Работа с матрицой - C#

  1. Создать матрицу АNxM ,вывести ее. В каждом столбце матрицы поменять местами второй отрицательный и минимальный элемент столбца. Если в столбце нет двух отрицательных элементов, то оставить его без изменения. вот код того что у меня есть:


textual

Код к задаче: «Работа с матрицой - C#»

using System;
 
namespace ConsoleApplication1
{
    class Program
    {
        static void ChangeArr(int[,] a)
        {
            int i, j;
            int min; // Значение минимального элемента.
            int idxMin; // Индекс минимального элемента.
            int countNeg; // Счётчик отрицательных элементов.
            int idxSecNeg; // Индекс второго отрицательного элемента.
 
            for (i = 0; i < a.GetLength(1); i++)
            {
                min = int.MaxValue;
                idxMin = -1;
 
                countNeg = 0;
                idxSecNeg = -1;
 
                for (j = 0; j < a.GetLength(0); j++)
                {
                    if (a[j, i] < min) // Нашли очередное минимальное.
                    {
                        min = a[j, i]; // Запоминаем его значение.
                        idxMin = j; // Запоминаем его индекс в столбце.
                    }
 
                    if (a[j, i] < 0) // Нашли очередное отрицательное.
                    {
                        countNeg++;
                        if (countNeg == 2) // Насчитали два отрицательных.
                            idxSecNeg = j; // Запомнили индекс второго отрицательного в столбце.
                    }
                }
 
                if ((idxSecNeg != -1) && (idxSecNeg != idxMin)) // Если второе отрицательное нашлось, и оно не является минимальным элементом столбца.
                {
                    min = a[idxSecNeg, i]; // Переменная min хранит значение минимального элемента. Но, т.к. мы запомнили его индекс, то эту переменную мы можем использовать для обмена.
                    a[idxSecNeg, i] = a[idxMin, i];
                    a[idxMin, i] = min;
                }
            }
 
        }
        
        static void ShowArr2D(int[,] a)
        {
            for (int i = 0; i < a.GetLength(0); i++)
            {
                for (int j = 0; j < a.GetLength(1); j++)
                    Console.Write("{0}\t", a[i, j]);
 
                Console.WriteLine();
            }
        }
 
        static void Main()
        {
            Random rand = new Random();
 
            int i, j;
            bool isValid = false;
 
            do
            {
                Console.Write("Число строк: ");
 
                isValid = int.TryParse(Console.ReadLine(), out i);
 
                if (!isValid)
                    Console.WriteLine("Это не целое число.");
 
                if (isValid && i < 2)
                {
                    Console.WriteLine("Слишком мало строк.");
                    isValid = false;
                }
            } while(! isValid);
 
 
            do
            {
                Console.Write("Число столбцов: ");
 
                isValid = int.TryParse(Console.ReadLine(), out j);
 
                if (!isValid)
                    Console.WriteLine("Это не целое число.");
 
                if (isValid && j < 2)
                {
                    Console.WriteLine("Слишком мало столбцов.");
                    isValid = false;
                }
            } while (!isValid);
 
            
            int[,] arr = new int[i, j];
            
            // Заполняем массив
            for (i = 0; i < arr.GetLength(0); i++)
                for (j = 0; j < arr.GetLength(1); j++)
                    arr[i, j] = rand.Next(-50, 51);
 
            Console.WriteLine("Исходный массив:");
            ShowArr2D(arr);
            Console.WriteLine();
 
            ChangeArr(arr); // Изменяем массив.
 
            Console.WriteLine("Новый массив:");
            ShowArr2D(arr);
            Console.WriteLine();
        }
    }
}

СДЕЛАЙТЕ РЕПОСТ

9   голосов, оценка 4.111 из 5



Похожие ответы
  1. Привет знатокам Сразу скажу - мне нужен хотя бы ручной расчет не говоря о программе, т.к. в программировании я мало понимаю, и скорее всего обратился не в ту тему или даже форум. Заранее извиняюсь Ребят, подскажите как найти оси координаты КУРСОРА если они расположены в обратном направлении, а их центр находится в левом верхнем углу? На скриншоте http://prntscr.com/gnbkw4 я показал так скажем условие которое сделал сам, но для моего мегамозга эта сложная задача.

  1. Код ================== { Entry 1 } Application Name: Google Chrome URL: http://cp.fange.ru/register Username: 123dd Password: 1234qwer ================= { Entry 2 } Application Name: Google Chrome URL: http://mail.ru Username: 123dd Password: 1234qwer ================== { Entry 3 } Application Name: Google Chrome URL: http://cp.ketrawars.net/register Username: 123dd Password: 1234qwer ================== как получить username:password из каждой части тхт

  1. Здравствуйте, я столкнулся с проблемой. Есть программа которая выполняет данные ей команды. Но проблема в том что надо реализовать пользовательские скрипты. Иными словами, есть папка в которой лежат файлы с кодом который программа должна выполнять при соответствующей команде в отдельном процессе. Вариант с запуском готовых .exe отпал сразу. Как я себе представляю: есть код на с#, который программа компилирует и выполняет. Принимаю все варианты и советы. Заранее спасибо!

  1. Доброго времени суток, Господа. Вопрос в следующем. Как мне правильно сделать пересечение друх множеств? Вопросы следующие:1. Хочу найти пересечение двух последовательностей, которые хранят информацию о свойствах двух классов, по имени этих свойств:

  1. Дано равенство, в котором цифры заменены на буквы: rsrx + sru = rutr Найдите сколько у него решений, если различным буквам соответствуют различные цифры. может знаете менее прямолинейное решение?) а то как-то даже выглядит не хорошо.

  1. Всем привет! Из своего приложения запускаю стороннюю консольную программу и хочу передать ей строку с параметрами. Перед этим, пользователь через окно обзора выбирает несколько файлов и добавляет их в список, происходит это так:

  1. Добрый день! Имеется задача, которую, к сожалению, пока не могу реализовать: Есть текстовый файл состоящий из множества строк. В нем нужно заменить первое вхождение фразы, удовлетворяющей маске "; день недели(3 символа) число (2 символа) месяц (3 символа) год (4 символа) время (hh:mm:ss) часовой пояс (всегда +0300)" (например,"; Fri, 30 Jun 2017 09:06:53 +0300"), на второе вхождение фразы, удовлетворяющей маске. Остальные фразы не трогать. Фраза всегда начинается с символа ";" и заканчивается на "+0300". Если бы вся фраза всегда располагалась на одной строке, проблем у меня это бы не вызвало. Но фраза может начаться на одной строке, а закончиться на другой. Пример прилагаю.

  1. Всем доброго времени суток. Есть голая форма с label. При наведении мышки на нее MouseEnter Эта label перебирает из массива приветсвия на разных языках. Это вроде работает но как потом выключить этот поток я не могу

  1. Ребят, нужна помощь: У меня на кнопке такой код:

  1. Написать программу, которая определяет, попадает ли точка с заданными координатами в область, закрашенную на рисунке. Вроде бы задание элементарное, но мои познания в математики на столько скудны, что я не смог справиться с треугольником, попытался найти формулу, но у меня не вышло