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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.12.2011, 12:37   #1
Vovchik123
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 30
По умолчанию найти наибольший элемент среди стоящих на главной и побочной диагоналях и поменять местами с эл-том на пересечении диагоналей (C#)

нужно найти наибольший элемент среди стоящих на главной и побочной диагоналях и поменять его местами с элементом, стоящим на пересечении этих диагоналей.
в общем с обменом у меня проблемы
Код:
namespace ConsoleApplication1
{
    class Program
    {
        public static void Main(string[] args)

        {
            int N = 5;
            Random r = new Random();
            int[,] A = new int[5, 5];
            int iNumbersCount = 100;
            int[] aNumbers = new int[iNumbersCount];
            for (int i = 0; i < aNumbers.Length; i++)
                aNumbers[i] = i;

            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    int iIndex = r.Next(iNumbersCount);
                    A[i, j] = aNumbers[iIndex];
                    aNumbers[iIndex] = aNumbers[iNumbersCount - 1];
                    iNumbersCount--;
                    Console.Write(" \t " + A[i, j]);

                }
                Console.WriteLine();

            }


            Console.WriteLine();
            int iMax = 1; int jMax = 1;

            // проход по главной диагонали
            for (int i = 0; i < N; i++)
            {
                if (A[i, i] > A[iMax, jMax])
                {
                    iMax = i; jMax = i;
                }
            }

            // проход по побочной диагонали
            for (int i = 0; i < N; i++)
            {
                if (A[i, N - 1 - i] > A[iMax, jMax])
                {
                    iMax = i; jMax = N - 1 - i;
                }
            }

            	
          // поменять местами

int MiddleIndex = (N-1) / 2;
TempElement = A[MiddleIndex, MiddleIndex];
A[MiddleIndex, MiddleIndex] = A[iMax, jMax];
A[iMax, jMax] = TempElement;

            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
    }
}
Vovchik123 вне форума Ответить с цитированием
Старый 26.12.2011, 13:19   #2
Vovchik123
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 30
По умолчанию

Вообще задание звучит так:
Дана действительная квадратная матрица порядка N(N-нечетное), все єлементі которой различны. Найти наибольший элемент среди стоящих на главной и побочной диагоналях и поменять его местами с элементом, стоящим на пересечении этих диагоналей
Вот код, но прога не делает так как нужно(
Код:
namespace ConsoleApplication1
{
    class Program
    {
        public static void Main(string[] args)

        {
            int N = 5;
            Random r = new Random();
            int[,] A = new int[5, 5];
            int iNumbersCount = 100;
            int[] aNumbers = new int[iNumbersCount];
            for (int i = 0; i < aNumbers.Length; i++)
                aNumbers[i] = i;

            for (int i = 0; i < 5; i++)
            {
                for (int j = 0; j < 5; j++)
                {
                    int iIndex = r.Next(iNumbersCount);
                    A[i, j] = aNumbers[iIndex];
                    aNumbers[iIndex] = aNumbers[iNumbersCount - 1];
                    iNumbersCount--;
                    Console.Write(" \t " + A[i, j]);

                }
                Console.WriteLine();

            }


            Console.WriteLine();
            int iMax = 1; int jMax = 1;

            // проход по главной диагонали
            for (int i = 0; i < N; i++)
            {
                if (A[i, i] > A[iMax, jMax])
                {
                    iMax = i; jMax = i;
                }
            }

            // проход по побочной диагонали
            for (int i = 0; i < N; i++)
            {
                if (A[i, N - 1 - i] > A[iMax, jMax])
                {
                    iMax = i; jMax = N - 1 - i;
                }
            }

            	
          // поменять местами

int MiddleIndex = (N-1) / 2;
int TempElement = A[MiddleIndex, MiddleIndex];
A[MiddleIndex, MiddleIndex] = A[iMax, jMax];
A[iMax, jMax] = TempElement;

            Console.Write("Press any key to continue . . . ");
            Console.ReadKey(true);
        }
    }
}
Vovchik123 вне форума Ответить с цитированием
Старый 26.12.2011, 14:53   #3
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

а в чём у Вас проблемы то? К коду, который реализует обмен - никаких претензий нет. я ошибок в нём не вижу.

есть ошибка поиска максимального элемента. начальное присвоение индексов должно быть ноль, ноль:
Код:
   int iMax = 0; int jMax = 0;
а в остальном я решением удовлетворён. (правда, не запускал).
Что Вас не устраивает в вашем решении?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 26.12.2011, 19:20   #4
Vovchik123
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 30
По умолчанию

Сергей, не делает то что нужно прога)
т.е. максимальный элемент должен стоять на пересечении диагоналей, а он не стоит
Vovchik123 вне форума Ответить с цитированием
Старый 26.12.2011, 23:35   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
т.е. максимальный элемент должен стоять на пересечении диагоналей, а он не стоит
почем не стоит? Стоит!!

только два замечания.
Первое. Не забудьте вывести матрицу ПОСЛЕ обмена:
Код:
          // поменять местами

  int MiddleIndex = (N-1) / 2;
  int TempElement = A[MiddleIndex, MiddleIndex];
  A[MiddleIndex, MiddleIndex] = A[iMax, jMax];
  A[iMax, jMax] = TempElement;

  // вывести полученную матрицу
   for (int i = 0; i < 5; i++)
   {
       for (int j = 0; j < 5; j++)  Console.Write(" \t " + A[i, j]);
                Console.WriteLine();
      }

    Console.Write("Press any key to continue . . . ");
    Console.ReadKey(true);

второе.
вы не пропустили, что "найти наибольший элемент среди стоящих на главной и побочной диагоналях "
т.е. максимальный находится не среди всех элементов матрицы, а только среди тех, которые стоят на нужных диагоналях.

p.s. меня терзают смутные сомнения... А Вы код программы самостоятельно писали?!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.12.2011, 00:01   #6
Vovchik123
Пользователь
 
Регистрация: 25.05.2011
Сообщений: 30
По умолчанию

Спасибо, я ща так рад что словами передать не могу)
З.Ы. код не сам писал)
Vovchik123 вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В целочисленной квадратной матрице наибольший элемент каждой строки поменять местами с элементом главной диагонали DesignGenius C# (си шарп) 0 18.10.2011 20:22
Найти максимум среди сумм элементов диагоналей, параллельных главной диагонали матрицы beavis1990 Общие вопросы C/C++ 4 20.08.2011 14:36
Дан двумерный массив.Найти наибольший отрицательный элемент выше побочной диагонали и наименьший положите red-white Помощь студентам 1 05.11.2010 09:51
вычислить и вывести суммы отрицательных элементов,которые росположеные на главной и побочной диагоналях; milasssska Помощь студентам 1 27.05.2010 00:08
найти наибольший и наименьший элемент матрицы B(N x M) и поменять их местами поЛотЕнчик_просТо Общие вопросы C/C++ 2 13.05.2009 12:17