С Новым годом! Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
3 / 3 / 5
Регистрация: 05.03.2011
Сообщений: 270
1

сумма соседей элемента в матрице

12.03.2011, 22:32. Показов 2695. Ответов 11

Author24 — интернет-сервис помощи студентам
Помогите Пожалуйста написать метод, который будет вычислять сумму соседей элемента в матрице размера n × m.
Я видел методы, сравнивающие элементы с соседями по строкам и по столбцам:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 int compareInRow(double [][] copy, int r, int c){ // Метод сравнения элемента с соседями по строке
    int result = 0;
    if ((copy[r][c] > copy[r][c-1]) && (copy[r][c] > copy[r][c+1])){ 
        result = 1;   
    } // if
    else if ((copy[r][c] < copy[r][c-1]) && (copy[r][c] < copy[r][c+1])){
        result = -1;
    } // else if
    return result; 
}// compareInRow ()
 
int compareInColumn(double [][] copy, int r, int c){ // Метод сравнения элемента с соседями по столбцу
    int result = 0;
    if ((copy[r][c] > copy[r-1][c]) && (copy[r][c] > copy[r+1][c])){ 
        result = 1;
    } // if
    else if ((copy[r][c] < copy[r-1][c]) && (copy[r][c] < copy[r+1][c])){
        result = -1;
    } // else if
    return result; 
}// compareInColumn ()
Как исходя из этого, написать нужный метод?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
12.03.2011, 22:32
Ответы с готовыми решениями:

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

Найти в массиве элементы, которые больше двух своих соседей по вертикали / горизонтали и при этом меньше двух других соседей
Помогите пожалуйста!!!задача на java решается находит в массиве A все элементы, которые...

В матрице b[n][m] найти 4 последовательных элемента, сумма которых максимальна
я что-то пытался сделать но моя подготовка еще не на столько велика :cry: кто чем сможет...

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

11
Эксперт JavaЭксперт С++
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
12.03.2011, 23:23 2
Ваши методы не рабочие.
Вот код суммы соседей
Java
1
2
3
4
5
6
7
8
9
10
11
int addition(double [][] copy, int r, int c) {
   if (r < 0 || r >= copy.length || c < 0 || c >= copy[0].length)
      throw new Exception("Индекс находится за пределами массива");
   if (c == 0)
      return copy[r][c + 1];
   else if (c == copy.length - 1)
      return copy[r][c - 1];
   else 
      return copy[r][c - 1] + copy[r][c + 1];
   return 0;
}
1
3 / 3 / 5
Регистрация: 05.03.2011
Сообщений: 270
13.03.2011, 08:48  [ТС] 3
M128K145,
Спасибо Вам большое за Помощь!!!
Как я понял, этот метод вычисляет сумму соседей элементов по строке... а как сделать так, чтобы он ещё вычислял и по столбцам?
0
Эксперт JavaЭксперт С++
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
13.03.2011, 15:36 4
Можно код сделать компактнее, но тогда пойдут бОльшие затраты памяти
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int addition(double [][] copy, int r, int c) {
   if (r < 0 || r >= copy.length || c < 0 || c >= copy[0].length)
      throw new Exception("Индекс находится за пределами массива");
   if(c > 0 && c < copy[0].length - 1 && r > 0 && copy.length)
      return copy[r][c + 1] + copy[r][c - 1] + copy[r + 1][c] + copy[r - 1][c];
   else if (c == 0 && r = 0)
      return copy[r][c + 1] + copy[r + 1][c];
   else if (c == 0 && r > 0 && r < copy.length - 1)
      return copy[r][c + 1] + copy[r + 1][c] + copy[r - 1][c];
   else if (c == 0 && r == copy.length - 1)
      return copy[r][c + 1] + copy[r - 1][c];
   else if (c > 0 && c < copy[0].length - 1 && r == 0)
      return copy[r][c - 1] + copy[r][c + 1];
   else if (c > 0 && c < copy[0].length - 1 && r == copy.length - 1)
      return copy[r][c + 1] + copy[r][c - 1] + copy[r - 1][c];
   else if (c == copy[0].length - 1 && r == 0)
      return copy[r][c - 1] + copy[r + 1][c];
   else if (c == copy[0].length - 1 && r == copy.length - 1)
      return copy[r][c - 1] + copy[r - 1][c];
   return 0;
}
1
3 / 3 / 5
Регистрация: 05.03.2011
Сообщений: 270
20.03.2011, 21:08  [ТС] 5
M128K145,
А можно ли переделать этот метод, чтобы он вычислял и выводил сумму соседей для указанного элемента?
Так получиться?:

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int addition(double [][] copy, int r, int c) {
for (i = 0; i < n; i ++) {
for (j = 0; j < m; j++) {   
if (r < 0 || r >= a.length || c < 0 || c >= a[0].length)
      throw new Exception("Индекс находится за пределами массива");
   if(c > 0 && c < a[0].length - 1 && r > 0 && a.length)
      return Sum[i][j] = a[r][c + 1] + a[r][c - 1] + a[r + 1][c] + a[r - 1][c];
   else if (c == 0 && r = 0)
      return Sum[i][j] = a[r][c + 1] + a[r + 1][c];
   else if (c == 0 && r > 0 && r < a.length - 1)
      return Sum[i][j] = a[r][c + 1] + a[r + 1][c] + a[r - 1][c];
   else if (c == 0 && r == a.length - 1)
      return Sum[i][j] = a[r][c + 1] + a[r - 1][c];
   else if (c > 0 && c < a[0].length - 1 && r == 0)
      return Sum[i][j] = a[r][c - 1] + a[r][c + 1];
   else if (c > 0 && c < a[0].length - 1 && r == a.length - 1)
      return Sum[i][j] = a[r][c + 1] + a[r][c - 1] + a[r - 1][c];
   else if (c == a[0].length - 1 && r == 0)
      return Sum[i][j] = a[r][c - 1] + a[r + 1][c];
   else if (c == a[0].length - 1 && r == a.length - 1)
      return Sum[i][j] = a[r][c - 1] + a[r - 1][c];
   return Sum[i][j]; } }
}
0
Эксперт JavaЭксперт С++
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
20.03.2011, 21:32 6
Merhaba, простите, а сейчас он что делает? Он сейчас как раз и вычисляет сумму соседей для указанного элемента, но только не выводит. В чем проблема доделать вывод?
1
3 / 3 / 5
Регистрация: 05.03.2011
Сообщений: 270
20.03.2011, 22:06  [ТС] 7
M128K145,
Проблема в том, что я не знаю, правильно ли я написал код.. Поэтому и спрашиваю у профессионала...
0
Эксперт JavaЭксперт С++
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
20.03.2011, 22:25 8
Merhaba, зачем вы добавили два цикла и в тело вложенного скопировали мой код? Я вам написал полноценный метод, который вам нужен и в нем не нужны доработки
1
3 / 3 / 5
Регистрация: 05.03.2011
Сообщений: 270
20.03.2011, 22:45  [ТС] 9
M128K145,
Мне этот метод нужен для такой программы:
Находит в матрице все элементы (распечатайте их индексы и значения), превосходящие сумму своих соседей.
Помогите Пожалуйста доделать программу!
0
Эксперт JavaЭксперт С++
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
20.03.2011, 22:54 10
берете метод из 4 поста и пишете
Java
1
2
3
4
for(i = 0; i < n; ++i)
   for(j = 0; j < m; ++j)
      if(matr[i][j] > addition(matr, i, j));
         System.out.println("matr[" + i + "][" + j + "] = " + matr[i][j]);
И метод не надо менять
1
3 / 3 / 5
Регистрация: 05.03.2011
Сообщений: 270
21.03.2011, 21:58  [ТС] 11
M128K145,
Помогите Пожалуйста имправить ошибки в коде:

Java
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
package labajavaworks3ihz;
 
import java.io.FileReader;
import java.io.IOException;
import java.util.Locale;
import java.util.Scanner;
 
 
public class WorkWithMatrix {
 
 
    public static void main(String[] args) throws IOException {
      Matrix mt = new Matrix(); 
      mt.addition(array, r, c);
      mt.findelements();
}
}
 
class Matrix{
    double [][]array;
    int n;
    int m;
 
    Matrix() throws IOException{ //Конструктор, чтение из файла размера массива и его элементов
    FileReader fin = new FileReader("input.txt"); // Чтение из файла. fin - file input
    Scanner scr = new Scanner(fin); // Чтение из файла
    n = scr.nextInt(); // строка массива
    m = scr.nextInt(); // столбец массива
    array = new double [n][m]; // вещественный элемент массива
 
    scr.useLocale(Locale.US); // использование точки в качестве разделителя
 
    for (int i = 0; i < n; i++){ // цикл, считывающий элементы массива
        for (int j = 0; j < m; j++){
            array[i][j] = scr.nextDouble();
        } // for (int j... )
    } // for (int i... )
 
    fin.close(); //Метод, который закрывает файл
 
} // constructor Matrix()
    
    double addition(double [][] array, int r, int c) throws Exception {
   if (r < 0 || r >= array.length || c < 0 || c >= array[0].length)
      throw new Exception("Индекс находится за пределами массива");
   if(c > 0 && c < array[0].length - 1 && r > 0 && array.length)
      return array[r][c + 1] + array[r][c - 1] + array[r + 1][c] + array[r - 1][c];
   else if (c == 0 && r = 0)
      return array[r][c + 1] + array[r + 1][c];
   else if (c == 0 && r > 0 && r < array.length - 1)
      return array[r][c + 1] + array[r + 1][c] + array[r - 1][c];
   else if (c == 0 && r == array.length - 1)
      return array[r][c + 1] + array[r - 1][c];
   else if (c > 0 && c < array[0].length - 1 && r == 0)
      return array[r][c - 1] + array[r][c + 1];
   else if (c > 0 && c < array[0].length - 1 && r == array.length - 1)
      return array[r][c + 1] + array[r][c - 1] + array[r - 1][c];
   else if (c == array[0].length - 1 && r == 0)
      return array[r][c - 1] + array[r + 1][c];
   else if (c == array[0].length - 1 && r == array.length - 1)
      return array[r][c - 1] + array[r - 1][c];
   return 0;
}
    
    double findelements(int i; int j ){
        for(i = 0; i < n; ++i)
   for(j = 0; j < m; ++j)
      if(array[i][j] > addition(array, i, j));
         System.out.println("array[" + i + "][" + j + "] = " + array[i][j]);
    }
} // class Matrix
0
Эксперт JavaЭксперт С++
8384 / 3617 / 419
Регистрация: 03.07.2009
Сообщений: 10,709
21.03.2011, 22:26 12
Прошу прощения, в коде из четвертого поста есть пара опечаток, вот исправление
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int addition(double [][] copy, int r, int c) {
   if (r < 0 || r >= copy.length || c < 0 || c >= copy[0].length)
      throw new Exception("Индекс находится за пределами массива");
   if(c > 0 && c < copy[0].length - 1 && r > 0 && r < copy.length - 1)
      return copy[r][c + 1] + copy[r][c - 1] + copy[r + 1][c] + copy[r - 1][c];
   else if (c == 0 && r == 0)
      return copy[r][c + 1] + copy[r + 1][c];
   else if (c == 0 && r > 0 && r < copy.length - 1)
      return copy[r][c + 1] + copy[r + 1][c] + copy[r - 1][c];
   else if (c == 0 && r == copy.length - 1)
      return copy[r][c + 1] + copy[r - 1][c];
   else if (c > 0 && c < copy[0].length - 1 && r == 0)
      return copy[r][c - 1] + copy[r][c + 1];
   else if (c > 0 && c < copy[0].length - 1 && r == copy.length - 1)
      return copy[r][c + 1] + copy[r][c - 1] + copy[r - 1][c];
   else if (c == copy[0].length - 1 && r == 0)
      return copy[r][c - 1] + copy[r + 1][c];
   else if (c == copy[0].length - 1 && r == copy.length - 1)
      return copy[r][c - 1] + copy[r - 1][c];
   return 0;
}
Вот код без ошибок:
Java
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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import java.io.FileReader;
import java.io.IOException;
import java.util.Locale;
import java.util.Scanner;
 
public class Main {
 
   public static void main(String[] args) throws Exception {
      Matrix mt = new Matrix();
      mt.findelements();
   }
}
 
class Matrix {
   private double[][] array;
   private int n;
   private int m;
 
   public Matrix() throws IOException { // Конструктор, чтение из файла размера
                                        // массива
      // и его элементов
      FileReader fin = new FileReader("input.txt"); // Чтение из файла. fin -
                                                    // file input
      Scanner scr = new Scanner(fin); // Чтение из файла
      n = scr.nextInt(); // строка массива
      m = scr.nextInt(); // столбец массива
      array = new double[n][m]; // вещественный элемент массива
 
      scr.useLocale(Locale.US); // использование точки в качестве разделителя
 
      for (int i = 0; i < n; i++) { // цикл, считывающий элементы массива
         for (int j = 0; j < m; j++) {
            array[i][j] = scr.nextDouble();
         } // for (int j... )
      } // for (int i... )
 
      fin.close(); // Метод, который закрывает файл
 
   } // constructor Matrix()
 
   private double addition(double[][] array, int r, int c) throws Exception {
      if (r < 0 || r >= array.length || c < 0 || c >= array[0].length)
         throw new Exception("Индекс находится за пределами массива");
      if (c > 0 && c < array[0].length - 1 && r > 0 && r < array.length - 1)
         return array[r][c + 1] + array[r][c - 1] + array[r + 1][c]
               + array[r - 1][c];
      else if (c == 0 && r == 0)
         return array[r][c + 1] + array[r + 1][c];
      else if (c == 0 && r > 0 && r < array.length - 1)
         return array[r][c + 1] + array[r + 1][c] + array[r - 1][c];
      else if (c == 0 && r == array.length - 1)
         return array[r][c + 1] + array[r - 1][c];
      else if (c > 0 && c < array[0].length - 1 && r == 0)
         return array[r][c - 1] + array[r][c + 1];
      else if (c > 0 && c < array[0].length - 1 && r == array.length - 1)
         return array[r][c + 1] + array[r][c - 1] + array[r - 1][c];
      else if (c == array[0].length - 1 && r == 0)
         return array[r][c - 1] + array[r + 1][c];
      else if (c == array[0].length - 1 && r == array.length - 1)
         return array[r][c - 1] + array[r - 1][c];
      return 0;
   }
 
   public void findelements() throws Exception {
      int i, j;
      for (i = 0; i < n; ++i)
         for (j = 0; j < m; ++j)
            if (array[i][j] > addition(array, i, j))
               System.out.println("array[" + i + "][" + j + "] = "
                     + array[i][j]);
   }
} // class Matrix
0
21.03.2011, 22:26
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.03.2011, 22:26
Помогаю со студенческими работами здесь

Функция для подсчета соседей в матрице
При написании игры &quot;Жизнь&quot; использую следующую функцию для подсчета соседей: for (int i = 1; i &lt;...

В матрице найти все элементы наименьшие среди своих соседей
Нужно решить пару задач к зачету:1)отсортировать четные элементы одномерного числового массива на...

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

В прямоугольной матрице поменять местами элементы четных и нечетных столбцов-соседей.
В прямоугольной матрице поменять местами элементы четных и нечетных столбцов-соседей. var ...


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

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