Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/18: Рейтинг темы: голосов - 18, средняя оценка - 4.56
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 118
1

Двумерная матрица на С++ (найти все парные элементы в двумерном массиве и сложить их)

14.06.2013, 21:57. Показов 3306. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер!
Подскажите пожалуйста каким образом можно реализовать следующую задачу.
Необходимо найти все парные элементы в двумерном массиве (т.е. которых только 2) и сложить их.
Массив заполняется случайными числами...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.06.2013, 21:57
Ответы с готовыми решениями:

Найти все парные элементы в двумерном массиве и сложить их
Добрый вечер! Подскажите пожалуйста каким образом можно реализовать следующую задачу. Необходимо...

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

В двумерном массиве найти все элементы выше главной диагонали
Дан двумерный массив 10 на 10 найти все элементы вышей главной диагонали.

В двумерном массиве заменить все элементы, кратные 3, на 1 и найти их количество
В двумерном массиве В(7,8) заменить все элементы кратные 3 на 1 и найти их количество пожалуйста!!!

16
70 / 70 / 13
Регистрация: 13.05.2012
Сообщений: 130
14.06.2013, 22:44 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
#include<iostream>
using namespace std;
const int c=10;
int main()
{
    int a[c][c];
setlocale (LC_CTYPE,"rus");
cout<<"Введите размерность матрицы: \n";
int r,m;
cin>>r;
cin>>m;
 
 
for( int i=0;i<r;i++)
  for( int j=0;j<m;j++)
  {cout<<"Введите элемент матрицы a["<<i<<"]["<<j<<"]:\n";
cin>>a[i][j];
}
double sum=0;
cout<<"Данная матрица имеет такие положительные элементы:"<<endl;
for( int i=0;i<r;i++)
  for( int j=0;j<m;j++)
  {
      if(a[i][j]%2==0)
      {
          cout<<"a["<<i<<"]["<<j<<"]="<<a[i][j]<<endl;
          sum+=a[i][j];
      }
  }
 
cout<<"Сумма положительных элементов равна: \n"<<sum<<endl;
 
 
  system("pause");
return 0;
}
0
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 118
15.06.2013, 16:56  [ТС] 3
C++
1
if(a[i][j]%2==0)
Причем тут это. Я имел в виду нахождение в двумерном массиве 2-х одинаковых элементов. Просто бывают такие случаи когда их три, четыре... А Ваше условие проверяет значение элемента на кратность 2-м.
Кто-нибудь сталкивался с подобной проблемой... Укажите путь.

Добавлено через 17 часов 25 минут
Неужели никто не сможет помочь???
0
интересующийся
311 / 282 / 93
Регистрация: 25.09.2010
Сообщений: 1,056
15.06.2013, 17:10 4
Цитата Сообщение от Bugrimov Посмотреть сообщение
Добрый вечер!
Подскажите пожалуйста каким образом можно реализовать следующую задачу.
Необходимо найти все парные элементы в двумерном массиве (т.е. которых только 2) и сложить их.
Массив заполняется случайными числами...
Условие слегка не ясное. Приведите пример что-ли.
0
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 118
15.06.2013, 20:00  [ТС] 5
Например есть двумерный массив (найти парные отрицательные элементы)
1 2 3 4 -1 0
-1 -3 -3 -3 -4 1
-2 6 -5 -2 1 7

искать только парные элементы (-1 и -2). Остальные не брать в расчет, т.е. -1+(-2) = -3.
Как это рассчитать, элементы которых один или три, или больше не брать в расчет....

Добавлено через 2 часа 32 минуты
Есть у кого-нибудь хоть какие идеи?
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.06.2013, 20:02 6
ну что вы нервничаете, задачка выеденного яйца не стоит:
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
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define M 3
#define N 5
 
void Init(int *a, int *end)
{
   if (a < end)
   {
      *a = rand() % 10 - 5;
      Init(a + 1, end);
   }
}
 
void Print(int a[M][N], int m, int n)
{
   int i, j;
   for(i = 0; i < m; ++i)
   {
      for(j = 0; j < n; ++j)
         printf("%4d", a[i][j]);
      putchar('\n');
   }
}
 
int Count(int *a, int *end, int x)
{
   return a < end ? (*a == x) + Count(a + 1, end, x) : 0;
}
 
int Search(int *a, int *end, int x)
{
   return a < end ? (*a == x) || Search(a + 1, end, x) : 0;
}
 
int Sum(int *beg, int *a, int *end)
{
   return a < end ? (Count(beg, end, *a) == 2 && !Search(beg, a - 1, *a)) * (*a) + Sum(beg, a + 1, end) : 0;
}
 
int main()
{
   int a[M][N];
   srand(time(NULL));
   Init(*a, *a + M*N);
   Print(a, M, N);
   printf("sum = %d\n", Sum(*a, *a, *a + M*N));
   return 0;
}
0
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 118
15.06.2013, 20:10  [ТС] 7
Поясните пожалуйста код... Что передается в функцию Sum()?

Добавлено через 1 минуту
Возможно реализовать таким образом
передача в функцию указателя на массив *Arr и его размеры M и N
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.06.2013, 20:10 8
лучше в таком варианте. здесь выводятся все требуемые элементы и находится их сумма:
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
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define M 3
#define N 5
 
void Init(int *a, int *end)
{
   if (a < end)
   {
      *a = rand() % 10 - 5;
      Init(a + 1, end);
   }
}
 
void Print(int a[M][N], int m, int n)
{
   int i, j;
   for(i = 0; i < m; ++i)
   {
      for(j = 0; j < n; ++j)
         printf("%4d", a[i][j]);
      putchar('\n');
   }
}
 
int Count(int *a, int *end, int x)
{
   return a < end ? (*a == x) + Count(a + 1, end, x) : 0;
}
 
int Search(int *a, int *end, int x)
{
   return a < end ? (*a == x) || Search(a + 1, end, x) : 0;
}
 
int main()
{
   int i, a[M][N], sum = 0;
   srand(time(NULL));
   Init(*a, *a + M*N);
   Print(a, M, N);
   for(i = 0; i < M*N; ++i)
      if (Count(*a, *a + M*N, *(*a + i)) == 2 && !Search(*a, *a + i, *(*a + i)))
      {
          printf("%d\n", *(*a + i));
          sum += *(*a + i);
      }
   printf("sum = %d\n", sum);
   return 0;
}
0
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 118
15.06.2013, 20:16  [ТС] 9
А можно еще предусмотреть подсчет этих пар, их количество, в данном случае = 2.

Добавлено через 1 минуту
Можете коменты в ключевых моментах подписать....
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.06.2013, 20:17 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
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define M 3
#define N 5
 
void Init(int *a, int *end)
{
   if (a < end)
   {
      *a = rand() % 10 - 5;
      Init(a + 1, end);
   }
}
 
void Print(int a[M][N], int m, int n)
{
   int i, j;
   for(i = 0; i < m; ++i)
   {
      for(j = 0; j < n; ++j)
         printf("%4d", a[i][j]);
      putchar('\n');
   }
}
 
int Count(int *a, int *end, int x)
{
   return a < end ? (*a == x) + Count(a + 1, end, x) : 0;
}
 
int Search(int *a, int *end, int x)
{
   return a < end ? (*a == x) || Search(a + 1, end, x) : 0;
}
 
int main()
{
   int i, a[M][N], sum = 0, count = 0;
   srand(time(NULL));
   Init(*a, *a + M*N);
   Print(a, M, N);
   for(i = 0; i < M*N; ++i)
      if (Count(*a, *a + M*N, *(*a + i)) == 2 && !Search(*a, *a + i, *(*a + i)))
      {
          printf("%d\n", *(*a + i));
          sum += *(*a + i);
          ++count;
      }
   printf("count = %d\n", count);
   printf("sum = %d\n", sum);
   return 0;
}
1
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 118
15.06.2013, 20:27  [ТС] 11
Вот функция Print предельна понятна. Остальные накручены, код на мой непрофессиональный взгляд трудно прочитать.

Добавлено через 1 минуту
Единственное что понятно вы очень любите рекурсию
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.06.2013, 20:30 12
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
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
#define M 3
#define N 5
 
// заполнение матрицы случайными числами
void Init(int *a, int *end)
{
   if (a < end)
   {
      *a = rand() % 10 - 5;
      Init(a + 1, end);
   }
}
 
// вывод на экран
void Print(int a[M][N], int m, int n)
{
   int i, j;
   for(i = 0; i < m; ++i)
   {
      for(j = 0; j < n; ++j)
         printf("%4d", a[i][j]);
      putchar('\n');
   }
}
 
// количество элементов со значением x с адреса a до end
int Count(int *a, int *end, int x)
{
   return a < end ? (*a == x) + Count(a + 1, end, x) : 0;
}
 
// поиск элемента со значением x с адреса a до end
int Search(int *a, int *end, int x)
{
   return a < end ? (*a == x) || Search(a + 1, end, x) : 0;
}
 
int main()
{
   int i, a[M][N], sum = 0, count = 0;
   srand(time(NULL));
   Init(*a, *a + M*N);
   Print(a, M, N);
   for(i = 0; i < M*N; ++i)
      if (Count(*a, *a + M*N, *(*a + i)) == 2 && !Search(*a, *a + i, *(*a + i)))
      {
          printf("%d\n", *(*a + i));
          sum += *(*a + i);
          ++count;
      }
   printf("count = %d\n", count);
   printf("sum = %d\n", sum);
   return 0;
}
0
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 118
15.06.2013, 20:33  [ТС] 13
C++
1
*(*a + i)
Поясните пожалуйста эту запись
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.06.2013, 20:37 14
Если все строки матрицы расположить в одну строчку, то получится одномерный массив размера M*N.
*(*a + i) - i-й элемент полученного одномерного массива.
0
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 118
15.06.2013, 20:40  [ТС] 15
А для чего это? Почему не реализовать обычный двумерный массив?
А тогда вот это что
C++
1
2
*a + M*N
*a + i
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.06.2013, 20:46 16
в этом случае будете с ним нудно париться, с полученным одномерным намного проще алгоритм записывается, видите какая короткая программа получилась.

Добавлено через 4 минуты
*a + i - адрес i-го элемента в большом одномерном массиве

вам же в другом разделе другое решение этой задачи предоставили.
1
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 118
16.06.2013, 06:29  [ТС] 17
Мне бы хотелось понимать, что происходит...
Вот мои изыскания, хотелось бы доработать...
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
/* Вычисление среднее арифметическое парных отриц. элементов */
double ArithAverage(int **Matr, int n, int m) 
{
    int summ = 0;   // Сумма
    int cr = 0;     // Количество отрицательных пар
     
    for(int i = 0; i < n; i++) 
    {
        for(int j = 0; j < m; j++) 
        {
            if(Matr[i][j] < 0)
            {   
                int count = 1;
                for(int x = 0; x < n; x++)
                {
                    for(int y = 0; y < m; y++)
                    {
                        
                        if(Matr[i][j] == Matr[x][y] && i != x && j != y)
                            count++;
                    }
                
                    if(count == 2)
                    {
                        summ += Matr[i][j];
                        cr++;
                    }
                }
            }
        }
    }
return (summ/cr);
}
Добавлено через 21 минуту
Дайте пожалуйста совет по коду.

Добавлено через 1 час 9 минут
Нужен совет знающих людей.

Добавлено через 8 часов 5 минут
Кто-нибудь сталкивался с таким
0
16.06.2013, 06:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
16.06.2013, 06:29
Помогаю со студенческими работами здесь

Как найти все максимальные элементы в двумерном массиве и их индексы
У меня только первую найдет. мне надо все индексы максимальных элементов. Program zzz; uses...

Двумерная матрица. Разместить сначала положительные элементы, а за ними - все остальные
Помогите пожалуйста написать программу с помощью void f(); В каждой строке матрицы В (4,5)...

В двумерном числовом массиве найти все элементы среди своих непосредственных соседей
в двуверном числовом массиве найти все элементы среди своих непосредственных соседей. то есть...

В двумерном массиве найти все элементы, являющиеся наибольшими среди своих соседей
В данном двумерном массиве найти все элементы, являющиеся наибольшими среди 4 своих...


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

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