Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 09.05.2015
Сообщений: 27

В матрице определить сумму положительных элементов и количество элементов, значение которых меньше числа Z

17.05.2015, 00:09. Показов 1569. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здраствуйте!

Надо определить суму положительных элементов и кол-во элементов, значение которых меньше числа Z. Столкнулся со следующей проблемой:
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
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
const int m=10;
const int n=10;
 
const int a=10;
const int b=18;
 
int suma(int x[]);
int elementi(int x[]);
 
int main()
{
 srand(time(NULL));
 int x[m][n];
 int i,j;
 for(i=0;i<n;i++)
 for(j=0;j<m;j++) x[i][j]=random(b-a+1)+a;
 for(i=0;i<n;i++)
 for(j=0;j<m;j++)
 for(i=0;i<n;i++){
 printf("\n");
 for(j=0;j<m;j++)  printf(" %5d",x[i][j]);
}
 
suma(x);/////////////////////////////////////////cannot convert int(*)(10) to int*
elementi(x);
getch();
return 0;
}
 
int suma(int *x)
{
 int i,j,sum=0;
 for(i=0;i<n;i++)
 for(j=0;j<m;j++)
   {if(x[i][j]>0)sum+=x[i][j];}
   printf("\n Suma=%d",sum);
   return sum;
}
 
int elementi(int *x)
{
 int k=0;
 int Z=18;
 for(j=0;j<m;j++)
 for(j=0;j<n;j++)
 if(x[i][j]<=Z)k++;
 printf("\n Kilkist elementiv=%d",k);
 return k;
}
Заранее спасибо)
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2015, 00:09
Ответы с готовыми решениями:

В матрице подсчитать количество элементов, значение которых меньше суммы первого положительного и последнего отрицательного элементов матрицы
Доброго времени суток. Кое какие наработки: n=5; m=6; X=randi(,m,n); flagpositive=0;

Вычислить сумму диагональных элементов матрицы и количество элементов, значение которых меньше 3
Вычислить сумму диагональных элементов матрицы и количество элементов, значение которых меньше 3.

Вычислить сумму диагональных элементов матрицы и количество элементов,значение которых меньше 3
Вычислить сумму диагональных элементов матрицы и количество элементов,значение которых меньше 3.

12
1 / 1 / 7
Регистрация: 16.05.2015
Сообщений: 34
17.05.2015, 00:15
int suma(int *x)
Нужно написать
C
1
int suma(int **x)
так как Вы передаете в функцию двумерный массив
0
0 / 0 / 0
Регистрация: 09.05.2015
Сообщений: 27
17.05.2015, 11:57  [ТС]
valner, как бы указатель, на указатель?

Добавлено через 2 минуты
valner, все равно та же ошибка

Добавлено через 5 минут
valner, престало выбивать ошибку, когда я сделал следующее:
C++
1
2
int suma(int x[][10]);
int elementi(int x[][10]);
А можна было еще как-то это записать?
0
1 / 1 / 7
Регистрация: 16.05.2015
Сообщений: 34
17.05.2015, 12:02
C++
1
2
3
int suma(int**x);
 
int suma(int x[][]);
Эти тоже будут работать
0
0 / 0 / 0
Регистрация: 09.05.2015
Сообщений: 27
17.05.2015, 12:16  [ТС]
valner, к сожалению, не работает(

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
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
const int m=10;
const int n=10;
 
const int a=10;
const int b=18;
 
int suma(int **x);
int elementi(int **x);
 
int main()
{
 srand(time(NULL));
 int x[m][n];
 int i,j;
 for(i=0;i<n;i++)
 for(j=0;j<m;j++) x[i][j]=random(b-a+1)+a;
 for(i=0;i<n;i++)
 for(j=0;j<m;j++)
 for(i=0;i<n;i++){
 printf("\n");
 for(j=0;j<m;j++)  printf(" %5d",x[i][j]);
}
 
suma(x);///////////////////////////////////////////////////////////////////////////// выбивает cannot convert int(*)(10) to int**
elementi(x);
getch();
return 0;
}
 
int suma(int **x)
{
 int i,j,sum=0;
 for(i=0;i<n;i++)
 for(j=0;j<m;j++)
   {if(x[i][j]>0)sum+=x[i][j];}
   printf("\n Suma=%d",sum);
   return sum;
}
 
int elementi(int **x)
{
 int k=0,i,j;
 int Z=18;
 for(j=0;j<m;j++)
 for(i=0;i<n;i++)
 if(x[i][j]<=Z)k++;
 printf("\n Kilkist elementiv=%d",k);
 return k;
}
Добавлено через 1 минуту
valner, и несоответствие типов в том же рядке
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
17.05.2015, 12:21
Лучший ответ Сообщение было отмечено craftyperson как решение

Решение

Цитата Сообщение от valner Посмотреть сообщение
int suma(int**x);
Это только если многомерный массив создан динамически. Да и количество строк и столбцов как-то передать нужно. Хотя для этого здесь глобальные константы. Но для универсальности лучше без них.
Массив без констант:
C++
1
2
3
4
5
6
7
8
int m, n;
cout << "Enter count of rows";
cin >> m;
cout << "Enter count of columns";
cin >> n;
int **x=new int *[m];
for (int i=0; i<m; i++) 
    x[i]=new int[n];
Заголовок функции:
C++
1
int suma(int** x, int m, int n);
Вызов функции:
C++
1
suma(x, m, n);
1
0 / 0 / 0
Регистрация: 09.05.2015
Сообщений: 27
17.05.2015, 12:34  [ТС]
Даценд, может вопрос очень нелепый, но все же. Опять выбивает ошибку, Вы не могли бы отредактировать код?

Заранее благодарю!

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
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
 
const int a=10;
const int b=18;
 
int suma(int** x, int n, int m);
int elementi(int** x, int n, int m);
 
int main()
{
 srand(time(NULL));
 int n, m;
 printf("\n Vvedit kilkist radkiv: ");
 scanf("%d",&n);
 printf("\n Vvedit kilkist stovpciv: ");
 scanf("%d",&m);
 int **x=new int *[m];
 for (int i=0; i<m; i++)
    x[i]=new int[n];
 
 int i,j;
 for(i=0;i<n;i++)
 for(j=0;j<m;j++) x[i][j]=random(b-a+1)+a;
 for(i=0;i<n;i++)
 for(j=0;j<m;j++)
 for(i=0;i<n;i++){
 printf("\n");
 for(j=0;j<m;j++)  printf(" %5d",x[i][j]);
}
 
suma(x, n, m);
elementi(x, n, m);
getch();
return 0;
}
 
int suma(int **x)
{
 int i,j,n,m,sum=0;
 for(i=0;i<n;i++)
 for(j=0;j<m;j++)
   {if(x[i][j]>0)sum+=x[i][j];}
   printf("\n Suma=%d",sum);
   return sum;
}
 
int elementi(int **x)
{
 int k=0,i,j,n,m;
 int Z=18;
 for(j=0;j<m;j++)
 for(i=0;i<n;i++)
 if(x[i][j]<=Z)k++;
 printf("\n Kilkist elementiv=%d",k);
 return k;
}


linker error suma(int**, int , int) referenced from D:\\......
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
17.05.2015, 12:39
Лучший ответ Сообщение было отмечено craftyperson как решение

Решение

В определении функции сигнатура должна быть как и в объявлении, т.е. не
Цитата Сообщение от craftyperson Посмотреть сообщение
int suma(int **x)
а
C#
1
2
3
4
int suma(int** x, int n, int m)
{
//реализация
}
1
0 / 0 / 0
Регистрация: 09.05.2015
Сообщений: 27
17.05.2015, 13:35  [ТС]
Даценд, огромное Вам спасибо) работает)

Добавлено через 40 минут
Даценд, извините за бейспокойстов, если вопрос глупый, но если я захочу переделать цикл прохода по массиву через указатель, то это будет выглядеть:

C++
1
2
int** ptr=x;
 for(;ptr<((ptr+n)+m)+1;ptr++)
или нет?

........................................ .............................
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
#include<conio.h>
#include<stdio.h>
#include<stdlib.h>
 
const int a=18;
const int b=10;
 
int suma(int** x, int n, int m);
int elementi(int** x, int n, int m, int Z);
 
int main()
{
 srand(time(NULL));
 int n, m, Z;
 printf("\n Vvedit kilkist radkiv: ");
 scanf("%d",&n);
 printf("\n Vvedit kilkist stovpciv: ");
 scanf("%d",&m);
 printf("\n Vvedit chislo Z: ");
 scanf("%d",&Z);
 
 int **x=new int *[m];
 for (int i=0; i<m; i++)
    x[i]=new int[n];
 
 int i,j;
 for(i=0;i<n;i++)
 for(j=0;j<m;j++) x[i][j]=rand()%a-b;
 for(i=0;i<n;i++)
 for(j=0;j<m;j++)
 for(i=0;i<n;i++){
 printf("\n");
 for(j=0;j<m;j++)  printf(" %5d",x[i][j]);
}
 
suma(x, n, m);
elementi(x, n, m, Z);
getch();
return 0;
}
 
int suma(int** x, int n, int m)
{
 int i,j,sum=0;
 for(i=0;i<n;i++)
 for(j=0;j<m;j++)
   {if(*(*(x+i)+j)>0)sum+=*(*(x+i)+j);}
   printf("\n\n Suma= %d",sum);
   return sum;
}
 
int elementi(int** x, int n, int m, int Z)
{
 int k=0,i,j;
 for(j=0;j<m;j++)
 for(i=0;i<n;i++)
 if(*(*(x+i)+j)<=Z)k++;
 printf("\n\n Kilkist elementiv= %d",k);
 return k;
}
Добавлено через 54 секунды
Даценд, я имею ввиду, проход по массиву в самой функцие
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
17.05.2015, 13:43
Нет не так, потому что условие
(ptr<((ptr+n)+m)+1)
будет всегда выполняться.
А зачем? И почему решили отказаться от x[i][j]?
0
0 / 0 / 0
Регистрация: 09.05.2015
Сообщений: 27
17.05.2015, 14:04  [ТС]
Даценд, по правде говоря, меня бы устроил и первый вариант, но поставленное задание подразумевает, после создания массива работать с ним через указатели

Добавлено через 16 минут
Даценд, помогите, пожалуйста, реализовать эту часть кода. Искал в интернете, не могу найти похожего.
0
Эксперт .NET
 Аватар для Даценд
5878 / 4755 / 2939
Регистрация: 20.04.2015
Сообщений: 8,361
17.05.2015, 14:13
Лучший ответ Сообщение было отмечено craftyperson как решение

Решение

Ясно. Но это не значит, что и параметрами цикла for должны быть указатели. Думаю, достаточно использовать вместо x[i][j] конструкцию *(*(x+i)+j).
А чтобы исправить ошибку, которая появляется, если число строк не равно числу столбцов, разберитесь, где нужно использовать n, а где m. (По древней традиции m - строки, n - столбцы).
1
0 / 0 / 0
Регистрация: 09.05.2015
Сообщений: 27
17.05.2015, 23:56  [ТС]
Даценд, ок, учту Ваши поправки. спасибо за совет.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
17.05.2015, 23:56
Помогаю со студенческими работами здесь

Вывести массив B из девяти элементов, определить количество элементов, значение которых меньше 10
Вывести массив B из девяти элементов, определить количество элементов, значение которых меньше 10.

В матрице целых чисел размера 10х15 определить количество и сумму элементов значение которых находится в НЕ интервала [-1;1]
Задача В матрице целых чисел размера 10х15 определить количество и сумму элементов значение которых находится в НЕ интервала

Найти сумму положительных элементов массива, значение которых меньше 10
1) Дан массив целых чисел , состоящий из 15 элементов. Найти: a) Сумму положительных элементов, значение которых меньше 10 б)...

В матрице целых чисел размера 10х15 определить количество и сумму элементов, значение которых находится вне интервала [k1,k2]
Помогите с задачей &quot; В матрице целых чисел размера 10х15 определить количество и сумму элементов, значение которых находится вне интервала ...

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


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Символьное дифференцирование
igorrr37 13.02.2026
/ * Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет значение производной при заданном х Логарифм записывается как: (x-2)log(x^2+2) -. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru