Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/8: Рейтинг темы: голосов - 8, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 12.10.2018
Сообщений: 24
1

Функция min_element() возвращает указатель на ноль

24.01.2019, 19:55. Показов 1482. Ответов 6
Метки нет (Все метки)

Необходимо найти максимальный элемент среди минимальных в двумерном массиве. Сначала ищу минимальный элемент всего массива с помощью функции min_element(), а затем сравниваю минимальные элементы массива с найденным. Однако функция min_element() возвращает указатель на ноль. Почему?
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
#include "stdafx.h"
#include <iostream>
#include <ctime>
#include <algorithm>
using namespace std;
int _tmain(int argc, _TCHAR* argv[])
{
    srand(int(time(NULL)));
    const int N = 5, M = 5;
    int arr1[N][M];
    for (int i = 0; i < N; i++)
        for (int j = 0; j < M; j++)
            arr1[i][j] = rand() % 21 - 10;
    for (int i = 0; i < N; i++) {
        cout << "|\t";
        for (int j = 0; j < M; j++)
            cout << arr1[i][j] << "\t";
        cout << "|" << endl;
    }
    int min = **min_element(arr1, arr1 + N*M);
    for (int i = 0; i < N; i++) {
        for (int j = 0; j < M; j++) {
            if (arr1[i][j]>min && arr1[i][j] < 0)
                min = arr1[i][j];
        }
    }
    cout << "maximin=" << min << endl;
    system("pause");
    return 0;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.01.2019, 19:55
Ответы с готовыми решениями:

Функция принимает указатель на void и возвращает указатель на int
Запишите прототип функции, которая принимает указатель на void и возвращает указатель на int.

Функция (int) возвращает ноль
Добрый день! Пишу скрипт корзины, столкнулся с таким вопросом. Я делаю изменение кол-ва товара на...

Функция не возвращает указатель на структуру
как зделать. пробывал так typedef struct str str ; struct str{ /* */ }

Функция формирует массив и возвращает указатель на него
Задание: написать функцию с аргументами: вещественное х, целое n. Функция формирует массив у:...

6
5928 / 4024 / 2334
Регистрация: 18.12.2017
Сообщений: 12,596
24.01.2019, 20:08 2
Цитата Сообщение от SteelWing_RC Посмотреть сообщение
Необходимо найти максимальный элемент среди минимальных в двумерном массиве.
Вы сами поняли что написали ? значение минимального элемента в массиве одно-единственное
0
1 / 1 / 0
Регистрация: 12.10.2018
Сообщений: 24
24.01.2019, 20:31  [ТС] 3
Мой косяк. Среди отрицательных
0
5928 / 4024 / 2334
Регистрация: 18.12.2017
Сообщений: 12,596
24.01.2019, 22:09 4
так устроит ?
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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int n, m;
    cout <<"n="; cin >>n;
    cout <<"m="; cin >>m;
    
      double **a = new double*[n], max=0.0; 
    for (int i = 0; i < n; i++)
      a[i]=new double[m];
    
    for (int i = 0; i < n; i++)
    {
    for (int j = 0; j < m; j++)
    {
    a[i][j]=rand()%19 - 9;
    if (a[i][j]<0.0 && (max==0 || a[i][j]>max)) max=a[i][j];
    cout <<setw(2)<<a[i][j]<<" ";
    }
    cout <<"\n";
    }
    
    if (max) cout <<"max negative = "<<max<<"\n";
    else cout <<"Negative elements are absent\n";
 
    for (int i = 0; i < n; i++)
    delete[]a[i];
    delete[]a;
 
system("pause");
return 0;
}
1
1 / 1 / 0
Регистрация: 12.10.2018
Сообщений: 24
24.01.2019, 23:49  [ТС] 5
Спасибо. Но мне в большей степени было интересно, почему функция выдает 0 при работе с двумерным масивом
0
1321 / 648 / 304
Регистрация: 17.11.2018
Сообщений: 1,667
25.01.2019, 00:22 6
Цитата Сообщение от SteelWing_RC Посмотреть сообщение
Сначала ищу минимальный элемент всего массива с помощью функции min_element(), а затем сравниваю минимальные элементы массива с найденным.
Это лишнее, по-моему. Проще вместо этого:
C++
1
int min = **min_element(arr1, arr1 + N*M);
сделать так:
C++
1
int min = INT_MIN;
Ну, и на случай, если в массиве не будет отрицательных элементов сделай проверку, наподобие той, что Yetty показал, только с другим значением...

Добавлено через 16 минут
C++
1
int min = *min_element( *arr1, *(arr1 + N * M) );
1
221 / 148 / 79
Регистрация: 14.03.2016
Сообщений: 459
25.01.2019, 00:28 7
Цитата Сообщение от SteelWing_RC Посмотреть сообщение
почему функция выдает 0 при работе с двумерным массивом
Дело в том, что указатель на двумерный массив идет с шагом равным sizeof(type) * n, где n - кол-во элементов первичного массива (но и то, такое возможно только с массивами константного размера, т.к. для них память выделяется из стека, т.е. в один момент и одним куском, в отличии от выделения памяти из кучи, где взять сплошной кусок памяти под двумерный массив невозможно, т.к. память между строками успевает зарезервировать какой-нибудь другой процесс). Потому, функция min_elemnt сравнивает только элементы первого столбца, а дальше уходит в неведомые дебри памяти за пределами массива. Чтобы использовать min_element для константных массивов, нужно сделать, чтобы указатель шагал в размер элемента, а не в размер первичного массива, т.е. исходный указатель на указатель на элемент преобразовать в указатель на элемент:
C++
1
int min = *min_element((int*)(*arr1), ((int*)(*arr1) + M * N));
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.01.2019, 00:28

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Функция возвращает строку (или указатель на начало строки)
Подскажите пожалуйста. Застрял на тривиальной задачке. Никак не могу добится чтобы функция...

Функция, получающая подстроку, возвращает испорченный указатель на строку
Пытаюсь выделить подстроку в Microsoft Visual C++ 2013, чтобы убрать путь к файлу и оставить только...

Функция fopen возвращает нулевой указатель (Visual Studio)
Здраствуйте) У меня возникла очень странная проблема.просто мистика. С чем может быть связано...

Как функция возвращает указатель на структуру в массив указателей
Друзья, следующий вопрос, у меня есть функция, которая: создает указатель на структуру-&gt; выделяет...

Функция находит минимальный элемент массива и возвращает указатель на него
Функция находит минимальный элемент массива и возвращает указатель на него. С использованием этой...

Какая функция winapi возвращает результатом значение по адресу памяти (указатель)?
Какая функция winapi возвращает результатом значение по адресу памяти (указатель)? Т.е. к примеру...


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

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

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