Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Bugrimov
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 118
#1

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

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

Добрый вечер!
Подскажите пожалуйста каким образом можно реализовать следующую задачу.
Необходимо найти все парные элементы в двумерном массиве (т.е. которых только 2) и сложить их.
Массив заполняется случайными числами...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
14.06.2013, 21:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Двумерная матрица на С++ (найти все парные элементы в двумерном массиве и сложить их) (C++):

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

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

Все парные элементы заменить на их квадраты, а не парные умножить на 2 - C++
Задача не могу зделать . нужно с помощю масива: Все парные элементы заменить их квадраты, а не парные умножить на 2. Найти сумму...

В двумерном массиве 5x7 заменить все элементы на 0 - C++
#include<iostream> #include<stdlib.h> #include<time.h> #include <Windows.h> using namespace std; void main() { ...

В двумерном массиве найти элементы, что введет пользователь и потом эти элементы сплюсовать и вывести - C++
Здравствуйте товарищи знатоки! Передомной постал такой вопрос: Надо в двумерном массиве найти элементы что введет пользователь и...

В двумерном числовом массиве все отрицательные элементы замените нулями - C++
В двумерном числовом массиве все отрицательные элементы замените нулями.

16
Valentina
68 / 68 / 3
Регистрация: 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
Bugrimov
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
xtorne21st
интересующийся
304 / 275 / 19
Регистрация: 25.09.2010
Сообщений: 1,056
15.06.2013, 17:10 #4
Цитата Сообщение от Bugrimov Посмотреть сообщение
Добрый вечер!
Подскажите пожалуйста каким образом можно реализовать следующую задачу.
Необходимо найти все парные элементы в двумерном массиве (т.е. которых только 2) и сложить их.
Массив заполняется случайными числами...
Условие слегка не ясное. Приведите пример что-ли.
0
Bugrimov
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
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 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
Bugrimov
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 118
15.06.2013, 20:10  [ТС] #7
Поясните пожалуйста код... Что передается в функцию Sum()?

Добавлено через 1 минуту
Возможно реализовать таким образом
передача в функцию указателя на массив *Arr и его размеры M и N
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 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
Bugrimov
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 118
15.06.2013, 20:16  [ТС] #9
А можно еще предусмотреть подсчет этих пар, их количество, в данном случае = 2.

Добавлено через 1 минуту
Можете коменты в ключевых моментах подписать....
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 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
Bugrimov
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 118
15.06.2013, 20:27  [ТС] #11
Вот функция Print предельна понятна. Остальные накручены, код на мой непрофессиональный взгляд трудно прочитать.

Добавлено через 1 минуту
Единственное что понятно вы очень любите рекурсию
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 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
Bugrimov
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 118
15.06.2013, 20:33  [ТС] #13
C++
1
*(*a + i)
Поясните пожалуйста эту запись
0
Thinker
Эксперт С++
4228 / 2202 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
15.06.2013, 20:37 #14
Если все строки матрицы расположить в одну строчку, то получится одномерный массив размера M*N.
*(*a + i) - i-й элемент полученного одномерного массива.
0
Bugrimov
4 / 4 / 0
Регистрация: 18.11.2012
Сообщений: 118
15.06.2013, 20:40  [ТС] #15
А для чего это? Почему не реализовать обычный двумерный массив?
А тогда вот это что
C++
1
2
*a + M*N
*a + i
0
15.06.2013, 20:40
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
15.06.2013, 20:40
Привет! Вот еще темы с ответами:

В двумерном числовом массиве все отрицательное элементы заменить нулями - C++
в двумерном числовом массиве все отрицательное элементы заменить нулями!

В двумерном массиве заменить все четные элементы на минимальный элемент матрицы - C++
Задание: В двумерном массиве заменить все четные элементы на минимальный элемент матрицы. Зарание спасибо)

В двумерном массиве вывести все элементы выше главной диагонали и ниже побочной - C++
Вообщем то задали такую задачку: В двумерном массиве вывести все элементы выше главной диагонали и ниже побочной. Но у меня получается...

Дан линейный массив целых чисел. Найти все парные элементы массива и вычислить их сумму - C++
помогите дописать сумму #include &lt;conio.h&gt; #include &lt;iostream&gt; using namespace std; int main() { int i,m, mas, q = 0; ...


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

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

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