Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
9 / 9 / 1
Регистрация: 15.10.2020
Сообщений: 97

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

19.12.2020, 06:46. Показов 952. Ответов 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
#include <iostream>
#include <time.h>
#include <windows.h>
 
 
using namespace std;
 
 
int main()
{
  system("cls");
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
     setlocale(LC_ALL, "Russian");
    srand(time(0)); 
    
    
    int mass[10][10];
    
    cout << "\n\n\nCозданная матрица 10х10:\n";
    for (int i = 0; i < 10; i++){
        for (int j = 0; j < 10; j++){
        mass[i][j]=rand()%25 - 15;
        cout << mass[i][j] << " ";  
        }
        cout << endl;
    }
    int colvo[10];
    int *p;
    int *sandora = 0;
    
    int a = 0;
    int b = b;
    
        for (int i = 0; i < 10; i++){
        for (int j = 0; j < 10; j++){
                    if (mass[j][i]<0){
                        a++;
                    }
                 // использование указателя
            p = &a;
                }
                colvo[b]=*p;
                b++;
                // ещё один указатель
                a=*sandora;
    }
    cout << "\n \n";
    
    for (int i = 0; i < 10; i++){
        cout << "     В ряду номер" << i+1 << " всего-то "<<colvo[i] << " отрицательных элементов. Верьте мне.\n";
    }
     system("Pause");
    return 0;
}
Исправно компилирует, но после создания матрицы код вылетает. Ошибка где-то в цикле наполнения массива colvo - если его закинуть в коммент, то всё работает исправно.
(в этом)
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
    for (int i = 0; i < 10; i++){
        for (int j = 0; j < 10; j++){
                    if (mass[j][i]<0){
                        a++;
                    }
                 // использование указателя
            p = &a;
                }
                colvo[b]=*p;
                b++;
                // ещё один указатель
                a=*sandora;
    }
Прошу указать на ошибку

]

Решено:
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 <iostream>
 
using namespace std;
 
 
int main()
{
  system("cls");
 SetConsoleCP(1251);
 SetConsoleOutputCP(1251);
     setlocale(LC_ALL, "Russian");
    srand(time(0)); 
    
    
    int mass[10][10];
    
    cout << "\n\n\nÑîçäàííûé ìàññèâ 10õ10:\n";
    for (int i = 0; i < 10; i++){
        for (int j = 0; j < 10; j++){
        mass[i][j]=rand()%25 - 15;
        cout << mass[i][j] << " ";  
        }
        cout << endl;
    }
    int colvo[10];
    
    int a = 0;
    int b = 0;
 
    for (int i = 0; i < 10; i++){
        for (int j = 0; j < 10; j++){
                    if (mass[j][i]<0){
                        a++;
                    }
                 // èñïîëüçîâàíèå óêàçàòåëÿ
 
                }
                    int *p = &a;
                colvo[b]= *p;
                b++;
 
                a= 0;
    }
    cout << "\n \n";
    
    for (int i = 0; i < 10; i++){
        cout << "     Â ðÿäó íîìåð " << i+1 << " âñåãî-òî "<<colvo[i] << " îòðèöàòåëüíûõ ýëåìåíòîâ. Âåðüòå ìíå.\n";
 
    }
     system("Pause");
    return 0;
}
Добавлено через 6 минут
del
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.12.2020, 06:46
Ответы с готовыми решениями:

Вывести количество отрицательных элементов в каждой строке матрицы
Напишите программу, которая просит пользователя ввести целое число n и M-количество строк и столбцов для матрица. Программа должна...

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

Вычислить количество отрицательных элементов в каждой строке матрицы
Дана матрица действительных чисел А(3,4). Вычислить количество отрицательных элементов в каждой из строк.

7
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
19.12.2020, 11:10
Цитата Сообщение от Tamuto Посмотреть сообщение
Решено:
Цитата Сообщение от Tamuto Посмотреть сообщение
C++
1
2
3
int *p = &a; // в p записали адрес переменной a
 colvo[b]= *p; // по адресу снова получили значение этой переменной  
 b++;
Вам не кажется, что это мазохизм?
Требуется совсем не это
Берете вот этот образец
Образцы (шаблоны) программ для типовых задач
И меняете функцию обработки
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
//
// пример обработки матрицы - подсчет количества отрицательных элементов в каждой строке
//
void Process( int ** M,int *Sum, size_t n, size_t m ) {
     int* pSum=Sum; // pSum - указатель на начало массива результатов   !!!!!!!!!!
     for ( size_t i = 0; i < n; ++i ) {
        *pSum = 0;  // обнулили очередной элемент массива через указатель   !!!!!!!!
        for ( size_t j = 0; j < m; ++j ) {
            if(M[i][j]<0)
                *pSum++; // учли очередное отрицательное значение путем разименования указателя и увеличивая  содержимое на 1 !!!!!!!
        }
        pSum++; // перешли к следующему элементу массива увеличив значение указателя !!!!!!!!!
    }
}
Можно и дальше развить тему указателей применив описанную технологию и для матрицы.
Но, я думаю, что теперь достаточно понятно, как это сделать.
0
9 / 9 / 1
Регистрация: 15.10.2020
Сообщений: 97
20.12.2020, 11:07  [ТС]
Но, я думаю, что теперь достаточно понятно, как это сделать.
Нет, Шерлок, не понятно.

C++
1
2
3
4
5
6
7
8
9
10
11
void Process( int ** M,int *Sum, size_t n, size_t m ) { // size_t m? size_t n? В чём их разница и для чего они?
     int* pSum=Sum; 
     for ( size_t i = 0; i < n; ++i ) { // почему ++i, а не i++? 
        *pSum = 0;  
        for ( size_t j = 0; j < m; ++j ) { // почему ++j, а не j++? 
            if(M[i][j]<0)
                *pSum++; 
        }
        pSum++; 
    }
}

Если я правильно вас понял

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
    cout << "\n\n\nСозданный массив 10х10:\n";
    for (int i = 0; i < 10; i++){
        for (int j = 0; j < 10; j++){
        mass[i][j]=rand()%25 - 15;
        cout << mass[i][j] << " ";  
        }
        cout << endl;
    }
    int colvo[10];
 
    int b = 0;
 
    for (int i = 0; i < 10; i++){
        int *Sum;
        int* pSum=Sum;
        for (int j = 0; j < 10; j++){
            *pSum = 0;  
                    if (mass[j][i]<0){
                        *pSum++;
                    }
                }
                colvo[b]= *Sum;
                b++;
            pSum++;
                cout << "  В ряду номер " 
                << i+1 << " всего-то "<< colvo[i] 
                << " отрицательных элементов. Верьте мне.\n";
    }
Добавлено через 52 минуты
+ Возник вопрос. Чему равно Sum?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
20.12.2020, 12:52
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int* pSum=colvo;// в PSum записали адрес начала массива  colvo
for (int i = 0; i < 10; i++)
{
   *pSum = 0; // обнулили очередной элемент массива colvo
   for (int j = 0; j < 10; j++)
   {
 
        if (mass[i][j]<0) //  !!!!!! не [j][i] а [i][j]  !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
           *pSum++; // считаем каждый отрицательный элемент в текущей строке i
   }
   pSum++; // переходим к следующему элементу массива colvo
}
for (int i = 0; i < 10; i++)
    cout << "  В ряду номер "<< i+1 << " всего-то "<< colvo[i] 
                << " отрицательных элементов. Верьте мне.\n";
Добавлено через 4 минуты
Цитата Сообщение от Tamuto Посмотреть сообщение
size_t m? size_t n?
n - количество строк
m - количество столбцов
size_t === unsigned int

Цитата Сообщение от Tamuto Посмотреть сообщение
почему ++i, а не i++?
В данном конкретном случае - без разницы.
Это бывает существенно при применении операции инкремента для сложных объектов, например, итераторов.
Префиксная орерация выполняется быстрее, т.к. не требует промежуточного копирования объекта.
1
9 / 9 / 1
Регистрация: 15.10.2020
Сообщений: 97
20.12.2020, 13:08  [ТС]
Хорошо, пожалуйста, можете показать на примере моего кода, как это должно выглядеть?
0
9 / 9 / 1
Регистрация: 15.10.2020
Сообщений: 97
20.12.2020, 14:16  [ТС]
Раньше выводило на месте цифр "0x7ffc60".
Сейчас это:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int colvo[10];
int* pSum=colvo;// в PSum записали адрес начала массива  colvo
for (int i = 0; i < 10; i++)
{
   *pSum = 0; // обнулили очередной элемент массива colvo
   for (int j = 0; j < 10; j++)
   {
 
        if (mass[i][j]<0) //   
        
           *pSum++; // считаем каждый отрицательный элемент в текущей строке i
           
   }
 
   pSum++; // переходим к следующему элементу массива colvo
}
for (int i = 0; i < 10; i++){
    cout << "  В ряду номер "<< i+1 << " всего-то "<< colvo
                << " отрицательных элементов. Верьте мне.\n";
 
}
Что с этим можно сделать?
0
Модератор
Эксперт С++
 Аватар для zss
13771 / 10964 / 6491
Регистрация: 18.12.2011
Сообщений: 29,241
20.12.2020, 15:38
Плохо умеете копировать, у меня было:
Цитата Сообщение от zss Посмотреть сообщение
" всего-то "<< colvo[i]
У Вас:
Цитата Сообщение от Tamuto Посмотреть сообщение
" всего-то "<< colvo
И учитесь, наконец, пользоваться отладчиком:
Как пользоваться отладчиком (в Visual Studio)
0
9 / 9 / 1
Регистрация: 15.10.2020
Сообщений: 97
20.12.2020, 15:48  [ТС]
Однако, здравствуйте.
Заменил
C++
1
*pSum++;
на
C++
1
*pSum+=1;
Всё заработало. wow
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.12.2020, 15:48
Помогаю со студенческими работами здесь

Подсчитать количество отрицательных элементов матрицы в каждой строке
Прошу помощи. (Си) 1) Дана квадратная матрица размерностью N. Подсчитать количество отрицательных элементов по строкам. 2)...

Подсчитать количество отрицательных элементов в каждой строке матрицы
Подсчитать количество отрицательных элементов в каждой строке матрицы размером М на N, элементы которой задаются с помощью датчика...

Получить количество отрицательных элементов в каждой строке матрицы
Помогите составить программу к задаче: Дана матрица Х(N,M). Получить последовательность у1,у2,...у0,каждый элемент которого равен...

Определить по каждой строке количество отрицательных элементов матрицы
Определить по каждой строке количество отрицательных элементов матрицы DM(m,n), удовлетворяющих dm &lt; dm.

Определить количество отрицательных элементов в каждой строке матрицы
Дана действительная матрица x(5,3). Определить количество отрицательных элементов в каждой строке матрицы. Результат должен быть: К=0 ...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru