Форум программистов, компьютерный форум, киберфорум
Pascal ABC
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
0 / 0 / 0
Регистрация: 16.12.2017
Сообщений: 4
1

Найти наименьшего соседа каждой ячейки матрицы

16.12.2017, 22:06. Показов 683. Ответов 1

Author24 — интернет-сервис помощи студентам
Задача: дана матрица n x m, заполненная случайными числами. Нужно найти для каждой ячейки X наименьшего соседа (ячейка соседа -- ячейка, не отличающаяся по i и j индексами более чем на 1) и записать его в соответствующую ячейку X другой матрицы, такого же размера. Таким образом из матрицы:
1 2 3
2 3 1
3 3 1
Получится матрица
2 1 1
1 1 2
2 1 1

Проблема в поиске, по двум циклам for прогоняется вся матрица и для каждой ячейки вызывается функция findMin(i, j), где прогоняются все соседы нужной ячейки:

Pascal
1
2
3
4
5
6
7
8
9
10
11
function findMin(x:integer;y:integer):real;
var dx, dy: integer;
      _min: real;
begin
   _min:=999;
   for dx:=x-1 to x+1 do
      for dy:=y-1 to y+1 do
         if (((dx <> x) or (dy <> y)) and (dx <= X) and (dy <= Y) and (dx > 0) and (dy > 0)) then
            if (matx[dx][dy] < _min) then _min:=matx[dx][dy];
   findMin:=_min;
end;
Вызов функции происходит так:

Pascal
1
2
3
4
for i:=1 to X do
      for j:=1 to Y do begin
         maty[i][j]:=findMin(i, j);
      end;
Вывод:
5 5 -- размер матрицы
36.36 15.21 10.41 8.25 12.05
111.75 40.85 412.00 3.39 18.23
9.83 11.74 6.19 14.53 2.98
9.57 26.61 7.06 1.78 4.25
4.46 4.17 10.75 2.12 12.63

999.00 36.36 15.21 10.41 8.25
36.36 15.21 10.41 8.25 3.39
111.75 9.83 11.74 3.39 3.39
9.83 9.57 6.19 6.19 1.78
9.57 4.46 4.17 1.78 1.78

Не обрабатывается 1 и 1 ячейка, а также подбираются неверные соседи... Помогите, пожалуйста, в чём проблема?

Код ВСЕЙ программы:
Pascal
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
var
   matx: array[1..100, 1..100] of real; //2 матрицы
   maty: array[1..100, 1..100] of real;
                    X, Y: integer; //размеры матрицы
                    i, j: integer; //итераторы
                     min: real; //минимальный сосед
                     
function findMin(x:integer;y:integer):real;
var dx, dy: integer;
      _min: real;
begin
   _min:=999;
   for dx:=x-1 to x+1 do
      for dy:=y-1 to y+1 do
         if (((dx <> x) or (dy <> y)) and (dx <= X) and (dy <= Y) and (dx > 0) and (dy > 0)) then
            if (matx[dx][dy] < _min) then _min:=matx[dx][dy];
   findMin:=_min;
end;
 
begin
   randomize;
   readln(X, Y);
   for i:=1 to X do
      for j:=1 to Y do
         matx[i][j]:=random(1000)/(random(99)+1); //заполняем массив случайными вещ.числами
  for i:=1 to X do begin
      for j:=1 to Y do
         write(matx[i][j]:2:2, ' ');
         writeln();end;
   
   for i:=1 to X do
      for j:=1 to Y do begin
         maty[i][j]:=findMin(i, j);
      end;
      
   writeln();
   for i:=1 to X do begin
      for j:=1 to Y do
         write(maty[i][j]:2:2, ' ');
         writeln();end;
end.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.12.2017, 22:06
Ответы с готовыми решениями:

Найти сумму наибольшего и наименьшего из значений элементов каждой строки матрицы
Дана действительная матрица размера n*m. Найти сумму наибольшего и наименьшего из значений...

Найти сумму наибольшего и наименьшего из значений в каждой строке матрицы
Дана действительная матрица размера n на m. Получить последовательность b1,..,bn, где bk- это сумма...

Найти в каждой строке матрицы числа равные сумме наибольшего и наименьшего значения элементов строк
Нужно найти в каждой строке массива числа которые равны сумме наибольшего и наименьшего значения...

Поиск наименьшего числа матрицы, его номера ячейки и столбца
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics,...

1
0 / 0 / 0
Регистрация: 16.12.2017
Сообщений: 4
18.12.2017, 14:45  [ТС] 2
Задача была решена идеально. Проблема в том, что я совсем забыл:
Паскалю плевать на регистр! х или Х! А у меня в коде было x < X и тому подобное. Изменил названия переменных и всё заработало как часы
0
18.12.2017, 14:45
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
18.12.2017, 14:45
Помогаю со студенческими работами здесь

Определить индексы наименьшего элемента в каждой строке матрицы
В двумерном массиве Мопределить индексы наименьшего элемента в каждой строке

Определить индексы наименьшего элемента в каждой строке матрицы
1) по циклическим алгоритмам найти сумму целых положительных четных чисел, меньше 100. 2) по...

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

Для заданной матрицы получить массив, записывая в него последовательно суммы наибольшего и наименьшего элементов каждой строки.
Для заданной матрицы A(N,N) (N10) получить массив B(N), записывая в него последовательно суммы...

Динамическая матрица: найти сумму наибольшего и наименьшего элементов для каждой строки
Помогите пожалуйста Массив сформировал, заполняется с клавиатуры. Задание заключается в том, что...

Упорядочить строки матрицы по убыванию значений произведений наименьшего и наибольшего элементов каждой строки
Дана матрица чисел M*N.Упорядочить строки матрицы по убыванию значений произведений наименьшего и...


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

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