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

Создать шаблон функции: найти сумму и количество отрицательных элементов таблицы под главной диагональю

22.05.2017, 10:25. Показов 3052. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1.Создать шаблон функции: найти сумму и количество отрицательных элементов таблицы С [1 ... 5,1 ... 5], которые находятся под главной диагональю.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template <typename Type>// the first template
 class aw61
{public :
    template <typename Type> (T array, int sz)
    {
     sum = 0;
    k=0;
    for (int i = 0; i < sz - 1; i++)
    for (int j = i + 1; j < sz; j++)
        if(array[i][j] < 0)
            sum += array[i][j];
            k++;
    return sum;
}
Надо сделать на форме, помогите пожалуйста

Добавлено через 36 секунд
это для первого, но там ошибки
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
22.05.2017, 10:25
Ответы с готовыми решениями:

Найти сумму и количество отрицательных элементов таблицы С [1..5,1..5], которые находится под главной диагональю
найти сумму и количество отрицательных элементов таблицы С , которые находится под главной диагональю

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

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

23
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
22.05.2017, 10:43
Цитата Сообщение от Berserkus Посмотреть сообщение
это для первого, но там ошибки
укажи у функции возвращаемое значение и имя.
у переменных sum и k тип укажи.

и, да, один вопрос - одна тема.
0
0 / 0 / 2
Регистрация: 24.09.2015
Сообщений: 122
22.05.2017, 11:24  [ТС]
GbaLog-,
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
template <typename T>// the first template
 class aw61
{public :
    template <typename T> (T summa, T k)
    {
     int sum = 0;
     int k = 0;
for (int i = 0; i < sz; ++i)
    for (int j = 0; j < sz; ++j)
       if (i < j)
         sum += a[i][j];
         k++;
    return summa;
}
Все равно выдает ошибку
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
22.05.2017, 11:32
Цитата Сообщение от Berserkus Посмотреть сообщение
Все равно выдает ошибку
Цитата Сообщение от GbaLog- Посмотреть сообщение
укажи у функции возвращаемое значение и имя.
как вызывать функцию собираешься?

Добавлено через 1 минуту
Цитата Сообщение от Berserkus Посмотреть сообщение
T k)
теперь ещё и конфликт имен сделал.
и зачем у этого параметра тип Т?
int вполне подходил.
зато тип суммы int, для того же double работать правильно не будет...
0
0 / 0 / 2
Регистрация: 24.09.2015
Сообщений: 122
22.05.2017, 11:43  [ТС]
GbaLog-, Все решил) А как вызвать эту функцию в кнопке?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <typename T>// the first template
 class aw61
{public :
    template <typename T> T func(T sum, T k)
    {
     int sum = 0;
     int k = 0;
for (int i = 0; i < sz; ++i)
    for (int j = 0; j < sz; ++j)
       if (i < j)
         sum += a[i][j];
         k++;
    return sum;
    return k;
    }
};
0
 Аватар для moskitos80
442 / 99 / 42
Регистрация: 04.10.2011
Сообщений: 359
22.05.2017, 11:51
Лучший ответ Сообщение было отмечено SatanaXIII как решение

Решение

По первому вопросу (GNU C++ compiler 5.3)

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
#include <iostream>
 
template<typename T, int S>
void fn(T arr[][S], T& sum, size_t& count)
{
    for (int i = 0; i < S; ++i) {
        for (int j = 0; j < i; ++j) {
            if (0 > arr[i][j]) {
                sum += arr[i][j];
                count++;
            }
        }
    }
}
 
int main()
{
    int arr[][5] = {
        {0, 1, 1, 1, 1},
        {-2, 0, 1, 1, 1},
        {2, 2, 0, 1, 1},
        {2, -2, 2, 0, 1},
        {2, 2, -2, 2, 0},
    };
 
    int sum = 0;
    size_t count = 0;
 
    fn<int, 5>(arr, sum, count);
 
    std::cout << "Sum: " << sum << "; Count: " << count << "\n";
 
    return 0;
}
0
0 / 0 / 2
Регистрация: 24.09.2015
Сообщений: 122
22.05.2017, 12:18  [ТС]
moskitos80, спасибо. все работает
0
Любитель чаепитий
 Аватар для GbaLog-
3745 / 1801 / 566
Регистрация: 24.08.2014
Сообщений: 6,020
Записей в блоге: 1
22.05.2017, 13:29
Цитата Сообщение от Berserkus Посмотреть сообщение
Все решил
мне компилятор говорит, что не всё.
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
source_file.cpp:6:15: error: declaration of ‘class T’
     template <typename T> T func(T sum, T k)
               ^
source_file.cpp:3:11: error:  shadows template parm ‘class T’
 template <typename T>// the first template
           ^
source_file.cpp: In member function ‘T aw61<T>::func(T, T)’:
source_file.cpp:8:10: error: declaration of ‘int sum’ shadows a parameter
      int sum = 0;
          ^
source_file.cpp:9:10: error: declaration of ‘int k’ shadows a parameter
      int k = 0;
          ^
source_file.cpp:10:21: error: ‘sz’ was not declared in this scope
 for (int i = 0; i < sz; ++i)
                     ^
source_file.cpp:13:17: error: ‘a’ was not declared in this scope
          sum += a[i][j];
                 ^
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
#include <iostream>
 
template<typename T, size_t N>
std::pair<T, size_t> foo(T (&arr)[N][N])
{
    T res = T(0);
    size_t count = 0;
    for (size_t row = 1; row < N; ++row)
    {
        for (size_t col = 0; col < row; ++col)
        {
            if (arr[row][col] < 0)
                res += arr[row][col], ++count;
        }
    }
    
    return std::make_pair(res, count);
}
 
int main()
{
    int arr[5][5]
    {
        {0 , 1 , 1 , 1, 1},
        {-2, 0 , 1 , 1, 1},
        {2 , 2 , 0 , 1, 1},
        {2 , -2, 2 , 0, 1},
        {2 , 2 , -2, 2, 0}
    };
    
    auto p = foo(arr);
    
    std::cout << p.first << ' ' << p.second;
}
0
 Аватар для moskitos80
442 / 99 / 42
Регистрация: 04.10.2011
Сообщений: 359
22.05.2017, 14:54
По второму вопросу если я правильно понял и все массивы имеют одинаковую размерность:

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
#include <iostream>
#include <algorithm>
#include <iterator>
 
/*
 * Создайте шаблон функции: переписать подряд
 * в массив Y [1 ... 10] положительные и
 * в массив X [1 ... 10] отрицательные элементы массива Z [1 ... 10]
 */
 
template<class T, std::size_t S>
void fn(const T src[S], T (& pos)[S], T (& neg)[S])
{
 
#if defined(_WIN32) || defined(_WIN64)
    auto * posIter = std::checked_array_iterator<T>(pos, S);
    auto * negIter = std::checked_array_iterator<T>(neg, S);
#else
    auto * posIter = pos;
    auto * negIter = neg;
#endif
 
    std::copy_if(src, src + S, posIter, [](const T item) { return 0 > item; });
    std::copy_if(src, src + S, negIter, [](const T item) { return 0 <= item; });
}
 
const std::size_t SIZE = 10;
 
int main()
{
    int srcArray[SIZE] = {1, -2, 4, -3, 5, -6, 7, -8, 3, 11}; // пример данных
    int posArray[SIZE] = {0};
    int negArray[SIZE] = {0};
 
    fn(srcArray, posArray, negArray);
 
    std::cout << "POSITIVE: ";
    for (int i = 0; i < sizeof(posArray) / sizeof(int); ++i) {
        std::cout << posArray[i] << " ";
    }
 
    std::cout << "\nNEGATIVE: ";
    for (int i = 0; i < sizeof(negArray) / sizeof(int); ++i) {
        std::cout << negArray[i] << " ";
    }
}
0
0 / 0 / 2
Регистрация: 24.09.2015
Сообщений: 122
22.05.2017, 16:16  [ТС]
moskitos80, у меня в первый массив записывается только первый символ 10 раз. А во второй большое число(примерно такое 9009032).

Добавлено через 24 минуты
или во второй записываются только 0.
0
 Аватар для moskitos80
442 / 99 / 42
Регистрация: 04.10.2011
Сообщений: 359
22.05.2017, 16:19
Не уверен за компилятор MS - нет возможности проверить поэтому вот вариант под GNU C++ compiler 5.3
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
#include <iostream>
#include <algorithm>
#include <iterator>
 
template<typename T, std::size_t S>
void fn(const T src[S], T (& pos)[S], T (& neg)[S])
{
    std::copy_if(src, src + S, pos, [](const T item) { return 0 > item; });
    std::copy_if(src, src + S, neg, [](const T item) { return 0 <= item; });
}
 
const std::size_t SIZE = 10;
 
int main()
{
    int srcArray[SIZE] = {1, -2, 4, -3, 5, -6, 7, -8, 3, 11}; // пример данных
    int posArray[SIZE] = {0};
    int negArray[SIZE] = {0};
 
    fn<int, SIZE>(srcArray, posArray, negArray); // Тут я еще забыл специфицировать параметры шаблона в прошлый раз
 
    std::cout << "POSITIVE: ";
    for (int i = 0; i < sizeof(posArray) / sizeof(int); ++i) {
        std::cout << posArray[i] << " ";
    }
 
    std::cout << "\nNEGATIVE: ";
    for (int i = 0; i < sizeof(negArray) / sizeof(int); ++i) {
        std::cout << negArray[i] << " ";
    }
 
    return 0;
}
Данный код у меня на линукс машине выводит:

POSITIVE: -2 -3 -6 -8 0 0 0 0 0 0
NEGATIVE: 1 4 5 7 3 11 0 0 0 0
Process finished with exit code 0
0
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
22.05.2017, 16:20
у GbaLog- идеальный темплейт, что тут еще выдумать можно?

Добавлено через 1 минуту
Цитата Сообщение от moskitos80 Посмотреть сообщение
Не уверен за компилятор MS - нет возможности проверить поэтому вот вариант под GNU C++ compiler 5.3
...
попробуй http://rextester.com/l/cpp_online_compiler_visual
1
0 / 0 / 2
Регистрация: 24.09.2015
Сообщений: 122
22.05.2017, 16:22  [ТС]
мне надо чтобы в обычном билдере с++ все работало)
0
 Аватар для moskitos80
442 / 99 / 42
Регистрация: 04.10.2011
Сообщений: 359
22.05.2017, 16:27
vndtta, в закладки, прикольный сервис. И кстати, проверил - код работает.
Цитата Сообщение от Berserkus Посмотреть сообщение
мне надо чтобы в обычном билдере с++ все работало)
- нужно в самом начале указывать. Под билдер я не пишу. Под билдер мой код надо проверять - заработает хорошо, не заработает - жди пока кто то более опытный тебе подскажет.
0
0 / 0 / 2
Регистрация: 24.09.2015
Сообщений: 122
22.05.2017, 16:30  [ТС]
Сейчас может сам как нибудь буду менять. А вы третий пункт можете сделать?
0
 Аватар для moskitos80
442 / 99 / 42
Регистрация: 04.10.2011
Сообщений: 359
22.05.2017, 16:46
Цитата Сообщение от Berserkus Посмотреть сообщение
А вы третий пункт можете сделать?
Это там где надо перевернуть массив? А что там делать то? Берете стандартную функцию: std::reverse она находится в заголовке: algorithm
и встраиваете её в свою форму. Я просто с билдером и его формами не работаю. Ну максимум могу пример привести, хотя по ссылке есть (опять же для GNU C++ compiler 5.3):

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <algorithm>
 
// Если прям очень нужно запихнуть в свой шаблон:
template<typename T, std::size_t S>
void fn(T src[S])
{ std::reverse(src, src + S); }
 
const std::size_t SIZE = 10;
 
int main()
{
    int srcArray[SIZE] = {1, -2, 4, -3, 5, -6, 7, -8, 3, 11}; // пример данных
 
    fn<int, SIZE>(srcArray);
 
    std::cout << "REVERSED: ";
    for (int i = 0; i < SIZE; ++i) {
        std::cout << srcArray[i] << " ";
    }
 
    return 0;
}
0
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
22.05.2017, 16:52
я глянул сюда в колонку Embarcadero C++ Builder и увидел, что многое связанное с templates не поддерживается, наверное в этом причина

Добавлено через 5 минут
а может дело в auto
0
 Аватар для moskitos80
442 / 99 / 42
Регистрация: 04.10.2011
Сообщений: 359
22.05.2017, 16:55
Ну, судя по таблице там и лямбды не поддерживаются
0
93 / 69 / 22
Регистрация: 17.10.2011
Сообщений: 235
22.05.2017, 16:59
Цитата Сообщение от moskitos80 Посмотреть сообщение
Ну, судя по таблице там и лямбды не поддерживаются
у тебя надо убрать лямбды, а у GbaLog- auto
0
0 / 0 / 2
Регистрация: 24.09.2015
Сообщений: 122
22.05.2017, 17:51  [ТС]
moskitos80, вот я что вроде сделал, но оно не выводит массивы №2 и №3.
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
template<typename T, size_t S>
void fn(const T arr[S], T (& arrPos)[S], T (& arrNeg)[S])
{
 int aP=0, aN=0;
for(int i=0; i<10; i++)
        {
        if (arr[i]<0)
        {
            arrNeg[aN]=arr[i];
            aN++;
        }
        else
        {
            arrPos[aP]=arr[i];
            aP++;
        }
        }
};
 
void __fastcall TForm1::Button2Click(TObject *Sender)
{
    int arr[10];
    int arrPos[10];//массив больше 0
    int arrNeg[10];//массив меньше 0
 
    int aP=0, aN=0;// счетчики для 2-х массивов чисел
        randomize();
        for(int i =0; i<10; i++)
        {//вывод на экран
        arr[i] = random(15)-10;
        ListBox2->Items->Add(arr[i]);
        }
 
        fn<int, 10>(arr, arrPos, arrNeg);
 
        ListBox2->Items->Add("arrPos[i]");
        for(int i = 0; i<aP; i++)
        {//вывод на экран
        ListBox2->Items->Add(arrPos[i]);
        }
        ListBox2->Items->Add("arrNeg[i]");
        for(int i =0; i<aN; i++)
        {//вывод на экран
        ListBox2->Items->Add(arrNeg[i]);
        }
}
Добавлено через 2 минуты
а все, нашел ошибку. только оно заполняет оставшиеся ячейки массива какими-то большими числами
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
22.05.2017, 17:51
Помогаю со студенческими работами здесь

Определить сумму и количество отрицательных элементов, размещенных под главной диагональю матрицы.
16. Определить сумму и количество отрицательных элементов, размещенных под главной диагональю матрицы. 4. Найти в каждой строке...

Найти количество отрицательных элементов, расположенных под главной диагональю матрицы
Задание такое. В двумерном массиве найти: 1)количество отрицательных элементов, расположенных под главной диагональю 2)минимальный...

В заданной матрице найти сумму отрицательных элементов, лежащих под главной диагональю
Дана матрица А: A= а) найти сумму отрицательных элементов, лежащих под главной диагональю б) найти минимальный элемент среди...

Вычислить сумму отрицательных элементов расположенных под главной диагональю
Создать динамический массив указателей для сохранения двумерного массива А с N × N действительных чисел в динамической памяти....

Определить сумму отрицательных элементов матрицы, расположенных под главной диагональю (Pascal -> C++)
Задание гласит: Определить сумму отрицательных элементов матрицы, расположенных под главной диагональю. Размер матрицы вводить с...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&amp;d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки 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. На борту пять. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru