Форум программистов, компьютерный форум CyberForum.ru

Минимальный элемент массива - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
24.11.2011, 22:36     Минимальный элемент массива #1
Доброго времени суток!
Как найти номер элемента массива, содержащий самое маленькое значение...
тобишь у меня есть массив с определённым количеством элементов..и в нём есть цифры..
мне нужно узнать в каком элементе массива содержится самая маленькая цифра..
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.11.2011, 22:36     Минимальный элемент массива
Посмотрите здесь:

C++ Поменять местами минимальный и максимальный элемент массива V[25] и подсчитать количество парных элементов массива
C++ В одномерном массиве, состоящем из n элементов массива, вычислить минимальный элемент массива
C++ Определить, что больше: максимальный элемент массива А[10] или минимальный элемент массива В[7]
Массивы. Вычислить минимальный элемент массива, сумму элементов массива, преобразовать массив C++
C++ Минимальный элемент одномерного массива A заменить на третий отрицательный элемент
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
25.11.2011, 02:28  [ТС]     Минимальный элемент массива #21
Цитата Сообщение от Сыроежка Посмотреть сообщение
Показывайте код, что вы там написали.
C++
1
2
3
4
5
6
7
8
9
int n = min_elem(TT, sizeof(TT));
    if (n == flag)
    {
        n++;
        n = min_elem(TT + n, sizeof(TT) - n);
        return n;
    }
    else
        return n;
flag - это тот минимум, который был предыдущим..
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Сыроежка
Заблокирован
25.11.2011, 02:34     Минимальный элемент массива #22
Цитата Сообщение от bupal Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
int n = min_elem(TT, sizeof(TT));
    if (n == flag)
    {
        n++;
        n = min_elem(TT + n, sizeof(TT) - n);
        return n;
    }
    else
        return n;
flag - это тот минимум, который был предыдущим..
Во-первых, почему вы в качестве второго элемента указываете sizeof( TT )? Надо же, как я писал, начинать поиск со следующего элемента массива.

Выкладывайте весь код!
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
25.11.2011, 02:39  [ТС]     Минимальный элемент массива #23
Цитата Сообщение от Сыроежка Посмотреть сообщение
Во-первых, почему вы в качестве второго элемента указываете sizeof( TT )? Надо же, как я писал, начинать поиск со следующего элемента массива.

Выкладывайте весь код!
sizeof..как я понял...возвращает количество элементов в массиве...
нам ведь это и нужно в качестве второго аргумента в функции?....
Сыроежка
Заблокирован
25.11.2011, 02:47     Минимальный элемент массива #24
Цитата Сообщение от bupal Посмотреть сообщение
sizeof..как я понял...возвращает количество элементов в массиве...
нам ведь это и нужно в качестве второго аргумента в функции?....
Нет, во-первых, я не знаю, как у вас объявлен тип TT, но если это имя массива, то sizeof TT вернет вам не количество элементов, а размер участка памяти занимаемым массивом. Например, если у вас есть массив из трех элементов, имеющих тип int, то тогда вам этот оператор вернет число 12 = 3 * sizeof( int ), который в свою очередь обычно равен 4 байтам.
Вам не надо заниматься самодеятельностью, а стараться делать то, что я пишу.
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
25.11.2011, 02:53  [ТС]     Минимальный элемент массива #25
хм..а что нужно написать..чтобы получить количество элементов массива?...

или что нужно написать в качестве N..
просто я понял это как количество элементов массива..

массив объявлен: double TT[N];
Сыроежка
Заблокирован
25.11.2011, 03:00     Минимальный элемент массива #26
Цитата Сообщение от bupal Посмотреть сообщение
хм..а что нужно написать..чтобы получить количество элементов массива?...

или что нужно написать в качестве N..
просто я понял это как количество элементов массива..

массив объявлен: double TT[N];

N == sizeof( TT ) / sizeof( double );

Но надо сомтреть весь ваш код, иначе это надолго затянется.
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
25.11.2011, 03:15  [ТС]     Минимальный элемент массива #27
Цитата Сообщение от Сыроежка Посмотреть сообщение
N == sizeof( TT ) / sizeof( double );

Но надо сомтреть весь ваш код, иначе это надолго затянется.
просто весь код решает совершенно иную задачу..а вычисление минимума является лишь её отдельной..маленькой частью..

Добавлено через 6 минут
сейчас кстати проверил...он почему то в итоге возвращает min+1..тобишь если min был 0, то он вернул 1
а это не то, что нужно..потому что в итоге выходит так, что из массив {10, 170, 12}
он озвращает в качестве min элемент под номером 0 (тобишь там где 10), а в качестве второго минимального элемент под номер 1 (тобишь там где 170)..
Сыроежка
Заблокирован
25.11.2011, 03:59     Минимальный элемент массива #28
Цитата Сообщение от bupal Посмотреть сообщение
просто весь код решает совершенно иную задачу..а вычисление минимума является лишь её отдельной..маленькой частью..

Добавлено через 6 минут
сейчас кстати проверил...он почему то в итоге возвращает min+1..тобишь если min был 0, то он вернул 1
а это не то, что нужно..потому что в итоге выходит так, что из массив {10, 170, 12}
он озвращает в качестве min элемент под номером 0 (тобишь там где 10), а в качестве второго минимального элемент под номер 1 (тобишь там где 170)..
Я тут глупость наговорил, на ночь глядя.

На самом деле вам один раз надо искать минимуму по всему массиву. А затем уже не пользоваться этой функцией, а написать функцию поиска заданного элемента. То есть так как минимум уже известен, то в оставшейся последовательности просто нужно найти такой же по значению элемент.

Примерная функция (напишу ее для double массива

C++
1
2
3
4
5
6
7
8
unsigned int find( double a[], unsigned int n, double value )
{
   unsigned int index = 0;
   
   while ( index < n && !( a[index] == value ) ) index++;
 
   return ( index );
}
Только при вызове нужно правильно задавать аргументы. Допустим, вы сначала вызываете min_element

C++
1
2
3
4
5
6
7
8
unsigned int min = min_element( a, N );
 
while ( min != N )
{
   std::cout << "minimum = " << a[min] << std::endl;
   unsigned int start = min + 1;
   min = find( a + start, N - start, a[min] ) + start;
}

Проверьте как раз этот код. Будет ли у вас печатать все минимумы массива?
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
25.11.2011, 14:46  [ТС]     Минимальный элемент массива #29
Цитата Сообщение от Сыроежка Посмотреть сообщение
Я тут глупость наговорил, на ночь глядя.

На самом деле вам один раз надо искать минимуму по всему массиву. А затем уже не пользоваться этой функцией, а написать функцию поиска заданного элемента. То есть так как минимум уже известен, то в оставшейся последовательности просто нужно найти такой же по значению элемент.

Примерная функция (напишу ее для double массива

C++
1
2
3
4
5
6
7
8
unsigned int find( double a[], unsigned int n, double value )
{
   unsigned int index = 0;
   
   while ( index < n && !( a[index] == value ) ) index++;
 
   return ( index );
}
Только при вызове нужно правильно задавать аргументы. Допустим, вы сначала вызываете min_element

C++
1
2
3
4
5
6
7
8
unsigned int min = min_element( a, N );
 
while ( min != N )
{
   std::cout << "minimum = " << a[min] << std::endl;
   unsigned int start = min + 1;
   min = find( a + start, N - start, a[min] ) + start;
}

Проверьте как раз этот код. Будет ли у вас печатать все минимумы массива?
Привет...что то не так происходит..
после нахождения первого минимума, функция find сразу выдаёт номер последнего элемента + 1...
тобишь если массив был из 8 элементов, то она выдаёт 9

Добавлено через 3 минуты
ой..кажется Вы меня не правильно поняли...
я имел в виду не то, чтобы был найден такой же по значению элемент
а чтобы был минимум, который больше первого минимума, но меньше всего остального..
тоесть в массиве {10, 30, 12} первый минимум это 10, а второй минимум это 12
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
25.11.2011, 15:49     Минимальный элемент массива #30
C++
1
2
3
4
5
6
7
8
9
10
#include <vector>
#include <iostream>
#include <algorithm>
 
int main()
{
    std::vector<int> vec = {10,30,12};
    std::cout << 
    (std::min_element(std::min_element(vec.begin(), vec.end()) + 1, vec.end()) - vec.begin()) << std::endl;
}
bupal
25 / 25 / 2
Регистрация: 30.03.2010
Сообщений: 343
Записей в блоге: 1
26.11.2011, 00:10  [ТС]     Минимальный элемент массива #31
Цитата Сообщение от ForEveR Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
#include <vector>
#include <iostream>
#include <algorithm>
 
int main()
{
    std::vector<int> vec = {10,30,12};
    std::cout << 
    (std::min_element(std::min_element(vec.begin(), vec.end()) + 1, vec.end()) - vec.begin()) << std::endl;
}
а можете сказать, что нужно изменить..чтоб она правильно работала...а то в случае с {10,30,12} она выдаёт 2, а в случае с {10,30,9} выдаёт 3..тобишь которой и не существует..
тобишь чтоб выдавалось правильно..в независимости от расположения
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
26.11.2011, 15:19     Минимальный элемент массива #32
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <vector>
#include <iostream>
#include <algorithm>
 
int main()
{
    std::vector<int> vec = {10,30,9};
    int first_min = *std::min_element(vec.begin(), vec.end());
    int second_min_idx = std::min_element(vec.begin(), vec.end(), [first_min](const int first, const int second)
    {
        return first < second && first > first_min; 
    }) - vec.begin();
    std::cout << second_min_idx << std::endl; 
}
http://liveworkspace.org/code/c9528e...7297e71f7837e0

При компиле не поддерживающем C++0x нужно использовать функтор/функцию вместо лямбды.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.11.2011, 17:28     Минимальный элемент массива
Еще ссылки по теме:

Определить номер столбца массива, в котором расположен минимальный элемент четвертой строки массива C++
Поменять местами минимальный элемент и первый отрицательный элемент массива целых чисел C++
Поменять местами минимальный элемент с первым элементом массива, а максимальный элемент с последним C++

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

Или воспользуйтесь поиском по форуму:
Abylaikhan
-8 / 3 / 0
Регистрация: 14.11.2011
Сообщений: 22
28.11.2011, 17:28     Минимальный элемент массива #33
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include<iostream>
using namespace std;
int main ()
{
    int n,a[100000],k,min=999999,i;
    cin>>n;
    for(i=1;i<=n;i++)
    {
                     cin>>a[i];
                     if(a[i]<min) {min=a[i]; k=i;}
                     }
                     cout<<k;
    return 0;
    }
 Комментарий модератора 
Используйте теги форматирования кода!


Yandex
Объявления
28.11.2011, 17:28     Минимальный элемент массива
Ответ Создать тему
Опции темы

Текущее время: 00:45. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru