Форум программистов, компьютерный форум CyberForum.ru

Поменять знак всех локальных максимумов данной матрицы на противоположный. - C++

Восстановить пароль Регистрация
 
Lifehouse
0 / 0 / 0
Регистрация: 12.11.2011
Сообщений: 58
26.11.2011, 21:19     Поменять знак всех локальных максимумов данной матрицы на противоположный. #1
Дана матрица размера M × N. Элемент матрицы называется ее ло-кальным максимумом, если он больше всех окружающих его элементов. Поменять знак всех локальных максимумов данной матрицы на противо-положный. При решении допускается использовать вспомогательную мат-рицу.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.11.2011, 21:19     Поменять знак всех локальных максимумов данной матрицы на противоположный.
Посмотрите здесь:

число локальных максимумов C++
C++ Найти "max" среди всех локальных минимумов данной матрицы
C++ Найти минимальный из локальных максимумов массива
Поменять знак всех локальных максимумов данной матрицы на противоположный C++
C++ заменить знак на противоположный
Создать файл целых чисел, содержащий номера всех локальных максимумов исходного файла в порядке возрастания C++
При нахождении количества локальных максимумов в последовательности for_each возвращает ноль C++
C++ В массиве найти и напечатать номера (индексы) локальных максимумов (Прокомментировать код)

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
mc.Duck
Заблокирован
26.11.2011, 21:57     Поменять знак всех локальных максимумов данной матрицы на противоположный. #2
Слегка необычная задача!
C++
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
73
74
75
76
77
78
79
80
 
#include <iostream>
#include <clocale>
#include <iomanip>
using namespace std;
 
     const int n=4; //размерность матрицы(лучше будем пользоваться квадратной, чтоб голову зря не ломать)
    
     int main()
     {
         setlocale(LC_ALL,"Russian");
         int mat[n][n];
         int mat2[n][n];                        //дополнительная матрица(нужна чисто ради просмотра значений!)
         for(int i=1;i<=n;i++)
         for(int j=1;j<=n;j++)
         {
         mat[j][i]=rand() % 9+5;
         mat2[j][i]=mat[j][i];
         }
         
         cout<<"Целевая матрица:"<<endl;
         for(int i=1;i<=n;i++)
         {
         for(int j=1;j<=n;j++)
         cout<<setw(4)<<mat[j][i];
         cout<<endl;
         }
         
         cout<<endl;cout<<endl;
         cout<<"Локальные минимумы:"<<endl;
         for(int i=1;i<=n;i++)
         for(int j=1;j<=n;j++)
         {
         bool left=true;                             //соседи элемента с четырех его сторон
         bool right=true;
         bool up=true;
         bool down=true;
         /////////////////////
         bool nb_left=true;                       //по умолчанию, все соседи больше элемента
         bool nb_right=true;
         bool nb_up=true;
         bool nb_down=true;
         /////////////////////
         if(j==1) left=false;                      //проверяем есть ли у элемента соседи с четырех его сторон
         if(j==n) right=false; 
         if(i==1) up=false; 
         if(i==n) down=false; 
         /////////////////////
         if(left==true) if(mat[j-1][i]>mat[j][i]) nb_left=false;       //проверяем на валидность соседа и его значение
         if(right==true) if(mat[j+1][i]>mat[j][i]) nb_right=false;
         if(up==true) if(mat[j][i-1]>mat[j][i]) nb_up=false;
         if(down==true) if(mat[j][i+1]>mat[j][i]) nb_down=false;
         
         if(nb_left==true && nb_right==true && nb_up==true && nb_down==true) 
         {
         cout<<"> Число "<<mat[j][i]<<"  -  X-координата: "<<j<<"    Y-координата: "<<i<<endl;       // ...и если все соседи меньше, то выводим этот элемент...
         if(j>1) if(mat2[j-1][i]<0)  mat2[j-1][i]=mat2[j-1][i]+mat2[j-1][i]*2;
         if(j>1) if(mat2[j-1][i]>0)  mat2[j-1][i]=mat2[j-1][i]-mat2[j-1][i]*2;
         if(j<n) if(mat2[j+1][i]<0)  mat2[j+1][i]=mat2[j+1][i]+mat2[j+1][i]*2;
         if(j<n) if(mat2[j+1][i]>0)  mat2[j+1][i]=mat2[j+1][i]-mat2[j+1][i]*2;
         
         if(i>1) if(mat2[j][i-1]<0)  mat2[j][i-1]=mat2[j][i-1]+mat2[j][i-1]*2;
         if(i>1) if(mat2[j][i-1]>0)  mat2[j][i-1]=mat2[j][i-1]-mat2[j][i-1]*2;
         if(i<n) if(mat2[j][i+1]<0)  mat2[j][i+1]=mat2[j][i+1]+mat2[j][i+1]*2;
         if(i<n) if(mat2[j][i+1]>0)  mat2[j][i+1]=mat2[j][i+1]-mat2[j][i+1]*2;
                          }
         }
         cout<<endl;cout<<endl;
         
         cout<<"Исходная матрица:"<<endl;
         for(int i=1;i<=n;i++)
         {
         for(int j=1;j<=n;j++)
         cout<<setw(4)<<mat2[j][i];
         cout<<endl;
         }
         
cin.get();
//system("Pause");
 }
Единственное, что размерность матрицы не M x N, n на n. Но, думаю, тебе это будет очень легко исправить!
Lifehouse
0 / 0 / 0
Регистрация: 12.11.2011
Сообщений: 58
27.11.2011, 13:03  [ТС]     Поменять знак всех локальных максимумов данной матрицы на противоположный. #3
spasibo )
Yandex
Объявления
27.11.2011, 13:03     Поменять знак всех локальных максимумов данной матрицы на противоположный.
Ответ Создать тему
Опции темы

Текущее время: 12:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru