Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.12.2012, 21:25   #1
fifa068
 
Регистрация: 17.12.2012
Сообщений: 4
По умолчанию матрицы.

здравствуйте. помогите разобрать задачу. условие- Дана матрица A(n,n). Найти максимальный элемент на главной и побочной диагоналях. использовать методы : обычный метод для вывода матрицы по строкам с выравниванием, обычный метод для вычисления первой функции с возвратом значения через тип возвращаемого параметра, обычный метод для вычисления второй функции с возвратом значения через модификатор out. сам код-
Код:
using System;
class Program
    {
        static void Main(string[] args)
        {
            Console.Write("Enter n: ");
            int n = Convert.ToInt32(Console.ReadLine());
            int[,] matrix = new int[n, n];
            Random rand = new Random((int)DateTime.Now.Ticks);
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    matrix[i, j] = rand.Next(0, 10);
                }
            }
            Console.WriteLine("Matrix: ");
            PrintMatrix(matrix);
            int mainMax = MaxElementMain(matrix);
            int secMax;
            MaxElementSecondary(matrix, out secMax);
            Console.WriteLine("Main max = {0}", mainMax);
            Console.WriteLine("Secondary max = {0}", secMax);
        }
 
        public static void PrintMatrix(int[,] matrix)
        {
            int n = (int)Math.Sqrt(matrix.Length);
            for (int i = 0; i < n; i++)
            {
                for (int j = 0; j < n; j++)
                {
                    Console.Write(matrix[i, j] + " ");
                }
                Console.WriteLine();
            }
        }
 
        public static int MaxElementMain(int[,] matrix)
        {
            int max = int.MinValue;
            int n = (int)Math.Sqrt(matrix.Length);
            for (int i = 0; i < n; i++)
            {
                if (matrix[i, i] > max)
                {
                    max = matrix[i, i];
                }
            }
            return max;
        }
 
        public static void MaxElementSecondary(int[,] matrix, out int max)
        { 
            max = int.MinValue;
            int n = (int)Math.Sqrt(matrix.Length);
            for (int i = n - 1; i >=0; i--)
            {
                if (matrix[n - i - 1, i] > max)
                {
                    max = matrix[n - i - 1, i];
                }
            }           
        }
}
я так понял что первый public выводит матрицу. второй находит максимальный элемент. что делает третий тогда???
зачем нужны эти строки-
Код:
 int mainMax = MaxElementMain(matrix);
            int secMax;
            MaxElementSecondary(matrix, out secMax);
            Console.WriteLine("Main max = {0}", mainMax);
            Console.WriteLine("Secondary max = {0}", secMax);
в последние условие вообще въехать не могу. подскажите пожалуйста. все мозги сломал
fifa068 вне форума Ответить с цитированием
Старый 17.12.2012, 21:40   #2
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
Найти максимальный элемент на главной и побочной диагоналях.
Цитата:
я так понял что первый public выводит матрицу. второй находит максимальный элемент. что делает третий тогда???
Второй находит максимальный элемент где?

Цитата:
зачем нужны эти строки-
Цитата:
Найти максимальный элемент на главной и побочной диагоналях.
Abstraction вне форума Ответить с цитированием
Старый 17.12.2012, 21:44   #3
fifa068
 
Регистрация: 17.12.2012
Сообщений: 4
По умолчанию

ну в матрице видимо.
а попроще можно как нибудь сделать эту задачу? )
fifa068 вне форума Ответить с цитированием
Старый 18.12.2012, 11:36   #4
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

Цитата:
ну в матрице видимо.
Не-а. Что такое главная диагональ? Что такое побочная диагональ?
Abstraction вне форума Ответить с цитированием
Старый 18.12.2012, 16:46   #5
fifa068
 
Регистрация: 17.12.2012
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Abstraction Посмотреть сообщение
Не-а. Что такое главная диагональ? Что такое побочная диагональ?
ааа то есть один ищет максимальный элемент на главной, другой на побочной?) и все же вопрос, можно как нибудь по другому сделать задачу? по легче?
fifa068 вне форума Ответить с цитированием
Старый 18.12.2012, 17:02   #6
Abstraction
Старожил
 
Аватар для Abstraction
 
Регистрация: 25.10.2011
Сообщений: 3,178
По умолчанию

"Полегче" - субъективный критерий. Логически, в коде почти нет лишних действий. Можно попытаться переписать его чуть иначе. Например:
Код:
public static int MaxElementMain(int[,] matrix) {
  int ret = matrix[0,0];
  for(int i=1; i<matrix.GetLength(0); ++i) if(ret<matrix[i,i]) ret = matrix[i,i];
  return ret;
}
Ещё можно попробовать нечто вроде:
Код:
public static IEnumerable MatrixTrace(int[,] matrix){
  for(int i=0; i<matrix.GetLength(0); ++i) yield return matrix[i,i];
}

public static int MaxElementMain(int[,] matrix){
  return MatrixTrace(matrix).Max();
}
Abstraction вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перекодировать консолевкий код под оконное приложение в Билдер 6. Решаю матрицы Матрицы g.e.s Общие вопросы C/C++ 0 18.11.2012 20:21
В каждой строке матрицы А(n*n) найти наибольший и наименьший элементы матрицы и поменять их местами saha1994 Паскаль, Turbo Pascal, PascalABC.NET 2 15.05.2012 20:38
Первый элемент - размерность матрицы, остальные образуют строки этой матрицы Anastasiya_Pot Помощь студентам 2 10.04.2012 09:46
Язык СИ! Динамическое выделение памяти под массивы и матрицы, передача матрицы в функции Андрей! Общие вопросы C/C++ 33 31.01.2012 22:07
На главную диагональ матрицы поместить наибольшие элементы этой матрицы mivel Помощь студентам 2 23.12.2009 21:19