Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > .NET для новичков > найти максимальный элемент в каждом столбце и мини


Автор: ganja34 31.1.2011, 07:14
ребята, помогите пожалуйста, нужно задать двумерный массив(пользователем вводится кол-во столбцов и строк и сами элементы массива). найти максимальный элемент в каждом столбце и минимальный в каждой строке и заменить их нулями. затем вывести исходный и преобразованный массив. у меня не получается.... заранее спасибо smile
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[,] mas;
            int N1;
            int N2;
            Console.WriteLine("Укажите количество строк матрицы:");
            N1 = int.Parse(Console.ReadLine());
            Console.WriteLine("Укажите количество столбцов матрицы:");
            N2 = int.Parse(Console.ReadLine());


            mas = new int[N1, N2];
            int i;
            int j;
            for (i = 0; i < N1; i++)
            {
                Console.WriteLine("строка" + i + ": ");
                for (j = 0; j < N2; j++)
                {
                    Console.Write(j + "=");
                    mas[i, j] = int.Parse(Console.ReadLine());
                }
            }

            //вывод исходной
            Console.WriteLine("Исходная матрица");
            for (int iv = 0; iv < N1; iv++)
            {
                for (int jv = 0; jv < N2; jv++)
                {
                    Console.Write("  " + mas[iv, jv]);
                }
                Console.WriteLine();
            }

            int minst = mas[0, 0];
            for (i = 0; i < N1 - 1; i++)
            {
                for (j = 0; j < N2 - 1; j++)
                {
                    if (mas[i, j] <= minst)
                    { minst = mas[i, j]; }

                }
                for (j = 0; j < N2 - 1; j++)
                {
                    if (mas[i, j] == minst)
                    { mas[i, j] = 0; }
                }
                minst = mas[i + 1, N2 - 1];
            }

            int maxstl = mas[0, 0];
            for (i = 0; i < N2 - 1; i++)
            {
                for (j = 0; j < N1 - 1; j++)
                {
                    if (mas[j, i] >= maxstl)
                    { maxstl = mas[j, i]; }

                }
                if (mas[i, j] == maxstl)
                { mas[i, j] = 0; }
            }



          Console.WriteLine("Преобразованная матрица");
            for (int iv = 0; iv < N1; iv++)
            {
                for (int jv = 0; jv < N2; jv++)
                {
                    Console.Write("  " + mas[iv, jv]);
                }
                Console.WriteLine();
            }
            Console.ReadLine();
            
        }
    }
}

Автор: Экскалупатор 31.1.2011, 08:33
Цитата(ganja34 @  31.1.2011,  06:14 Найти цитируемый пост)
у меня не получается

а что конкретно не получается?

Автор: ganja34 31.1.2011, 15:16
не получается заменить найденные минимальные и максимальные элементы на ноль...мой код работает только с квадратичной матрицей, иначе ругается, да и меняет на ноль только элемент с индексом (1,1)....

Автор: Экскалупатор 31.1.2011, 16:51
Код

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            int[,] mas = {{2,4,5,3,2,6},{4,6,7,3,4,5},{6,-5,-4,45,5,-3}};

            //вывод исходной
            Console.WriteLine("Исходная матрица");
            for (int iv = 0; iv < 3; iv++)
            {
                for (int jv = 0; jv < 6; jv++)
                {
                    Console.Write("  " + mas[iv, jv]);
                }
                Console.WriteLine();
            }

            //минимальный в строке
            int minst = 0;
            for (int i = 0; i < 3; i++)
            {
                for (int j = 0; j < 6; j++)
                {
                    if (mas[i, j] <= mas[i, minst])
                    {
                        minst = j;
                    }
                }
                mas[i, minst] = 0;
            }

            //максимальный в столбце
            int maxcolumn = 0;
            for (int i = 0; i < 6; i++)
            {
                for (int j = 0; j < 3; j++)
                {
                    if (mas[j, i] >= mas[maxcolumn, i])
                    {
                        maxcolumn = j;
                    }
                }
                mas[maxcolumn, i] = 0;
            }

            //вывод
            Console.WriteLine("Результат:");
            for (int iv = 0; iv < 3; iv++)
            {
                for (int jv = 0; jv < 6; jv++)
                {
                    Console.Write("  " + mas[iv, jv]);
                }
                Console.WriteLine();
            }
        }
    }
}

Автор: ganja34 1.2.2011, 00:07
спасибо большое)) только там надо было сделать чтобы пользователь сам вводил размерность и элементы массива

Автор: Экскалупатор 1.2.2011, 08:33
ganja34, ммм, ну объедини свой код и мой. я делал только обработку(она у тебя вроде бы не получалась), для этого вводить не обязательно.

Автор: ganja34 1.2.2011, 14:58
спасибо,  я вечером попробую

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)