Дана матрица размера N×M. Поменять местами столбцы - C#

Узнай цену своей работы

Формулировка задачи:

Есть такая вот задачка. На мой взгляд, должна работать.Компилятор выдает исключение(индекс за границы), да и сама прога работает неправильно. Что я не так делаю? Просьба объяснять поподробнее, тк я новичок и мне важно понять смысл моих ошибок. * Дана матрица размера N×M. Поменять местами столбец с номером 1|M и первый|последний из столбцов, * содержащих только положительные элементы. */
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
 
namespace ConsoleApplication2
{
    class Program
    {
        static void Show(int[,] arr)
        {
            for (int i = 0; i < arr.GetLength(0); i++)
            {
                for (int j = 0; j < arr.GetLength(1); j++)
                    Console.Write("{0}\t", arr[i, j]);
 
                Console.WriteLine();
            }
        }
 
        static void ExchangeColumn1(int[,]arr, int j)//меняем местами столбцы 
        {
            int t;
 
            for (int i = 0; i < arr.GetLength(0); i++)
            {
                t = arr[i, j];
                arr[i, j] = arr[i, 1];
                arr[i, 1] = t;
            }
        }

        static void SearchFirst(int i, int j, int[,]arr)//поиск первого положительного столбца
        {
            int k1;
            bool first;
            for (j = 0; j < arr.GetLength(0); j++)
            {
                first = true;
                for (i = 0; i < arr.GetLength(1); i++)
                {
                    if (arr[i, j] < 0)
                    {
                        first = false;
                        break;
                    }
                }
 
                if (first)
                    break;
            }
 
            if (j == 0)
                Console.WriteLine("Требуемых столбцов не нашлось.");
            else
                k1 = j;       //переменная k1 служит для запоминания первого положительного столбца
                ExchangeColumn1(arr, j);
        }
        static void SearchLast(int i, int j, int[,]arr)//ищем последний положительный столбец
        {
            int k2;
            bool last;
            for (j = arr.GetLength(1); j > 0; --j)
            {
                last = true;
                for (i = 0; i < arr.GetLength(0); i++)
                {
                    if (arr[i, j] < 0)
                    {
                        last = false;
                        break;
                    }
                }
 
                if (last)
                    break;
            }
 
            if (j == 0)
                Console.WriteLine("Требуемых столбцов не нашлось.");
            else
                k2 = j;
                ExchangeColumn1(arr, j);
        }
        static void ExchangeColumn3(int[,]arr, int m, int k1)//меняем столбец с номером М и первый положительный
        {
            int t;
 
            for (int i = 0; i < arr.GetLength(0); i++)
            {
                t = arr[i, m];
                arr[i, m] = arr[i, k1];
                arr[i, k1] = t;
            }
        }
        static void ExchangeColumn4(int[,]arr, int m, int k2)//меняем столбец с номером М и последний положительный
        {
            int t;
 
            for (int i = 0; i < arr.GetLength(0); i++)
            {
                t = arr[i, m];
                arr[i, k2] = arr[i, k2];
                arr[i, m] = t;
            }
        }
        static void ValueM (int m, int [,] arr)//вводим переменную М
        {
            Random r = new Random();
            m = r.Next(arr.GetLength(1));
            Console.WriteLine("Столбец M={0}", m);
        }
        static void Main()
        {
            int m=0;
            int k1=0;
            int k2=0;
            int i = 5;
            int j = 7;
            int[,] arr = new int[i, j];
 
            Random rand = new Random();
 
            for (i = 0; i < arr.GetLength(0); i++)
                for (j = 0; j < arr.GetLength(1); j++)
                    arr[i, j] = rand.Next(-1, 15);
            
            Console.WriteLine("Исходный массив: ");
            Show(arr);
            Console.WriteLine();
            Console.WriteLine("Полученный массив 1");
            SearchFirst(i, j, arr);
            Show(arr);
            Console.WriteLine("Полученный массив 2");
            SearchLast(i, j, arr);
            Show(arr);
            Console.WriteLine("Полученный массив 3");
            ValueM(m, arr);
            ExchangeColumn3(arr, m, k1);
            Show(arr);
            Console.WriteLine("Полученный массив 4");
            ExchangeColumn4(arr, m, k2);
            Show(arr);
 
            Console.ReadKey();
        }
    }
}

Решение задачи: «Дана матрица размера N×M. Поменять местами столбцы»

textual
Листинг программы
        static  int n = 5;
        static  int m = 7;  // Размерность матрицы  N * M
        
        static void Main()
        {
            
            int[,] arr = new int[n,m];
            int stolbec1 = 0;
            int stolbec_end=0;
 
            Random rand = new Random();
            
            Console.WriteLine("Исходный массив: \n");
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < m; j++)
                {
                   arr[i, j] = rand.Next(-2, 15);
                   Console.Write("{0}\t", arr[i,j]);
                }
                Console.WriteLine();
            }
 
            Console.WriteLine();
            Console.WriteLine("Меняем первый столбец и первый положительный\n");
            stolbec1 = FindFirst(arr); // находим первый положительный столбец
            Reverse(arr, 0, stolbec1);  // меняем первый и певый положительный столбцы
            Show(arr, n, m); // выводим массив
 
            Console.WriteLine("\n");
 
            Console.WriteLine("Меняем первый столбец и последний положительный столбец\n");
            stolbec_end = FindEnd(arr, stolbec1); // находим последний положительный столбец
            Reverse(arr, 0, stolbec_end); // меняем первый стобец и последний положительный столбец
            Show(arr, n, m); //выводим массив
 
            Console.WriteLine("\n");
 
            //меняем столбец с номером М и последний положительный
            Console.WriteLine("Меняем стобец М и последний положительный столбец, M={0} \n", m);
            stolbec_end = FindEnd(arr, stolbec1); // находим последний положительный столбец
            Reverse(arr, m-1, stolbec_end); // меняем M стобец и последний положительный столбец
            Show(arr, n, m); //выводим массив
 
            Console.ReadKey();
 
        } 
            static void Show(int[,]mass, int n, int m) // Вывод массива на экран
            {
                for (int i = 0; i < n; i++)
                {
                 for (int j = 0; j < m; j++) Console.Write("{0}\t", mass[i, j]);
                 Console.WriteLine();
                }
           }
 
            static void Reverse(int[,] arr, int chto, int nachto) // Функция замены
            {
                for (int i = 0; i < n; i++)  // меняем стобцы i|j+
                {
                    int k0 = arr[i, chto];
                    int k6 = arr[i, nachto];
                    arr[i, chto] = k6;
                    arr[i, nachto] = k0;
                }
        
            }
 
            static int FindFirst(int[,] arr) //находим первый столбец с положительным элементом;
            {
                int i;
                int stolbec=0;
                for (int j = 0; j < m; j++)  
                {
                    for (i = 0; i < n; i++) if (arr[i, j] < 0) break;
 
                    if (i == n)
                    {
                        stolbec = j; // Это будет номер первого положительного столбца
                        break;
                    }
                }
                return stolbec;
            }
 
           static int FindEnd(int [,]arr, int stolb)
           {
               int i;
               int stolbec = 0;
               for (int j = stolb; j < m; j++)  //находим последний столбец с положительным элементом;
               {
                   for (i = 0; i < n; i++) if (arr[i, j] < 0) break;
                   if (i == n) stolbec = j; // это будет номер последнего положительного столбца
               }
               return stolbec;
           }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.7 из 5
Похожие ответы