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

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

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2014, 00:33   #1
Death-woolf
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 11
Восклицание Переворот диагоналей

Добрый день, есть задача - перевернуть главную и побочную диагональ без использования временных массивов. Есть ли какие предложения?
Death-woolf вне форума Ответить с цитированием
Старый 08.05.2014, 08:10   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

1) что значит "перевернуть" (пример перевора, плиз) ?
2) для учебных задач предназначен раздел "Помощь студентам"
3) Покажите, как Вы описываете и вводите вашу матрицу N x N
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.05.2014, 10:17   #3
Death-woolf
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 11
Вопрос

Вот так я заполняю рандомными значениями матрицы. А после в отведённой функции надо перевернуть побочную и главную диагональ. Я сделал с использованием массива, но мне нужно максимально оптимизировать данную программу, поэтому можно ли как-то в цикле , for, например, перевернуть эти 2 диагонали?
Код:
public class ArrayTransform {
    public static void main(String[] args){
        Transform transform = new Transform();
        transform.handler();
    }
}
class Transform{
    final private static int MATRIX_SIZE = 5;

    public void handler(){
        diagonalTransformation(createRandomData());
    }
    private int[][] createRandomData(){
        int arrayObj[][] = new int[MATRIX_SIZE][MATRIX_SIZE];
        for(int i = 0; i < MATRIX_SIZE; i++){
            for(int j = 0; j < MATRIX_SIZE; j++){
                arrayObj[i][j] = (int)(Math.random() * 9);
                System.out.print(arrayObj[i][j] + " ");
            }
            System.out.println();
        }
        return arrayObj;
    }
    private void diagonalTransformation(int[][] arrayObj){
	/*ПЕРЕВОРОТ ГЛАВНОЙ И ПОБОЧНОЙ ДИАГОНАЛИ МАТРИЦЫ*/
    }
}
Death-woolf вне форума Ответить с цитированием
Старый 08.05.2014, 10:57   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

ну, нормально.
А на первый мой вопрос ответите?
Цитата:
1) что значит "перевернуть" (пример перевора, плиз) ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.05.2014, 11:28   #5
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Проверяйте, возможны опечатки..
Код:
private void diagonalTransformation(int [][] arrayObj) {
	for(int i = 0; i < MATRIX_SIZE; i++) {
		if(i == MATRIX_SIZE-1-i) {
			continue;
		}
		int temp = arrayObj[i][i];
		arrayObj[i][i] = arrayObj[i][MATRIX_SIZE-1-i];
		arrayObj[i][MATRIX_SIZE-1-i] = temp;
	}
}
Если конечно я правильно понял задание...
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 08.05.2014, 11:35   #6
Death-woolf
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 11
По умолчанию

Вот например матрица :

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

Главная диагональ: 2,5,1,7,1
Побочная диагональ: 1,3,1,6,2

Надо в цикле их задом наперёд сделать и в этом же цикле заменить старые диагонали на перевёрнутые, что бы в итоге получилось:

1 3 4 3 2
7 7 4 6 9
5 3 1 9 5
3 3 3 5 2
1 0 7 0 2
Death-woolf вне форума Ответить с цитированием
Старый 08.05.2014, 11:41   #7
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Вот оно как !!!!!!!!
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Старый 08.05.2014, 11:50   #8
Death-woolf
Пользователь
 
Регистрация: 06.01.2012
Сообщений: 11
По умолчанию

да, в том-то и дело, через дополнительные массивы вне цикла я записывал две диагонали, переворачивал их, и потом в цикле опять вставлял в массив уже перевёрнутые. Вот очень надо оптимизировать, что бы все желательно в одном цикле было,можно ли так? Я голову сломал уже..
Death-woolf вне форума Ответить с цитированием
Старый 08.05.2014, 11:58   #9
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Не проверял:
Код:
for(int i = 0; i < MATRIX_SIZE / 2; i++) {
    int tmp = arrayObj[i][i];
    arrayObj[i][i] = arrayObj[MATRIX_SIZE - i - 1][MATRIX_SIZE - i - 1];
    arrayObj[MATRIX_SIZE - i - 1][MATRIX_SIZE - i - 1] = tmp;
    tmp = arrayObj[i][MATRIX_SIZE - i - 1];
    arrayObj[i][MATRIX_SIZE - i - 1] = arrayObj[MATRIX_SIZE - i - 1][i];
    arrayObj[MATRIX_SIZE - i - 1][i] = tmp;
}
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 08.05.2014, 12:11   #10
Bugrimov
C/C++, Java
Участник клуба
 
Аватар для Bugrimov
 
Регистрация: 28.03.2012
Сообщений: 1,679
По умолчанию

Выглядит вполне логично..
"Keep it simple" - придерживайтесь простоты!
Уильям Оккам - "Не следует множить сущее без необходимости"
Сложность - враг простоты и удобства!
Bugrimov вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
переворот матрицы Alexandr- Помощь студентам 1 24.03.2013 20:11
переворот на 180 prostonick Свободное общение 5 19.07.2012 22:09
Двойной переворот daniil123 Паскаль, Turbo Pascal, PascalABC.NET 0 21.11.2011 22:59
переворот числа (Delphi) mavar Помощь студентам 2 03.05.2011 22:00