Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
0 / 0 / 0
Регистрация: 14.08.2016
Сообщений: 12
1

Отыскать в матрице противоположные элементы (например 5 и -5) и поменять их местами

11.12.2018, 01:38. Показов 1366. Ответов 6

Author24 — интернет-сервис помощи студентам
Доброго времени суток!

Нужно поменять местами в матрице противоположные элементы (например 5 и -5), с учетов перестановки элемента только один раз.

Если у кого-то есть идеи, как можно решить задачу, буду оч благодарен
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.12.2018, 01:38
Ответы с готовыми решениями:

Поменять местами в одномерном массиве противоположные по знаку элементы (например 7.5 и -7.5), с учетов перестановки каждого элемента не более одного
Не пойму как реализовать чтобы проход по массиву чтобы местами он менял противоположные по знаку...

Поменять местами в двумерном массиве противоположные элементы
кому не сложно , помогите, пожалуйста, очень надо! Заранее благодарен!!

Поменять местами равные по модулю, но противоположные по знаку элементы.
Ребят, помогите пожалуйста Задан целочисленный массив X = (x1,x2,...,xn). Если в этом массиве ...

В квадратной матрице поменять местами элементы
В квадратной матрице поменять местами элементы, симметричные относительно главной диагонали.

6
0 / 0 / 0
Регистрация: 14.08.2016
Сообщений: 12
11.12.2018, 11:16  [ТС] 3
Савсибо, но решить задачу с одномерным массивом не проблема. Загвоздка в том, что нужно работать с матрицей
0
Эксперт Pascal/Delphi
6810 / 4567 / 4819
Регистрация: 05.06.2014
Сообщений: 22,438
11.12.2018, 13:38 4
doppelganger51, 2-я ссылка?
0
Модератор
Эксперт .NET
15465 / 10711 / 2786
Регистрация: 21.04.2018
Сообщений: 31,531
Записей в блоге: 2
11.12.2018, 16:38 5
Лучший ответ Сообщение было отмечено doppelganger51 как решение

Решение

Цитата Сообщение от doppelganger51 Посмотреть сообщение
Савсибо, но решить задачу с одномерным массивом не проблема. Загвоздка в том, что нужно работать с матрицей
Посмотрите может сможете использовать эти методы расширения IndexOf для матрицы. Они аналогичны IndexOf для списка.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    /// <summary>Класс с методами расширения для матрицы</summary>
    public static class MatrixIndexOfExtension
    {
        /// <summary>Возвращает индексы строки и колонки с искомым элементом</summary>
        /// <param name="Matrix">Входная матрица</param>
        /// <returns>Кортеж с индексом строки и колонки</returns>
        static public (int Row, int Column) Rows<T>(this T[,] Matrix, T value)
        {
            if (Matrix == null) return (-1, -1); // Выход если входная ссылка на матрицу равна null
 
            for (int row = 0; row < Matrix.GetLength(0); row++) // Цикл по строкам
                for (int col = 0; col < Matrix.GetLength(1); col++) // Цикл по колонкам
                    if (value.Equals(Matrix[row, col]))
                        return (row, col); // Возвращает строку и колонку найденного элемента
            return (-1, -1); // Возврат если нет таких элементов
        }
 
        /// <summary>Возвращает индексы строки и колонки с искомым элементом с указанного индекса</summary>
        /// <param name="Matrix">Входная матрица</param>
        /// <returns>Кортеж с индексом строки и колонки</returns>
        static public (int Row, int Column) Rows<T>(this T[,] Matrix, T value, (int Row, int Column) index)
        {
            if (Matrix == null) return (-1, -1); // Выход если входная ссылка на матрицу равна null
 
            if (index.Column < Matrix.GetLength(1)) // Проверка начальной строки
                for (int col = index.Column; col < Matrix.GetLength(1); col++) // Цикл по колонкам
                if (value.Equals(Matrix[index.Row, col]))
                    return (index.Column, col); // Возвращает строку и колонку найденного элемента
 
 
            for (int row = index.Row+1; row < Matrix.GetLength(0); row++) // Цикл по строкам
                for (int col = 0; col < Matrix.GetLength(1); col++) // Цикл по колонкам
                    if (value.Equals(Matrix[row, col]))
                        return (row, col); // Возвращает строку и колонку найденного элемента
            return (-1, -1); // Возврат если нет таких элементов
        }
 
    }
Добавлено через 6 минут
Применение
C#
1
2
3
4
5
6
7
8
int[,] arr = {список элементов};
int val = arr[1,2]; // Получить элемент 
(int Row, int Column) index = arr.IndexOf(-val, (1,2)); // Найти противоположный после указанных индексов
if (index.Row >= 0) // Проверка результата
{  // Поменять на противоположные
       arr[1,2] *= -  1;
       arr [index.Row, index.Column] *= -1;
}
Добавлено через 1 час 51 минуту
Писал здесь - описка в коде. Вот правильный рабочий вариант
Методы расширения
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
    /// <summary>Класс с методами расширения для матрицы</summary>
    public static class MatrixIndexOfExtension
    {
        /// <summary>Возвращает индексы строки и колонки с искомым элементом</summary>
        /// <param name="Matrix">Входная матрица</param>
        /// <param name="value">Искомое значение</param>
        /// <returns>Кортеж с индексом строки и колонки</returns>
        static public (int Row, int Column) IndexOf<T>(this T[,] Matrix, T value)
        {
            if (Matrix == null) return (-1, -1); // Выход если входная ссылка на матрицу равна null
 
            for (int row = 0; row < Matrix.GetLength(0); row++) // Цикл по строкам
                for (int col = 0; col < Matrix.GetLength(1); col++) // Цикл по колонкам
                    if (value.Equals(Matrix[row, col]))
                        return (row, col); // Возвращает строку и колонку найденного элемента
            return (-1, -1); // Возврат если нет таких элементов
        }
 
        /// <summary>Возвращает индексы строки и колонки с искомым элементом с указанного индекса</summary>
        /// <param name="Matrix">Входная матрица</param>
        /// <param name="value">Искомое значение</param>
        /// <param name="index">Индексы строки и колонки с которых надо начать поиск</param>
        /// <returns>Кортеж с индексом строки и колонки</returns>
        static public (int Row, int Column) IndexOf<T>(this T[,] Matrix, T value, (int Row, int Column) index)
        {
            if (Matrix == null) return (-1, -1); // Выход если входная ссылка на матрицу равна null
 
            if (index.Column < Matrix.GetLength(1)) // Проверка начальной строки
                for (int col = index.Column; col < Matrix.GetLength(1); col++) // Цикл по колонкам
                    if (value.Equals(Matrix[index.Row, col]))
                        return (index.Column, col); // Возвращает строку и колонку найденного элемента
 
 
            for (int row = index.Row + 1; row < Matrix.GetLength(0); row++) // Цикл по строкам
                for (int col = 0; col < Matrix.GetLength(1); col++) // Цикл по колонкам
                    if (value.Equals(Matrix[row, col]))
                        return (row, col); // Возвращает строку и колонку найденного элемента
            return (-1, -1); // Возврат если нет таких элементов
        }
 
    }
Применение
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
    int[,] matr = { { 5, 1, 0 }, { -5, 1, 0 }, { 1, 0, -5 } };
    for (int row = 0; row < matr.GetLength(0); row++)
        for (int col = 0; col < matr.GetLength(1); col++)
        {
            int val = matr[row, col]; // Получить элемент 
            if (val == 0) continue;
            (int Row, int Column) index = matr.IndexOf(-val, (row, col)); // Найти противоположный после указанных индексов
            if (index.Row >= 0) // Проверка результата
            {  // Поменять на противоположные
                matr[row, col] *= -1;
                matr[index.Row, index.Column] *= -1;
            }
 
        }
1
0 / 0 / 0
Регистрация: 14.08.2016
Сообщений: 12
11.12.2018, 17:51  [ТС] 6
О, супер-супер! Безмерно благодарен

Еще такой вопрос. Не могли бы вы написать общий алгоритм сравнения элементов в матрицах. А то это "больная" тема... и не хочу каждый раз спрашивать решение на форуме.
0
Модератор
Эксперт .NET
15465 / 10711 / 2786
Регистрация: 21.04.2018
Сообщений: 31,531
Записей в блоге: 2
11.12.2018, 17:57 7
Цитата Сообщение от doppelganger51 Посмотреть сообщение
Не могли бы вы написать общий алгоритм сравнения элементов в матрицах
А что это такое? Чего с чем он сравнивает?
0
11.12.2018, 17:57
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.12.2018, 17:57
Помогаю со студенческими работами здесь

В квадратной матрице А(7,7) поменять местами минимальные элементы первой и третьей строк, максимальные элементы главной и побочной диагоналей
Составил программу, но похоже неправильно. При вводе пишет ошибка проверки диапазона и курсор...

В матрице поменять местами максимальный и минимальный элементы
Здравствуйте, написал программу по матрице, но складывается ощущение что что то здесь не так, прошу...

В матрице Х(n,n) поменять местами элементы на главной и побочной
парни, выручите! В матрице Х(n,n) поменять местами элементы на главной и побочной диагоналях. ...

В матрице x(k,f) поменять местами максимальный и минимальный элементы
В матрице x(k,f) поменять местами максимальный и минимальный элементы. Если минимальных и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru