1. Пользуйтесь тегами кода. - [code] ... [/code] 2. Точно указывайте язык, название и версию компилятора (интерпретатора). 3. Название темы должно быть информативным. В описании темы указываем язык!!!
Добрый День!!! помогите Пожалуйста написать метод, который будет в целочисленной матрице заменять все элементы средним геометрическим абсолютных значений их соседей. Мой код, с добавлением "единичной" границы к матрице:
int SrGeom; int Product; for(int i = 1; i < n+1; i++){ for(int j = 1;j < m+1; j++){ Product = Math.abs(unitmatrix[i-1][j]) * Math.abs(unitmatrix[i+1][j]) * Math.abs(unitmatrix[i][j-1]) * Math.abs(unitmatrix[i][j+1]); SrGeom = (int)Math.pow(Product, 0.25); } } for (int i = 0; i < n; i++){ for (int j = 0; j < m; j++){ array[i][j] = SrGeom; } }
Помогите Пожалуйста переделать код, с подсчётом среднего геометрического через логарифмы или экспоненты и с правильной заменой
Тут делается копия исходной матрицы. Если этого не сделать - то результаты исказятся, при вычислении последующих элементов будут браться не их соседи, а уже ранее вычисленные средние геометрические. Поэтому делаем копию, и берем "соседей" оттуда, а результатами заполняем исходную матрицу.
Цитата
для чего нужен вот этот код:
В самом хорошем случае у ячейки может быть 4 соседа. Я на каждой итерации цикла Count присваиваю четырем. Считаем, что этот "самый хороший случай" произошел. А потом начинаем отрабатывать не очень хорошие:
// Первая строка выражения (остальные - аналогично, разберись сам) // Ячейка НЕ самая крайняя слева? (i > 0) ? // (до двоеточия) Да, это НЕ самая левая ячейка, домножаем произведение на модуль элемента слева // (после двоеточия) Упс. Ячейка самая левая, брать левее нельзя, выбросится исключение // из-за нарушения границ массива. Значит надо сделать 2 вещи: // 1) принять во внимание, что сомножителей на 1 меньше, чем предполагалось // 2) домножить Product все равно придется, но домножать его будем на 1-цу, чтоб ничего не изменилось
Так вот, тот код, который ты процитировал, функция Counter, как раз и делает эти 2 вещи: уменьшает число сомножителей, и возвращает 1, на которую домножается произведение. В результате выполнения всей строки у нас без всяких дополнительных "единичных границ" правильно считается произведение соседних элементов. А потом остается в извлечь корень нужной степени (степени Count), чтобы получить среднее геометрическое.