Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
0 / 0 / 0
Регистрация: 06.10.2011
Сообщений: 19
1

Подсчитать количество локальных минимумов

24.03.2013, 02:30. Просмотров 1739. Ответов 7
Метки нет (Все метки)

Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него соседей. Подсчитать количество локальных минимумов заданной матрицы размером 10 на 10.
Найти сумму модулей элементов, расположенных выше главной диагонали.

Здравствуйте!Подскажите пожалуйста где ошибся,что перемудрил? Не считает количество и не находит сумму.

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
#include "math.h"
#include "iostream.h"
#include "stdlib.h"
#include "time.h"
#include <conio.h>
using namespace std;
int main()
{
const int n=10, m=10;
int arr [n][m];
bool f=true;
cout<<"Ishodnaya matrica:\n";
srand((unsigned)time(NULL));
for (int i=0;i<n;i++)
{
for (int j=0;j<m;j++)
{
arr[i][j]= -100+rand()%201;
cout<<arr[i][j]<<" ";
}
cout<<"\m";
}
cout<<"\m";
for (int i=0;i<n;i++)
for (int j=0;j<m;j++)
{
if ((i-1)>=0)
{
if (arr[i][j]>=arr[i-1][j]) f=false;
if (!(i-1<0))
if ((j-1)>=0) if (arr[i][j]>=arr[i-1][j-1]) f=false;
if (!(j>m-1))
if ((j+1)<=n) if (arr[i][j]>=arr[i-1][j+1]) f=false;
}
if (!(j+1>m-1))
{
if (arr[i][j]>=arr[i+1][j]) f=false;
if (!(j+1>m-1))
if ((j-1)>=0) if (arr[i][j]>=arr[i+1][j-1]) f=false;
if (!(i+1>n-1))
if ((j+1)<=n) if (arr[i][j]>=arr[i+1][j+1]) f=false;
if (!(i+1>n-1))
if ((j-1)>=0) if (arr[i][j]>=arr[i][j-1]) f=false;
if ((j+1)<=n) if (arr[i][j]>=arr[i][j+1]) f=false;
if (f) n;
f=true;
}
}
cout<<"Loc min="<<n<<"\m";
for (int i=0;i<n;i++)
for (int j=i;j<m;j++)
m+abs(arr[i][j]);
cout<<"Summa mod elem="<<m;
getch();
return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.03.2013, 02:30
Ответы с готовыми решениями:

Подсчитать количество локальных минимумов
всем привет есть такое задание вообще не понимаю что от меня требуется путем лазанья в интернете...

Подсчитать количество локальных минимумов матрицы
Дано матрицу . Разделить выходную матрицу на значения y=2/x, где x=1,5. Подсчитать кол-во локальных...

Подсчитать количество локальных минимумов матрицы
Дали три задачи на зачетную. С массивами у меня более менее нормально, но вот сами задания, что от...

Подсчитать количество локальных минимумов матрицы
Элементы матрицы могут быть любого типа с плавающей точкой.Размещение матрицы в динамической...

7
7 / 5 / 5
Регистрация: 24.03.2013
Сообщений: 40
24.03.2013, 07:03 2
Здравствуй, Maxshall) первое что бросается в глаза, при подсчете суммы элементов над главной диагонали, вы складываете каждый последующий элемент с переменной, которая собственно хранит размерность матрицы, мало того вы еще и присваиваете сумму.. вообще не присваиваете) переменная m в вашем случае хранит только значение размерности, к ней ни чего не прибавлялось (упаси Бог, еще что либо к ней прибавлять).
Второе..
C++
1
2
3
4
5
6
if ((i-1)>=0)
        {
            if (arr[i][j]>=arr[i-1][j]) f=false;
            if (!(i-1<0))
....
}
первая проверка и уже начинает противоречить сама себе через строчку, точнее два равносильных условия. Зачем? После этого уже не хочется дальше искать в чем проблема..
Совет: возьми листок, нарисуй матрицу, выпиши возможные варианты позиции локального минимума и для каждого отдельного случая напиши проверку, внимательно следи за счетчиками и все будет пучком)
0
4194 / 1787 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
24.03.2013, 14:00 3
Добавлено через 1 минуту
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
#include "iostream.h"
using namespace std;
void Input(int **Data, size_t n, size_t m);
size_t Count(int **Data, size_t n, size_t m);
bool Check(int **Data, size_t r, size_t c, size_t n, size_t m);
int main()
{
 int arr [10][10];
 Input(arr, 10, 10);
 std::cout<<"Эта матрица имеет "<<Count(arr, 10, 10)<<" локальных минимумов"<<std::endl;
 getch();
 return 0;
}
void Input(int **Data, size_t n, size_t m)
{
 size_t r;
 size_t c;
 std::cout<<"Введите массив:"<<std::endl;
 for (r=0; r<n; ++r)
 {
  std::cout<<r<<"-тая строка:"<<std::endl;
  for (с=0; с<m; ++с)
  {
   std::cout<<"a["<<r<<"]["<<c<<"]=";
   std::cin>>a[r][c];
   std::cout<<std::endl;   
  }
 }
}
size_t Count(int **Data, size_t n, size_t m)
{
 size_t Result;
 size_t r;
 size_t c;
 Result=0;
 for (r=0; r<n; ++r)
 {
  for (с=0; с<m; ++с)
  {
   if (Check(Data, r, c, n, m))
   {
    ++Result;
   }
  }
 }
 return Result;
}
bool Check(int **Data, size_t r, size_t c, size_t n, size_t m)
{
 int r1;
 int c1;
 for (r1=-1; r1<=1; ++r1)
 {
  if (((r+r1)>0)&&((r+r1)<n))
  {
   for (с1=-1; с1<=1; ++с1)
   {
    if ((r1!=0)||(c1!=0))
    {
     if (((c+c1)>0)&&((c+c1)<m))
     {
      if (Data[r][c]>=Data[r+r1][c+c1])
      {
       return false;
      }
     }
    }
   }
  }
 }
 return true;
}
Добавлено через 4 минуты
А это для динамического массива:
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
#include "iostream.h"
using namespace std;
void Input(int **Data, size_t n, size_t m);
void Create(int **&Data, size_t n, size_t m);
void Free(int **&Data, size_t n, size_t m);
size_t Count(int **Data, size_t n, size_t m);
bool Check(int **Data, size_t r, size_t c, size_t n, size_t m);
int main()
{
 size_t n;
 size_t m; 
 int **arr;
 std::cout<<"Введите размеры матрицы:"<<std::endl;
 std::cout<<"Количество строк=";
 std::cin>>n;
 std::cout<<"Количество столбцов=";
 std::cin>>m;
 std::cout<<std::endl;
 Create(arr, n, m);
 Input(arr, n, m);
 std::cout<<"Эта матрица имеет "<<Count(arr, n, m)<<" локальных минимумов"<<std::endl;
 Free(arr, n, m);
 getch();
 return 0;
}
void Input(int **Data, size_t n, size_t m)
{
 size_t r;
 size_t c;
 std::cout<<"Введите массив:"<<std::endl;
 for (r=0; r<n; ++r)
 {
  std::cout<<r<<"-тая строка:"<<std::endl;
  for (с=0; с<m; ++с)
  {
   std::cout<<"a["<<r<<"]["<<c<<"]=";
   std::cin>>a[r][c];
   std::cout<<std::endl;   
  }
 }
}
size_t Count(int **Data, size_t n, size_t m)
{
 size_t Result;
 size_t r;
 size_t c;
 Result=0;
 for (r=0; r<n; ++r)
 {
  for (с=0; с<m; ++с)
  {
   if (Check(arr, r, c, n, m))
   {
    ++Result;
   }
  }
 }
 return Result;
}
bool Check(int **Data, size_t r, size_t c, size_t n, size_t m)
{
 int r1;
 int c1;
 for (r1=-1; r1<=1; ++r1)
 {
  if (((r+r1)>0)&&((r+r1)<n))
  {
   for (с1=-1; с1<=1; ++с1)
   {
    if ((r1!=0)||(c1!=0))
    {
     if (((c+c1)>0)&&((c+c1)<m))
     {
      if (arr[r][c]>=arr[r+r1][c+c1])
      {
       return false;
      }
     }
    }
   }
  }
 }
 return true;
}
void Create(int **&Data, size_t n, size_t m)
{
 size_t r;
 Data=new int* [n];
 for (r=n-1; r<n; --r)
 {
  Data[r]=new int [m];
 }
}
void Free(int **&Data, size_t n, size_t m}
{
 size_t r;
 for (r=n-1; r<n; --r)
 {
  delete []Data[r];
 }
 delete []Data;
}
1
4194 / 1787 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
26.03.2013, 06:08 4
В какой версии глюки?
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
#include "iostream"
void Input(int **Data, size_t n, size_t m);
size_t Count(int **Data, size_t n, size_t m);
bool Check(int **Data, size_t r, size_t c, size_t n, size_t m);
int main()
{
 int arr [10][10];
 Input(arr, 10, 10);
 std::cout<<"Эта матрица имеет "<<Count(arr, 10, 10)<<" локальных минимумов"<<std::endl;
 getch();
 return 0;
}
void Input(int **Data, size_t n, size_t m)
{
 size_t r;
 size_t c;
 std::cout<<"Введите массив:"<<std::endl;
 for (r=0; r<n; ++r)
 {
  std::cout<<r<<"-тая строка:"<<std::endl;
  for (с=0; с<m; ++с)
  {
   std::cout<<"a["<<r<<"]["<<c<<"]=";
   std::cin>>a[r][c];
   std::cout<<std::endl;   
  }
 }
}
size_t Count(int **Data, size_t n, size_t m)
{
 size_t Result;
 size_t r;
 size_t c;
 Result=0;
 for (r=0; r<n; ++r)
 {
  for (с=0; с<m; ++с)
  {
   if (Check(Data, r, c, n, m))
   {
    ++Result;
   }
  }
 }
 return Result;
}
bool Check(int **Data, size_t r, size_t c, size_t n, size_t m)
{
 int r1;
 int c1;
 for (r1=-1; r1<=1; ++r1)
 {
  if (((r+r1)>0)&&((r+r1)<n))
  {
   for (с1=-1; с1<=1; ++с1)
   {
    if ((r1!=0)||(c1!=0))
    {
     if (((c+c1)>0)&&((c+c1)<m))
     {
      if (Data[r][c]>=Data[r+r1][c+c1])
      {
       return false;
      }
     }
    }
   }
  }
 }
 return true;
}
? Или
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include "iostream"
void Input(int **Data, size_t n, size_t m);
void Create(int **&Data, size_t n, size_t m);
void Free(int **&Data, size_t n, size_t m);
size_t Count(int **Data, size_t n, size_t m);
bool Check(int **Data, size_t r, size_t c, size_t n, size_t m);
int main()
{
 size_t n;
 size_t m; 
 int **arr;
 std::cout<<"Введите размеры матрицы:"<<std::endl;
 std::cout<<"Количество строк=";
 std::cin>>n;
 std::cout<<"Количество столбцов=";
 std::cin>>m;
 std::cout<<std::endl;
 Create(arr, n, m);
 Input(arr, n, m);
 std::cout<<"Эта матрица имеет "<<Count(arr, n, m)<<" локальных минимумов"<<std::endl;
 Free(arr, n, m);
 getch();
 return 0;
}
void Input(int **Data, size_t n, size_t m)
{
 size_t r;
 size_t c;
 std::cout<<"Введите массив:"<<std::endl;
 for (r=0; r<n; ++r)
 {
  std::cout<<r<<"-тая строка:"<<std::endl;
  for (с=0; с<m; ++с)
  {
   std::cout<<"a["<<r<<"]["<<c<<"]=";
   std::cin>>a[r][c];
   std::cout<<std::endl;   
  }
 }
}
size_t Count(int **Data, size_t n, size_t m)
{
 size_t Result;
 size_t r;
 size_t c;
 Result=0;
 for (r=0; r<n; ++r)
 {
  for (с=0; с<m; ++с)
  {
   if (Check(arr, r, c, n, m))
   {
    ++Result;
   }
  }
 }
 return Result;
}
bool Check(int **Data, size_t r, size_t c, size_t n, size_t m)
{
 int r1;
 int c1;
 for (r1=-1; r1<=1; ++r1)
 {
  if (((r+r1)>0)&&((r+r1)<n))
  {
   for (с1=-1; с1<=1; ++с1)
   {
    if ((r1!=0)||(c1!=0))
    {
     if (((c+c1)>0)&&((c+c1)<m))
     {
      if (arr[r][c]>=arr[r+r1][c+c1])
      {
       return false;
      }
     }
    }
   }
  }
 }
 return true;
}
void Create(int **&Data, size_t n, size_t m)
{
 size_t r;
 Data=new int* [n];
 for (r=n-1; r<n; --r)
 {
  Data[r]=new int [m];
 }
}
void Free(int **&Data, size_t n, size_t m}
{
 size_t r;
 for (r=n-1; r<n; --r)
 {
  delete []Data[r];
 }
 delete []Data;
}
?

Добавлено через 24 минуты
Я кажется понял, проблема в первой версии. Протестировано:
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
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
#include <iostream>
void Input(int **Data, size_t n, size_t m);
void Create(int **&Data, size_t n, size_t m);
void Free(int **&Data, size_t n, size_t m);
size_t Count(int **Data, size_t n, size_t m);
bool Check(int **Data, size_t r, size_t c, size_t n, size_t m);
int main()
{
 size_t n;
 size_t m; 
 int **arr;
 std::cout<<"Введите размеры матрицы:"<<std::endl;
 std::cout<<"Количество строк=";
 std::cin>>n;
 std::cout<<"Количество столбцов=";
 std::cin>>m;
 std::cout<<std::endl;
 Create(arr, n, m);
 Input(arr, n, m);
 std::cout<<"Эта матрица имеет "<<Count(arr, n, m)<<" локальных минимумов"<<std::endl;
 Free(arr, n, m);
 getch();
 return 0;
}
void Input(int **Data, size_t n, size_t m)
{
 size_t r;
 size_t c;
 std::cout<<"Введите массив:"<<std::endl;
 for (r=0; r<n; ++r)
 {
  std::cout<<r<<"-тая строка:"<<std::endl;
  for (c=0; c<m; ++c)
  {
   std::cout<<"a["<<r<<"]["<<c<<"]=";
   std::cin>>Data[r][c];
   std::cout<<std::endl;   
  }
 }
}
size_t Count(int **Data, size_t n, size_t m)
{
 size_t Result;
 size_t r;
 size_t c;
 Result=0;
 for (r=0; r<n; ++r)
 {
  for (c=0; c<m; ++c)
  {
   if (Check(Data, r, c, n, m))
   {
    ++Result;
   }
  }
 }
 return Result;
}
bool Check(int **Data, size_t r, size_t c, size_t n, size_t m)
{
 int r1;
 int c1;
 for (r1=-1; r1<=1; ++r1)
 {
  if (((r+r1)>0)&&((r+r1)<n))
  {
   for (c1=-1; c1<=1; ++c1)
   {
    if ((r1!=0)||(c1!=0))
    {
     if (((c+c1)>0)&&((c+c1)<m))
     {
      if (Data[r][c]>=Data[r+r1][c+c1])
      {
       return false;
      }
     }
    }
   }
  }
 }
 return true;
}
void Create(int **&Data, size_t n, size_t m)
{
 size_t r;
 Data=new int* [n];
 for (r=n-1; r<n; --r)
 {
  Data[r]=new int [m];
 }
}
void Free(int **&Data, size_t n, size_t m)
{
 size_t r;
 for (r=n-1; r<n; --r)
 {
  delete []Data[r];
 }
 delete []Data;
}
. Первая версия не может передать статический массив массивов в функцию.
1
0 / 0 / 0
Регистрация: 06.10.2011
Сообщений: 19
26.03.2013, 13:40  [ТС] 5
Первая дает кучу ошибок.
Во второй я проблемы решал.
0
Миниатюры
Подсчитать количество локальных минимумов  
4194 / 1787 / 211
Регистрация: 24.11.2009
Сообщений: 27,563
26.03.2013, 14:08 6
Вторая должна работать. А по первой ищи передачу в параметр статического плоского массива. Плоский массив может быть также назван массивом массивов, или двумерным массивом.
1
0 / 0 / 0
Регистрация: 06.10.2011
Сообщений: 19
06.04.2013, 21:33  [ТС] 7
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
 #include "iostream.h"
#include <stddef.h>
#include <conio.h>
using namespace std;
void Input(int **Data, size_t n, size_t m);
size_t Count(int **Data, size_t n, size_t m);
bool Check(int **Data, size_t r, size_t c, size_t n, size_t m);
int main()
{
 int arr [10][10];
 void f(int arr[10][10]);
 std::cout<<"Eta matrixa imeet "<<int(arr[10][10])<<" Lokal'nih minimumov"<<std::endl;
 getch();
    return 0;
}
void Input(int **Data, size_t n, size_t m)
{
 size_t r;
 size_t c; 
 std::cout<<"Vvesite massive:"<<std::endl;
 for (r=0; r<n; ++r)
 {
  std::cout<<r<<"-taya stroka:"<<std::endl;
  for (c=0; c<m; ++c)
  {
   std::cout<<"a["<<r<<"]["<<c<<"]=";
   std::cin>>"a[r][c]";
   std::cout<<std::endl; 
  }
 }
}
size_t Count(int **Data, size_t n, size_t m)
{
 size_t Result;
 size_t r;
 size_t c;
 Result=0;
 for (r=0; r<n; ++r)
 {
  for (c=0; c<m; ++c)
  {
   if (Check(Data, r, c, n, m))
   {
    ++Result;
   }
  }
 }
 return Result;
}
bool Check(int **Data, size_t r, size_t c, size_t n, size_t m)
{
 int r1;
 int c1;
 for (r1=-1; r1<=1; ++r1)
 {
  if (((r+r1)>0)&&((r+r1)<n))
  {
   for (c1=-1; c1<=1; ++c1)
   {
    if ((r1!=0)||(c1!=0))
    {
     if (((c+c1)>0)&&((c+c1)<m))
     {
      if (Data[r][c]>=Data[r+r1][c+c1])
      {
       return false;
      }
     }
    }
   }
  }
 }
 return true;
}
0
0 / 0 / 0
Регистрация: 06.10.2011
Сообщений: 19
29.04.2013, 21:02  [ТС] 8
C++
1
2
3
4
5
6
7
for (r=0; r<n; ++r) {
   for (с=0; с<m; ++с) {
     if (Check(Data, r, c, n, m)) {
       ++Result;
     }
   }
}
Код поиска суммы? Не понятен вызов процедуры Check (как и самой процедуры), и не ясно использование прямоугольной матрицы (M x N)
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
29.04.2013, 21:02

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Подсчитать количество локальных минимумов в матрице
Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него...

Подсчитать количество локальных минимумов матрицы
Подсчитать количество локальных минимумов матрицы размерности 4х4. Локальный минимум - элемент,...

Подсчитать количество локальных минимумов матрицы
Дан двумерный массив NxN. 1. Элемент матрицы называется локальным минимумом, если он строго меньше...

Подсчитать количество локальных минимумов заданной матрицы
Ребят помогите решить задачу. Элемент матрицы называется локальным минимумом, если он строго...

Подсчитать количество локальных минимумов заданной матрицы
Элемент матрицы называется локальным минимумом, если он строго меньше всех имеющихся у него...

Подсчитать количество локальных минимумов заданной матрицы
Помогите пожалуйста решить задачку =) Элемент матрицы называется локальным минимумом, если он...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.