Задачка на двумерные массивы [C++]
заранее спасибо. а то совсем запутался
Вот код, написан на Java. В C++ переводите сами
int[][] matrix = new int[N][N];
// здесь заполнение матрицы
// проходим по диагоналям
// индекс максимального числа
int maxRow = 0;
int maxCol = 0;
for(int i = 0; i <N; i++) {
if( matrix > matrix[maxRow][maxCol] ) {
maxRow = i;
maxCol = i;
}
if( matrix[N-1-i] > matrix[maxRow][maxCol] ) {
maxRow = i;
maxCol = N-1-i;
}
}
// значение в центре матрицы
int middle = matrix[N/2][N/2];
// обмен местами значений
matrix[N/2][N/2] = matrix[maxRow][maxCol];
matrix[maxRow][maxCol] = middle;
а вот я не понял..
и ваше решение мне практически ни о чем не говорит к сожалению((, я с явой не знаком, да я и с с++ не знаком практически.
В чём проблема? Мне за вас найти в википедии ссылку на описание что такое матрица? Что такое главное и побочная диагональ? Это элементарные понятия и человек с одним высшими должен прекрасно знать что это такое - это дают на 1-2 курсе любого универа.
Про матрицы я уже сказал - это есть везде. Главная и побочная диагональ образуют букву Х в матрице, грубо говоря. По алгоритму тоже ничего сложного - есть цикл. Вы циклом (for) пробегаетесь по всем строкам матрицы и смотрите элемент на главной и побочной диагонали. Ищете максимальный. Потом меняете местами.
Так что читайте учебник по C, смотрите на мой код. Человек неглупый должен только глядя на код понять, что если N - это размер матрицы, то new int[N][N] - это сама матрица размерами NxN. int вбиваете в гугл и находите, что это целое число. Т.е. задается целочисленная матрица размерами NxN.
Потом надо выбрать максимальное число, по умолчанию это будет число на 0 строке и 0 столбце. Далее цикл. Чтобы понять, как он работает - нарисуйте вручную матрицу на бумаге и вручную сделайте цикл - сразу увидите как он работает.
Тем более раз вы обратились за помощью. Обращение за помощью - это не значит "сделайте за меня", это направление вас по верному пути. Вы же говорите, что с языками вообще не знакомы - т.е. по сути просите написать за вас, что в это разделе не привествуется. Я могу этот код спокойно переписать на C++, но халявщиков мне в универе хватило. Так что я вам дал готовое решение на другом языке (но схожем) - вам лишь стоило потратить несколько часов (а то и дней), чтобы разобраться. Учитесь, че.
код
#include <locale.h>
#include <iostream.h>
#include <conio.h>
#include <stdio.h>
#include <string.h>
#define SIZE 5
int main ()
{
printf ("Matrix \n\n");
int matrix[SIZE][SIZE]={ {1, 10, 15, 16, 21},
{2, 9, 14, 17, 24},
{3, 8, 13, 18, 23},
{4, 7, 12, 19, 25},
{5, 6, 11, 20, 22} };
int max = matrix[0][0];
int i;
int j;
for(i = 0; i <SIZE; ++i)
{for (j = 0; j < SIZE; ++j)
{ if (max<matrix[j]&& (i=j))
max=matrix[j];
}
}
printf ("max= %d", max);
int middle = matrix[SIZE/2][SIZE/2];
matrix[SIZE/2][SIZE/2] = matrix[j];
matrix[j] = middle;
getch();
}
(пожалуйста проверьте правильно ли)
но есть проблема в выводе на экран. мне бы хотелось, наглядности ради, что бы выводилась матрица ДО и ПОСЛЕ. вставляю принтф но чушь какая то получается.
матрицы мы не изучали. не знаю в каком вузе учился ваш хирург.
где и как вы вставляете printf ?
А ещё у вас в коде i = j, а необходимо i == j. В первом случае присваивание, а во втором случае - сравнение.
Ещё, после отработки цикла у вас i и j всегда будут равны SIZE - 1.
Перепишите цикл в стиле, как я написал - запоминайте только индексы (т.е. i и j).
int max_j = 0;
for(int i = 0; i <SIZE; ++i) {
for (int j = 0; j < SIZE; ++j) {
if( matrix[max_i][max_j] < matrix[j] && (i == j || j == SIZE - i - 1 ) {
max_i = i;
max_j = j;
}
}
}
...
matrix[SIZE/2][SIZE/2] = matrix[max_i][max_j];
matrix[max_i][max_j] = middle;
Для вывода матрицы используйте что-то в стиле
for(int j = 0; j < SIZE; j++) {
printf("%d ", matrix[j]);
}
printf("\n ");
}