Как найти номер строки с минимальным элементом

1 / 1 / 0

Регистрация: 29.04.2013

Сообщений: 16

1

Найти номер строки и столбца двумерного массива для минимального элемента этого массива

06.05.2013, 14:52. Показов 10239. Ответов 3


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

Visual C ++ 2005 Express Edition
помогите пожалуйста



0



Genn55

413 / 250 / 118

Регистрация: 26.12.2012

Сообщений: 786

06.05.2013, 15:54

2

Наверное так.

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 <cstdlib>
 
using namespace std;
 
int main()
{
    int min =0;
    int imin =-1;
    int jmin =-1;
 
    srand(time(NULL));
    int n = 0;
    cin >> n; // Считываем с клавиатуры n
    int **a = new int* [n]; // Создаем массив указателей
    for (int i = 0; i < n; i++)
    {
        a[i] = new int [n]; // Создаем элементы
    }
    // А дальше работа как с обычным массивом.
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            a[i][j] = rand() % 10;
            cout << a[i][j] << " "; // Вывести элементы на консольку
        }
        cout << endl; // Двумерный массив. Строка кончилась, переводим строку и на консоли
    }
    // Считаем минимальный и максимальный
    min = a[0][0];// берем самый первый элемент массива и считаем, что он минимальный.
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (a[i][j] <= min)
            {
                min = a[i][j];
                imin = i;
                jmin = j;
            }
 
        }
    }
    cout << "min = " << min << " pos = " << imin << " " << jmin  << endl;
    // Удаление массива
    for (int i = 0; i < n; i++)
    {
        delete[]a[i]; // Удаляем каждый элемент
    }
    delete [] a; // А потом массив
    return 0;
}



1



1 / 1 / 0

Регистрация: 29.04.2013

Сообщений: 16

06.05.2013, 17:36

 [ТС]

3

Спасибо, надеюсь заработает.



0



Кристина94

1 / 1 / 0

Регистрация: 29.04.2013

Сообщений: 16

08.05.2013, 16:52

 [ТС]

4

Цитата
Сообщение от Genn55
Посмотреть сообщение

Наверное так.

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 <cstdlib>
 
using namespace std;
 
int main()
{
    int min =0;
    int imin =-1;
    int jmin =-1;
 
    srand(time(NULL));
    int n = 0;
    cin >> n; // Считываем с клавиатуры n
    int **a = new int* [n]; // Создаем массив указателей
    for (int i = 0; i < n; i++)
    {
        a[i] = new int [n]; // Создаем элементы
    }
    // А дальше работа как с обычным массивом.
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            a[i][j] = rand() % 10;
            cout << a[i][j] << " "; // Вывести элементы на консольку
        }
        cout << endl; // Двумерный массив. Строка кончилась, переводим строку и на консоли
    }
    // Считаем минимальный и максимальный
    min = a[0][0];// берем самый первый элемент массива и считаем, что он минимальный.
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < n; j++)
        {
            if (a[i][j] <= min)
            {
                min = a[i][j];
                imin = i;
                jmin = j;
            }
 
        }
    }
    cout << "min = " << min << " pos = " << imin << " " << jmin  << endl;
    // Удаление массива
    for (int i = 0; i < n; i++)
    {
        delete[]a[i]; // Удаляем каждый элемент
    }
    delete [] a; // А потом массив
    return 0;
}

Спасибо надеюсь заработает



0



Большое спасибо.
Пример кода для поиска индекса минимального значения

import pandas as pd

df = pd.DataFrame({
 'restaurant_id': [101,102,103,104,105,106,107],
 'address': ['A','B','C','D', 'E', 'F', 'G'],
 'city': ['London','London','London','Oxford','Oxford', 'Durham', 'Durham'],
 'sales': [10,500,48,12,21,10,14],
 'my': [1,-1,48,-12.0,21,16,12]
})

print(df[df['city']=='Durham'][['sales','my']].idxmin())

результатом будет индексы минимальных значений строк если ‘city’ == ‘Durham’

sales    5 #значение 10
my       6 #значение 12
dtype: int64

Уровень сложности:






  • Задание
  • Решение

Составить программу, которая будет генерировать случайные числа в интервале [a;b] и заполнять ими двумерный массив размером 10 на 10. В массиве необходимо найти номер строки с минимальным элементом. Поменять строки массива местами, строку с минимальным элементом и первую строку массива. Организовать удобный вывод на экран.

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

#include <iostream>
#include <iomanip>
//#include <ctime>
#include <cstdlib>
using namespace std;

int main()
{
    srand(time(NULL));
    double a, b; // границы отрезка [a,b]
    cout << "Введите число а: ";
    cin >> a;
    cout << "Введите число в: ";
    cin >> b;

    double matrix[10][10]; // матрица случайных чисел

    // инициализация двумерного массива случайными числами
    for (int counter_rows = 0; counter_rows < 10; counter_rows++)
        for (int counter_columns = 0; counter_columns < 10; counter_columns++)
            matrix[counter_rows][counter_columns] = (double(rand()) / RAND_MAX) * (b - a) + a; // генерация случайных вещестчвенных чисел равномерно распределённых на отрезке [a,b]

    cout << "nСгенерированный массив вещественных чисел" << endl;
    // вывод сгенерированного массива
    for (int counter_rows = 0; counter_rows < 10; counter_rows++)
    {
        for (int counter_columns = 0; counter_columns < 10; counter_columns++)
            cout << setw(7) << fixed << setprecision(3) <<matrix[counter_rows][counter_columns];
        cout << endl;
    }

    double min = matrix[0][0]; // переменная, для хранения минимального значения
    int nom; // порядковый номер строки с минимальным элеиентом

    // поиск минимального элемента в массиве
    for (int counter_rows = 0; counter_rows < 10; counter_rows++)
    {
        for (int counter_columns = 0; counter_columns < 10; counter_columns++)
        {
            if (matrix[counter_rows][counter_columns] < min )
            {
                min = matrix[counter_rows][counter_columns]; // сохраняем значение минимального элемента
                nom = counter_rows; // запоминаем номер строки
            }
        }
    }

    cout << "nНомер строки с минимальным элементом: " << (nom + 1) << endl;
    cout << "Минимальный элемент: " << min << endl;
    // перестановка строк
    if (nom != 0) // если минимальный элемент не содержится в первой строке
    {
        double temp[10]; // временный массив для хранения первой строки
        for (int counter_columns = 0; counter_columns < 10; counter_columns++)
                temp[counter_columns] = matrix[0][counter_columns]; // сохраняем значения первой строки во временный массив

        for (int counter_columns = 0; counter_columns < 10; counter_columns++)
                matrix[0][counter_columns] = matrix[nom][counter_columns]; // сохраняем значения строки с минимальным элементом в перой строке двумерного масссива

        for (int counter_columns = 0; counter_columns < 10; counter_columns++)
                matrix[nom][counter_columns] = temp[counter_columns]; // перемещаем значения из временного массива на место строки с мин элементом

        // вывод массива с перестановленными строками
        cout << "nМассив с перестановленными строками" << endl;
        for (int counter_rows = 0; counter_rows < 10; counter_rows++)
        {
            for (int counter_columns = 0; counter_columns < 10; counter_columns++)
                cout << setw(7) << fixed << setprecision(3) << matrix[counter_rows][counter_columns];
            cout << endl;
        }

    } // конец if

    return 0;
}

Результат:

CppStudio.com

Введите число а: 3
Введите число в: 9

Сгенерированный массив вещественных чисел
4.331 3.406 5.992 7.247 4.044 7.214 5.284 8.227 8.799 3.479
3.458 6.928 8.264 7.817 3.798 7.376 8.919 3.802 7.556 6.523
5.332 6.940 5.754 8.261 3.766 5.582 4.351 3.658 6.841 3.788
3.602 8.172 4.194 6.593 6.419 5.238 4.808 8.703 4.466 4.606
3.182 4.924 8.534 8.445 3.741 3.332 6.821 3.660 4.134 5.377
7.183 6.466 3.318 3.937 5.726 4.084 6.519 7.078 4.742 4.360
7.865 5.344 3.531 3.060 8.937 6.950 5.298 4.745 6.653 6.764
6.352 6.835 8.688 5.886 6.280 3.429 6.218 4.101 4.089 7.351
6.479 8.273 4.817 6.797 3.210 7.543 7.880 6.729 5.621 3.623
8.089 4.486 5.967 8.620 4.546 5.904 6.570 6.844 7.649 4.223

Номер строки с минимальным элементом: 7
Минимальный элемент: 3.060

Массив с перестановленными строками
7.865 5.344 3.531 3.060 8.937 6.950 5.298 4.745 6.653 6.764
3.458 6.928 8.264 7.817 3.798 7.376 8.919 3.802 7.556 6.523
5.332 6.940 5.754 8.261 3.766 5.582 4.351 3.658 6.841 3.788
3.602 8.172 4.194 6.593 6.419 5.238 4.808 8.703 4.466 4.606
3.182 4.924 8.534 8.445 3.741 3.332 6.821 3.660 4.134 5.377
7.183 6.466 3.318 3.937 5.726 4.084 6.519 7.078 4.742 4.360
4.331 3.406 5.992 7.247 4.044 7.214 5.284 8.227 8.799 3.479
6.352 6.835 8.688 5.886 6.280 3.429 6.218 4.101 4.089 7.351
6.479 8.273 4.817 6.797 3.210 7.543 7.880 6.729 5.621 3.623
8.089 4.486 5.967 8.620 4.546 5.904 6.570 6.844 7.649 4.223

Следующие статьи помогут вам в решении данной задачи:

Оставить комментарий

Вы должны войти, чтобы оставить комментарий.

 

DjAlex77

Пользователь

Сообщений: 116
Регистрация: 30.06.2015

Всем доброго времени суток! Уважаемые форумчане помогите пожалуйста:
Необходимо по столбцу 1 (A) найти номер строки с самой ранней (мин) датой, но при этом по столбцу 8 (H), найденной строки, значение ячейки должно быть больше 0.
Если возможно, интересуют оба варианта: и макросом и формулами

Дальше думаю смогу сам:
Если такая строка найдена, в ячейку столбца 4 (D) вставляем Дату Вывоза (Ячейка I1), а в ячейку столбца 6 (F) вставляем значение из ячейки столбца 3 (С).
Далее ищем новую строку с минимальной датой и т.д. пока значение Осталось вывезти (Ячейка F1) не сойдёт в 0.
В приложенном примере, на втором листе то, что должно получится.

Для чего нужно, если кому интересно:
Есть товар, расфасованный в разную тару, с разными датами поступления на склад. При отгрузках со склада списывается по правилу первое пришло — первое ушло. Частичная отгрузка из одной ёмкости возможна, для списания остатка из одной ёмкости есть раздел «Вывоз №2».

Заранее Благодарен!

Прикрепленные файлы

  • 000.xlsx (19.85 КБ)

 

БМВ

Модератор

Сообщений: 21621
Регистрация: 28.12.2016

Excel 2013, 2016

В H формула, но куда её вставлять далее я честно говоря не понял.

По вопросам из тем форума, личку не читаю.

 

DjAlex77

Пользователь

Сообщений: 116
Регистрация: 30.06.2015

БМВ, Спасибо большое.
Работает, номер нужной строки выводит. Вот только если захожу в формулу подправить диапазоны эти скобки {} пропадают и формула выдаёт 0.
Подскажите пожалуйста как правильно вставлять в другую ячейку эту формулу, чтоб работала.

 

DjAlex77

Пользователь

Сообщений: 116
Регистрация: 30.06.2015

Мне удалось получить номер нужной строки через формулу ДМИН. Формула коротенькая, пришлось только добавить столбец с номерами строк.
Далее ,зная номер строки, планирую макросом (знаю как) вставлять нужные значения в нужные ячейки.

Вот бы кто помог с макросом данной формулы?!

 

БМВ

Модератор

Сообщений: 21621
Регистрация: 28.12.2016

Excel 2013, 2016

#5

25.05.2018 09:00:43

Цитата
DjAlex77 написал:
формула выдаёт 0.

Это формула массива вводится CTRL+SHIFT+ENTER Ну а так, если есть возможность использовать доп. столбец, то в большинстве случаев это только снижает нагрузку, ну и соответственно делает формулы компактнее

По вопросам из тем форума, личку не читаю.

 

buchlotnik

Пользователь

Сообщений: 3863
Регистрация: 31.10.2014

Excel 365 Бета-канал

#6

25.05.2018 09:01:55

Цитата
DjAlex77 написал:
скобки {} пропадают

это формула массива — после редактирования нажимайте Ctrl + Shift + Enter
и если правильно понял задачу можно чутка короче: =НАИМЕНЬШИЙ(ЕСЛИОШИБКА(СТРОКА($A$7:$A$33)/($H$7:$H$33>0);»»);СТРОКА(A1))

Прикрепленные файлы

  • Copy of 000.xlsx (20.49 КБ)

Изменено: buchlotnik25.05.2018 09:17:48

Соблюдение правил форума не освобождает от модераторского произвола
<#0>

 

DjAlex77

Пользователь

Сообщений: 116
Регистрация: 30.06.2015

БМВ, buchlotnik,
Спасибо Большое!

 

БМВ

Модератор

Сообщений: 21621
Регистрация: 28.12.2016

Excel 2013, 2016

buchlotnik, Тезка, привет. Ну при условии корректной сортировки дат по возрастанию — да, можно короче, это я перебдил.

По вопросам из тем форума, личку не читаю.

 

DjAlex77

Пользователь

Сообщений: 116
Регистрация: 30.06.2015

БМВ,  У меня как раз даты не по порядку сверху вниз, а в разнобой.

 

DjAlex77

Пользователь

Сообщений: 116
Регистрация: 30.06.2015

БМВ,
Ещё раз спасибо!
Ваша формула оказалась удобнее в применении, чем мастерить дополнительный столбец.

Подправьте пожалуйста формулу, чтоб не учитывала строки с пустыми ячейками в столбце дат.

 

DjAlex77

Пользователь

Сообщений: 116
Регистрация: 30.06.2015

#11

28.06.2018 07:36:50

Всем доброго времени суток.
БМВ, молчит.
Может кто-то всё же поможет?

{=ЕСЛИОШИБКА(ОКРУГЛ(ОСТАТ(НАИМЕНЬШИЙ(ЕСЛИ($AW$7:$AW$40>0;$B$7:$B$40+СТРОКА($B$7:$B$40)/10^5);1);1)*10^5;0);0)}

Помогите пожалуйста, как подправить формулу, чтоб не учитывала строки с пустыми ячейками в столбце дат ($B$7:$B$40)?

Изменено: DjAlex7728.06.2018 07:46:06

Формулировка задачи:

2. В массиве необходимо найти номер строки с минимальным элементом. Поменять местами строку с минимальным элементом и первую строку массива. Найти диапазон значений. Организовать удобный вывод на экран. (-25, 25, 8)

Код к задаче: «В массиве необходимо найти номер строки с минимальным элементом. Поменять местами строку с минимальным элементом и пе»

textual

begin
  var a:=ReadArrReal(ReadlnInteger('n='));
  WritelnFormat('Диапазон значений от {0} до {1}',a.Min,a.Max);
  Swap(a[0],a[a.IndexMin]);
  Writeln('Полученный массив:',a);
end.

Полезно ли:

10   голосов , оценка 3.200 из 5

Понравилась статья? Поделить с друзьями:
  • Как на компьютере найти календарь на
  • Как найти надежного поставщика товаров
  • Как найти имя пользователя гугл
  • Как найти сумму параллепипеда
  • Как найти свой город в тауншип