21

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

да, а потім у Main у певному місці написати

B = GetB(A);
Подякували: burlakad1

22 Востаннє редагувалося olmovc (02.05.2015 20:14:44)

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

burlakad написав:
olmovc написав:

запропонуйте як повинно виглядати результат - все зроблю. пишіть...

Дякую) Уявімо,що матриця А виглядає так:

3 5 6 4 7 3 5
2 6 8 5 4 0 3
3 5 7 2 9 8 3
5 4 3 1 1 9 6

ми дивимося на значення першого та останнього елементів кожного рядку(перший елемент повинен бути меншим,ніж останній) і у матрицю В переписуємо ті елементи,у яких індекси відповідають значенню першого та останнього елементу матриці А та елементі,що знаходяться між ними,тобто матриця В повинна виглядати так:

4 7 3
8 5
2
9 6

а якщо перший елемент (першого рядку наприклад) більший за кількість елементів рядку
або останній елемент (першого рядку наприклад) менший від значення  першого елементу рядку
тоді не буде у матриці В 0 (першого) рядку так ?
9 5 6 4 7 3 0
2 6 8 5 4 0 3
3 5 7 2 9 8 3
5 4 3 1 1 9 6
---------
-null--
8 5
2
9 6

Подякували: burlakad1

23

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

olmovc написав:

а якщо перший елемент (першого рядку наприклад) більший за кількість елементів рядку
або останній елемент (першого рядку наприклад) менший від значення  першого елементу рядку
тоді не буде у матриці В 0 (першого) рядку так ?
9 5 6 4 7 3 0
2 6 8 5 4 0 3
3 5 7 2 9 8 3
5 4 3 1 1 9 6
---------
-null--
8 5
2
9 6

ні,перший і останній елементи повинні бути меншими,ніж кількість елементів у рядку,а також перший елемент повинен бути менше останнього

24

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

ось,що у мене вийшло,я трохи змінила умову,щоб  перший і останній елементи  були меншими,ніж кількість елементів у рядку,а також перший елемент  був менше останнього,але тепер не розумію,чому тут

{
                    //не зебуваємо, що нумерація з 0, тому третій стовпчик насправді 2-ий
                    B[i][j] = A[i-1, A[i, 0]-1+j ];
                }

видає помилку про те, щоб переконатись у тому,що максимальний індекс у списку менше розміру списку

using System;

namespace Ex06
{
    class Program
    {
        static int[,] A;
        static int[][] B;
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            // TODO: Implement Functionality Here
            SetA();
            ShowA();
            B=GetB(A);
            //SetB();
            ShowB();
            SortA();
            ShowA();
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
        /// <summary>
        /// Заповнити масив A
        /// </summary>
        static void SetA()
        {
            int rows, cols, fill;
            Console.Clear();
            Console.WriteLine("Введiть кiлькiсть рядкiв i стовпчикiв матрицi:");
            cols = rows = int.Parse(Console.ReadLine());
            //cols = int.Parse(Console.ReadLine());
            A = new int[rows, cols];
            // кількість рядків, кількість стовпчиків і коефіцієнт заповнення матриці A
            //Console.WriteLine("Введiть коефiцiєнт заповнення матрицi (0...100 %):");
            // fill = int.Parse(Console.ReadLine());
            fill = 100;
            Random Rnd = new Random();
            // заповнення матриці випадковими числами із заданою щільністю
            int fillcount = fill * rows * cols / 100, pos = 0;
            while (pos < fillcount)
            {
                int rpos = Rnd.Next(A.GetLength(0));
                int cpos = Rnd.Next(A.GetLength(1));
                if (A[rpos, cpos] == 0)
                {
                    A[rpos, cpos] = Rnd.Next(1, 5);
                    ++pos;
                }
            }
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    if (A[i, 0] > A[i, cols - 1])
                    {
                        int t = A[0, j];
                        A[i, 0] = A[i, cols - 1];
                        A[i, cols - 1] = t;
                    }
                    else if (A[i, 0] == A[i, cols - 1])
                    {
                        GetB(A);
                    }
                    else GetB(A);
                }
            }
        }



        static int[][] GetB(int[,] A)
        {
            int columnsAtA = A.GetLength(1);
            int[][] B = new int[columnsAtA][];

            int currentColumnsCount;

            for (int i = 0; i < columnsAtA; i++)
            {
                currentColumnsCount = A[i, columnsAtA - 1] - A[i, 0] + 1;
                B[i] = new int[currentColumnsCount-1];

                for (int j = 0; j < currentColumnsCount; j++)
                {
                    //не зебуваємо, що нумерація з 0, тому третій стовпчик насправді 2-ий
                    B[i][j] = A[i-1, A[i, 0]-1+j ];
                }
            }

            return B;
        } static void ShowA()
        {
            // вивід матриці на дисплей
            Console.WriteLine("Вмiст матрицi A:");
            for (int i = 0; i < A.GetLength(0); i++)
            {
                for (int j = 0; j < A.GetLength(1); j++)
                {
                    Console.Write("{0, 4}", A[i, j]);
                }
                Console.WriteLine();
            }
        }

        static void ShowB()
        {
            int cols = B.GetLength(1);
            int rows = B.GetLength(0);
            Console.WriteLine("---Матриця B--");
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                    Console.Write("{0, 4}", B[i][j]);

                if (B[i].Length > 0)
                    Console.WriteLine();
            }
            Console.WriteLine("---Матриця B--");
        }

        static void SortA()
        {
            for (int i = 0; i < A.GetLength(0); i++)
            {
                int rowLength = A.GetLength(1);
                int[] arrayRow = new int[rowLength];
                for (int j = 0; j < rowLength; j++)
                {
                    arrayRow[j] = A[i, j];
                }
                Array.Sort(arrayRow);
                for (int j = 0; j < rowLength; j++)
                {
                    A[i, j] = arrayRow[j];
                }
            }
        }
    }
}

25 Востаннє редагувалося vitia444 (04.05.2015 20:15:12)

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

vitia444 написав:
static int[][] GetB(int[,] A)
        {
            int columnsAtA = A.GetLength(1);
            int [][] B = new int[columnsAtA][];
 
            int currentColumnsCount;
 
            for (int i = 0; i < columnsAtA; i++)
            {
                currentColumnsCount = A[i, columnsAtA - 1] - A[i, 0] + 1;
                B[i] = new int[currentColumnsCount];
 
                for (int j = 0; j < currentColumnsCount; j++)
                {
                    //не зебуваємо, що нумерація з 0, тому третій стовпчик насправді 2-ий
                    B[i][j] = A[i, A[i, 0] - 1 + j];
                }
            }
 
            return B;
        }
burlakad написав:
        static int[][] GetB(int[,] A)
        {
           int columnsAtA = A.GetLength(1);
            int[][] B = new int[columnsAtA][];
 
            int currentColumnsCount;
 
            for (int i = 0; i < columnsAtA; i++)
            {
                currentColumnsCount = A[i, columnsAtA - 1] - A[i, 0] + 1;
                B[i] = new int[currentColumnsCount-1];
 
                for (int j = 0; j < currentColumnsCount; j++)
                {
                    //не зебуваємо, що нумерація з 0, тому третій стовпчик насправді 2-ий
                    B[i][j] = A[i-1, A[i, 0]-1+j ];
                }
            }
 
            return B;
        }

26

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

vitia444 написав:
                {
                    //не зебуваємо, що нумерація з 0, тому третій стовпчик насправді 2-ий
                    B[i][j] = A[i-1, A[i, 0]-1+j ];
                }
          

я так само записувала,така ж помилка

27

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

Так Ви ж не лише там змінили мій код

28

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

vitia444 написав:

Так Ви ж не лише там змінили мій код

навіть,якщо більше нічого не змінювати,помилка залишається

using System;

namespace Ex06
{
    class Program
    {
        static int[,] A;
        static int[][] B;
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            // TODO: Implement Functionality Here
            SetA();
            ShowA();
            GetB(A);
            ShowB();
            SortA();
            ShowA();
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
        /// <summary>
        /// Заповнити масив A
        /// </summary>
        static void SetA()
        {
            int rows, cols, fill;
            Console.Clear();
            Console.WriteLine("Введiть кiлькiсть рядкiв i стовпчикiв матрицi:");
            rows = int.Parse(Console.ReadLine());
            cols = int.Parse(Console.ReadLine());
            A = new int[rows, cols];
            // кількість рядків, кількість стовпчиків і коефіцієнт заповнення матриці A
            Console.WriteLine("Введiть коефiцiєнт заповнення матрицi (0...100 %):");
            fill = int.Parse(Console.ReadLine());
            Random Rnd = new Random();
            // заповнення матриці випадковими числами із заданою щільністю
            int fillcount = fill * rows * cols / 100, pos = 0;
            while (pos < fillcount)
            {
                int rpos = Rnd.Next(A.GetLength(0));
                int cpos = Rnd.Next(A.GetLength(1));
                if (A[rpos, cpos] == 0)
                {
                    A[rpos, cpos] = Rnd.Next(2, 10);
                    ++pos;
                }
            }
        }

        static int[][] GetB(int[,] A)
        {
            int columnsAtA = A.GetLength(1);
            int[][] B = new int[columnsAtA][];

            int currentColumnsCount;

            for (int i = 0; i < columnsAtA; i++)
            {
                currentColumnsCount = A[i, columnsAtA - 1] - A[i, 0] + 1;
                B[i] = new int[currentColumnsCount];

                for (int j = 0; j < currentColumnsCount; j++)
                {
                    //не зебуваємо, що нумерація з 0, тому третій стовпчик насправді 2-ий
                    B[i][j] = A[i-1, A[i, 0] - 1 + j];
                }
            }

            return B;
        }


        /// <summary>
        /// вивід матриці на дисплей
        /// </summary>
        static void ShowA()
        {
            // вивід матриці на дисплей
            Console.WriteLine("Вмiст матрицi A:");
            for (int i = 0; i < A.GetLength(0); i++)
            {
                for (int j = 0; j < A.GetLength(1); j++)
                {
                    Console.Write("{0, 4}", A[i, j]);
                }
                Console.WriteLine();
            }
        }

        static void ShowB()
        {
            Console.WriteLine("---Матриця B--");
            for (int i = 0; i < B.GetLength(0); i++)
            {
                for (int j = 0; j < B[i].Length; j++)
                    Console.Write("{0, 4}", B[i][j]);

                if (B[i].Length > 0)
                    Console.WriteLine();
            }
            Console.WriteLine("---Матриця B--");
        }

        static void SortA()
        {
            for (int i = 0; i < A.GetLength(0); i++)
            {
                int rowLength = A.GetLength(1);
                int[] arrayRow = new int[rowLength];
                for (int j = 0; j < rowLength; j++)
                {
                    arrayRow[j] = A[i, j];
                }
                Array.Sort(arrayRow);
                for (int j = 0; j < rowLength; j++)
                {
                    A[i, j] = arrayRow[j];
                }
            }
        }
    }
}

29 Востаннє редагувалося vitia444 (05.05.2015 14:54:01)

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

А дебажити пробували? Break Points, F10, F11?

Мені здається, я знаю де помилка, але щоб Ви поменше писали на різних формах свої прохання про допомогу - Вам потрібно навчитись мистецтву пошуку помилок.

Тому поставте десь точку зупинки, запустіть програму, поклацайте F10/F11, подивіться на значення змінних, подумайте, які вони мають бути і які вони стали, і так на кожному кроці.

30

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

vitia444 написав:

А дебажити пробували? Break Points, F10, F11?

Мені здається, я знаю де помилка, але щоб Ви поменше писали на різних формах свої прохання про допомогу - Вам потрібно навчитись мистецтву пошуку помилок.

Тому поставте десь точку зупинки, запустіть програму, поклацайте F10/F11, подивіться на значення змінних, подумайте, які вони мають бути і які вони стали, і так на кожному кроці.

Наче б то зробила так,як ви написали,тепер помилка тут

 B[i] = new int[currentColumnsCount];

переконатись  у відсутності ділення на ноль. Якась маячня

31

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

А чому при цьому дорівнює currentColumnsCount?

32

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

От Ви кажете, що перший елемент рядка менший останнього, а рандом, який заповнює матрицю, про це знає?

33

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

у тому коді що я написав потрібно тільки змінити правила заповнення матриці А. Потрібно забезпечити таке заповнення матриці як Ви окреслили.
достатньо змінити код в методі SetA
я спробую швидко надіслати...

34

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

Кожен рядок матриці A на першій і останній позиції містить індекси відповідно початку і кінця діапазону елементів рядка, які необхідно переписати у відповідний рядок матриці B. Створити матрицю B з необхідною кількістю стовпчиків у кожному рядку та переписати до неї вказані елементи з матриці A. Відсортувати кожен рядок матриці A за зростанням.

Ось такі були початкові умови якщо були зміни то напишіть Правильну умову задачі.

35

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

Спробуйте метод SetA2() = він повинен заповнити масив А випадковими числами згідно у мови задачі А

Кожен рядок матриці A на першій і останній позиції містить індекси
відповідно початку і кінця діапазону елементів рядка,


/*
Кожен рядок матриці A на першій і останній позиції містить індекси
відповідно початку і кінця діапазону елементів рядка,
які необхідно переписати у відповідний рядок матриці B.
Створити матрицю B з необхідною кількістю стовпчиків у
кожному рядку та переписати до неї вказані елементи з матриці A.
Відсортувати кожен рядок матриці A за зростанням.
 */
using System;

namespace Ex06
{
  class Program
  {
    static int[,] A;
    static int[][] B;
    public static void Main(string[] args)
    {
      Console.WriteLine("Hello World!");
      // TODO: Implement Functionality Here
      //SetA();
      SetA2();
      ShowA();
      SetB();
      ShowB();
      SortA();
      ShowA();
      Console.Write("Press any key to continue . . . ");
      Console.ReadKey(true);
    }
    
    /// <summary>
    /// Заповнить масив А згідно умови перший елемент кожного рядку......
    /// </summary>
    static void SetA2()
    {
      int rows, cols; //fill;
      Console.Clear();
      Console.WriteLine("Введiть кiлькiсть рядкiв i стовпчикiв матрицi:");
      rows = int.Parse(Console.ReadLine());
      cols = int.Parse(Console.ReadLine());
      A = new int[rows, cols];
      if ((rows < 2)||(cols < 1)) return;
      
      // кількість рядків, кількість стовпчиків і коефіцієнт заповнення матриці A
      //Console.WriteLine("Введiть коефiцiєнт заповнення матрицi (0...100 %):");
      //fill =  100;//int.Parse(Console.ReadLine());
      Random Rnd = new Random();
      // заповнення матриці випадковими числами із заданою щільністю
      for(int r = 0;r < rows;r++)
      {
        for(int c = 0;c < cols;c++)
        {
          A[r,c] = Rnd.Next(2, 10);
        }
      }
 
      int first = 0, end = 0;
      
      if (A.GetUpperBound(1) < 3) return;
      if (A.GetUpperBound(0) < 3) return;
      
      // while (first
      
      for(int r = 0;r < rows;r++)
      {
        first = A[r,0];
        end = A[r,A.GetUpperBound(1)];
  
        while((first < 2 ) &&(first > end) && (end < cols))
        {
          first =Rnd.Next(2, 10);          
        }
        if (first > A.GetUpperBound(1)) continue;
        
        A[r,0] = first;
        A[r,A.GetUpperBound(1)] = end;
        //Console.WriteLine("Rows={0}\tA[r,0]={1}\n A[r,end]={2}",r, A[r,0], A[r,end]);
      }
      
    }
    
    /// <summary>
    /// Заповнити масив A
    /// </summary>
    static void SetA()
    {
      int rows, cols, fill;
      Console.Clear();
      Console.WriteLine("Введiть кiлькiсть рядкiв i стовпчикiв матрицi:");
      rows = int.Parse(Console.ReadLine());
      cols = int.Parse(Console.ReadLine());
      A = new int[rows, cols];
      // кількість рядків, кількість стовпчиків і коефіцієнт заповнення матриці A
      Console.WriteLine("Введiть коефiцiєнт заповнення матрицi (0...100 %):");
      fill = int.Parse(Console.ReadLine());
      Random Rnd = new Random();
      // заповнення матриці випадковими числами із заданою щільністю
      int fillcount = fill * rows * cols / 100, pos = 0;
      while (pos < fillcount)
      {
        int rpos = Rnd.Next(A.GetLength(0));
        int cpos = Rnd.Next(A.GetLength(1));
        if (A[rpos, cpos] == 0)
        {
          A[rpos, cpos] = Rnd.Next(2, 10);
          ++pos;
        }
      }
    }
    
    static void SetB()
    {
      int rowsCount = A.GetLength(0);
      B = new int[rowsCount][];
      int startPos = 0, endPos = 0;
      
      for (int i = 0; i < rowsCount; i++)
      {
        int colsCount = A.GetLength(1);
        startPos =  A[i,0];
        endPos = A[i,colsCount - 1];
        int lengthRowB = endPos - startPos;
        
        if ((lengthRowB < 1)||(lengthRowB > colsCount))
        {
          B[i] = new int[0];
          continue;
        }
        
        endPos--;
        startPos--;
        
        if ((endPos >= colsCount)||(startPos >= colsCount))
        {
          B[i] = new int[0];
          continue;
        }
        
        if ((endPos < 0)||(startPos < 0))
        {
          B[i] = new int[0];
          continue;
        }
        
        B[i] = new int[lengthRowB];
        
        int count = 0;
        for (int col = startPos; col < endPos; col++)
        {
          B[i][count] = A[i,col];
          //Console.WriteLine("r={0},B={1}",i,B[i][count]);
          count++;
        }
      }
    }
    
    
    /// <summary>
    /// вивід матриці на дисплей
    /// </summary>
    static void ShowA()
    {
      // вивід матриці на дисплей
      Console.WriteLine("Вмiст матрицi A:");
      for (int i = 0; i < A.GetLength(0); i++)
      {
        for (int j = 0; j < A.GetLength(1); j++)
        {
          Console.Write("{0, 4}", A[i, j]);
        }
        Console.WriteLine();
      }
    }
    
    static void ShowB()
    {
      Console.WriteLine("---Матриця B--");
      for (int i = 0; i < B.GetLength(0); i++)
      {
        for (int j = 0; j < B[i].Length; j++)
          Console.Write("{0, 4}", B[i][j]);
        
        if (B[i].Length > 0)
          Console.WriteLine();
      }
      Console.WriteLine("---Матриця B--");
    }
    
    static void SortA()
    {
      for (int i = 0; i < A.GetLength(0); i++)
      {
        int rowLength = A.GetLength(1);
        int[] arrayRow = new int[rowLength];
        for (int j = 0; j < rowLength; j++)
        {
          arrayRow[j] = A[i,j];
        }
        Array.Sort(arrayRow);
        for (int j = 0; j < rowLength; j++)
        {
          A[i,j] = arrayRow[j];
        }
      }
    }
  }
}

36

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

olmovc написав:

Кожен рядок матриці A на першій і останній позиції містить індекси відповідно початку і кінця діапазону елементів рядка, які необхідно переписати у відповідний рядок матриці B. Створити матрицю B з необхідною кількістю стовпчиків у кожному рядку та переписати до неї вказані елементи з матриці A. Відсортувати кожен рядок матриці A за зростанням.

Ось такі були початкові умови якщо були зміни то напишіть Правильну умову задачі.

Умова залишилась такою ж,але,щоб вона виконувалась,потрібно,щоб значення першого елемента у кожному рядку матриці було меншим,ніж значення останнього елемента у рядку,а також,щоб їх значення не перевищували кількість елементів у рядку.Цю частину умови я зробила,ось код

using System;

namespace Ex06
{
    class Program
    {
        static int[,] A;
        static int[][] B;
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            // TODO: Implement Functionality Here
            SetA();
            ShowA();
            //SetB();
            //ShowB();
            SortA();
            ShowA();
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
        /// <summary>
        /// Заповнити масив A
        /// </summary>
        static void SetA()
        {
            int rows, cols, fill;
            Console.Clear();
            Console.WriteLine("Введiть кiлькiсть рядкiв i стовпчикiв матрицi:");
            cols = rows = int.Parse(Console.ReadLine());
            //cols = int.Parse(Console.ReadLine());
            A = new int[rows, cols];
            // кількість рядків, кількість стовпчиків і коефіцієнт заповнення матриці A
            //Console.WriteLine("Введiть коефiцiєнт заповнення матрицi (0...100 %):");
            // fill = int.Parse(Console.ReadLine());
            fill = 100;
            Random Rnd = new Random();
            // заповнення матриці випадковими числами із заданою щільністю
            int fillcount = fill * rows * cols / 100, pos = 0;
            while (pos < fillcount)
            {
                int rpos = Rnd.Next(A.GetLength(0));
                int cpos = Rnd.Next(A.GetLength(1));
                if (A[rpos, cpos] == 0)
                {
                    A[rpos, cpos] = Rnd.Next(2, rows + 1);
                    ++pos;
                }
            }
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    if (A[i, 0] > A[i, cols - 1])
                    {
                        int t = A[0, j];
                        A[i, 0] = A[i, cols - 1];
                        A[i, cols - 1] = t;
                    }
                //    else if (A[i, 0] == A[i, cols - 1])
                //    {
                //        SetB();
                //    }
                //    else SetB();
                }
            }
        }




        //static void SetB()
        //{
        //    //int rows = A.GetLength(0);
        //    //int cols = rows;
        //    //int i = 0;
        //    //int a = A[i, cols] - A[i, 0];
        //    //for (i = A[i, 0]; i < a; i++)
        //    //{
        //    //    for (int j = 0; j < cols; j++)
        //    //    {

        //    //        B[i][0] = A[i, A[i, 0] + i];
        //    //    }
        //    //}
        //    int rowsCount = A.GetLength(0);
        //    B = new int[rowsCount][];
        //    int startPos = 0, endPos = 0;

        //    for (int i = 0; i < rowsCount; i++)
        //    {
        //        int colsCount = A.GetLength(1);
        //        startPos = A[i, 0];
        //        endPos = A[i, colsCount - 1];
        //        int lengthRowB = endPos - startPos;

        //        if ((lengthRowB < 1) || (lengthRowB > colsCount))
        //        {
        //            B[i] = new int[0];
        //            continue;
        //        }

        //        endPos--;
        //        startPos--;

        //        if ((endPos >= colsCount) || (startPos >= colsCount))
        //        {
        //            B[i] = new int[0];
        //            continue;
        //        }

        //        if ((endPos < 0) || (startPos < 0))
        //        {
        //            B[i] = new int[0];
        //            continue;
        //        }

        //        B[i] = new int[lengthRowB];

        //        int count = 0;
        //        for (int col = startPos; col < endPos; col++)
        //        {
        //            B[i][count] = A[i, col];
        //            //Console.WriteLine("r={0},B={1}",i,B[i][count]);
        //            count++;
        //        }
        //    }

        //}


        //<summary>
        //вивід матриці на дисплей
        //</summary>
        static void ShowA()
        {
            // вивід матриці на дисплей
            Console.WriteLine("Вмiст матрицi A:");
            for (int i = 0; i < A.GetLength(0); i++)
            {
                for (int j = 0; j < A.GetLength(1); j++)
                {
                    Console.Write("{0, 4}", A[i, j]);
                }
                Console.WriteLine();
            }
        }

        //static void ShowB()
        //{
        //    int cols = B.GetLength(1);
        //    int rows = B.GetLength(0);
        //    Console.WriteLine("---Матриця B--");
        //    for (int i = 0; i < rows; i++)
        //    {
        //        for (int j = 0; j < cols; j++)
        //            Console.Write("{0, 4}", B[i][j]);

        //        if (B[i].Length > 0)
        //            Console.WriteLine();
        //    }
        //    Console.WriteLine("---Матриця B--");
        //}

        static void SortA()
        {
            for (int i = 0; i < A.GetLength(0); i++)
            {
                int rowLength = A.GetLength(1);
                int[] arrayRow = new int[rowLength];
                for (int j = 0; j < rowLength; j++)
                {
                    arrayRow[j] = A[i, j];
                }
                Array.Sort(arrayRow);
                for (int j = 0; j < rowLength; j++)
                {
                    A[i, j] = arrayRow[j];
                }
            }
        }
    }
}

а от переписати потрібні елементи у матрицю В мені так і не вдається.
наприклад,якщо матриця
А=3 4 5 3 2 6 5
    4 5 6 2 1 1 4
    5 4 3 2 2 1 6
то матриця В буде виглядати так
В=3 2 6
    1
    1 6

37

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

vitia444 написав:

От Ви кажете, що перший елемент рядка менший останнього, а рандом, який заповнює матрицю, про це знає?

знає,я вже писала змінений код вище

38

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

burlakad написав:
        /// <summary>
        /// Заповнити масив A
        /// </summary>
        static void SetA()
        {
            int rows, cols, fill;
            Console.Clear();
            Console.WriteLine("Введiть кiлькiсть рядкiв i стовпчикiв матрицi:");
            cols = rows = int.Parse(Console.ReadLine());
            //cols = int.Parse(Console.ReadLine());
            A = new int[rows, cols];
            // кількість рядків, кількість стовпчиків і коефіцієнт заповнення матриці A
            //Console.WriteLine("Введiть коефiцiєнт заповнення матрицi (0...100 %):");
            // fill = int.Parse(Console.ReadLine());
            fill = 100;
            Random Rnd = new Random();
            // заповнення матриці випадковими числами із заданою щільністю
            int fillcount = fill * rows * cols / 100, pos = 0;
            while (pos < fillcount)
            {
                int rpos = Rnd.Next(A.GetLength(0));
                int cpos = Rnd.Next(A.GetLength(1));
                if (A[rpos, cpos] == 0)
                {
                    A[rpos, cpos] = Rnd.Next(2, rows + 1);
                    ++pos;
                }
            }
            for (int i = 0; i < rows; i++)
            {
                for (int j = 0; j < cols; j++)
                {
                    if (A[i, 0] > A[i, cols - 1])
                    {
                        int t = A[0, j];
                        A[i, 0] = A[i, cols - 1];
                        A[i, cols - 1] = t;
                    }
                //    else if (A[i, 0] == A[i, cols - 1])
                //    {
                //        SetB();
                //    }
                //    else SetB();
                }
            }
        }

У вас тут помилка в алгоритмі.
1. Навіщо так заповнювати матрицю? Пройдіться по кожному елементу і кожному присвойте рандом.
2. Вам потрібно перевіряти не кожен елемент матриці, а перевіряти кожен рядок, чи в кожному рядку перший елемент менший останнього, ну і чи менші вони взагалі кількості стовпчиків.

39

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

vitia444 написав:

У вас тут помилка в алгоритмі.
1. Навіщо так заповнювати матрицю? Пройдіться по кожному елементу і кожному присвойте рандом.
2. Вам потрібно перевіряти не кожен елемент матриці, а перевіряти кожен рядок, чи в кожному рядку перший елемент менший останнього, ну і чи менші вони взагалі кількості стовпчиків.

але ж цей алгоритм працює правильно і матриця заповнюється так,як потрібно. перші елементи менше останніх і всі елементи менше кількості елементів у рядку,навіщо його змінювати,якщо потрібно лише правильно переписати їх до матриці В?

40 Востаннє редагувалося vitia444 (12.05.2015 01:55:20)

Re: Створити матрицю B та переписати до неї вказані елементи з матриці A.

using System;

namespace Ex06
{
    class Program
    {
        static int[][] A;
        static int[][] B;
        static int rowsAtA;
        static int columnsAtA;
        public static void Main(string[] args)
        {
            Console.WriteLine("Hello World!");
            // TODO: Implement Functionality Here
            FillA();
            ShowA();
            B = GetB(A);
            ShowB();
            SortA();
            ShowA();
            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
        /// <summary>
        /// Заповнити масив A
        /// </summary>
        static void FillA()
        {
            Console.Clear();
            Console.WriteLine("Введiть кiлькiсть рядкiв i стовпчикiв матрицi:");
            columnsAtA = rowsAtA = int.Parse(Console.ReadLine());
            
            Random rand = new Random();

            A = new int[rowsAtA][];
            for (int i = 0; i < rowsAtA; i++)
            {
                A[i] = new int[columnsAtA];
                for (int j = 0; j < columnsAtA; j++)
                {
                    //+1 гарантує відсутність нулів
                    A[i][j] = rand.Next(columnsAtA) + 1;
                }

                //перевірка щоб перший елемент рядка був менший останнього
                if (A[i][0] > A[i][columnsAtA - 1])
                {
                    int tmp = A[i][0];
                    A[i][0] = A[i][columnsAtA - 1];
                    A[i][columnsAtA - 1] = tmp;
                }
            }

        }

        static int[][] GetB(int[][] A)
        {
            int[][] B = new int[rowsAtA][];

            int currentColumnsCount;

            for (int i = 0; i < rowsAtA; i++)
            {
                currentColumnsCount = A[i][columnsAtA - 1] - A[i][0] + 1;
                B[i] = new int[currentColumnsCount];

                for (int j = 0; j < currentColumnsCount; j++)
                {
                    //не зебуваємо, що нумерація з 0, тому третій стовпчик насправді 2-ий
                    B[i][j] = A[i][A[i][0] - 1 + j];
                }
            }

            return B;
        }


        /// <summary>
        /// вивід матриці на дисплей
        /// </summary>
        static void ShowA()
        {
            // вивід матриці на дисплей
            Console.WriteLine("Вмiст матрицi A:");
            for (int i = 0; i < rowsAtA; i++)
            {
                for (int j = 0; j < columnsAtA; j++)
                {
                    Console.Write("{0, 4}", A[i][j]);
                }
                Console.WriteLine();
            }
        }

        static void ShowB()
        {
            Console.WriteLine("---Матриця B--");
            for (int i = 0; i < B.GetLength(0); i++)
            {
                for (int j = 0; j < B[i].Length; j++)
                    Console.Write("{0, 4}", B[i][j]);

                if (B[i].Length > 0)
                    Console.WriteLine();
            }
            Console.WriteLine("---Матриця B--");
        }

        static void SortA()
        {
            for (int i = 0; i < rowsAtA; i++)
            {
                Array.Sort(A[i]);
            }
        }
    }
}

Стосовно того, що працює правильно - ну це знаєте, все-одно що здорову людину прив'язати до інвалідного візка. Ну а що - пересуватися ж може))

P.S. NullReferenceException - це не ділення на нуль, це означає, що посилання B (а В саме як посилання на певну ділянку пам'яті інтерпретується) нікуди не вказує, а Ви з того "нікуди" хочете щось дістати.