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

Реализация функции swap_min

18.08.2019, 15:14. Показов 1949. Ответов 10
Метки нет (Все метки)

Здравствуйте, пытаюсь решить на степике следующую задачу:
Реализуйте функцию swap_min, которая принимает на вход двумерный массив целых чисел, ищет в этом массиве строку, содержащую наименьшее среди всех элементов массива значение, и меняет эту строку местами с первой строкой массива.
Подумайте, как обменять строки массива, не обменивая элементы строк по-отдельности.
Требования к реализации: при выполнении этого задания вы можете определять любые вспомогательные функции. Вводить или выводить что-либо не нужно. Реализовывать функцию main не нужно.
Написал программу, вроде всё очевидно-просто, но даже первый тест не проходит. Подскажите пожалуйста, что я делаю не так?
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;
 
void swap_min(int *m[], unsigned rows, unsigned cols)
{
    int min = m[0][0];
    unsigned ni = 0;
    for (unsigned i = 0; i != rows; ++i)
        for (unsigned j = 0; j != cols; ++j)
            if (min > m[i][j]) {
                ni = i;
            }
    int* m_t = m[0];
    m[0] = m[ni];
    m[ni] = m_t;
}
 
int main()
{
    unsigned rows = 3;
    unsigned cols = 2;
 
    int **m = new int* [rows];
    for (unsigned i = 0; i != rows; ++i)
        m[i] = new int[cols];
 
    for (unsigned i = 0; i != rows; ++i) {
        for (unsigned j = 0; j != cols; ++j) {
            cin >> m[i][j];
        }
    }
 
    for (unsigned i = 0; i != rows; ++i) {
        for (unsigned j = 0; j != cols; ++j)
            cout << m[i][j] << '\t';
        cout << endl;
    }
 
    swap_min(m, rows, cols);
 
    cout << endl;
 
    for (unsigned i = 0; i != rows; ++i) {
        for (unsigned j = 0; j != cols; ++j)
            cout << m[i][j] << '\t';
        cout << endl;
    }
 
    for(unsigned i = 0; i != rows; ++i)
        delete [] m[i];
    delete [] m;
}
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.08.2019, 15:14
Ответы с готовыми решениями:

Реализуйте функцию swap_min
Функция принимает на вход двумерный массив целых чисел, ищет в этом массиве строку, содержащую...

Реализация функции печати результатов предыдущей функции
Была написана программа с функцией, находящая результат выражения с аргументом, значения которого...

Реализация функции c++
Программа: #include &lt;iostream&gt; using namespace std; struct Node { int data; Node*...

Реализация функции itoa
помогите написать реализацию функции itoa MyItoa(int,char*,int) и пожалуйста с комменториями

10
359 / 226 / 120
Регистрация: 25.06.2019
Сообщений: 830
18.08.2019, 15:18 2
Цитата Сообщение от SoulStealer Посмотреть сообщение
if (min > m[i][j])
min = ?
0
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 46
18.08.2019, 15:20  [ТС] 3
Цитата Сообщение от Pvt Посмотреть сообщение
min = ?
Я в начале функции написал:
C++
1
int min = m[0][0];
0
359 / 226 / 120
Регистрация: 25.06.2019
Сообщений: 830
18.08.2019, 15:22 4
я заметил, тут тогда и надо было заканчивать
0
812 / 500 / 210
Регистрация: 19.01.2019
Сообщений: 1,196
18.08.2019, 15:24 5
Цитата Сообщение от SoulStealer Посмотреть сообщение
Реализовывать функцию main не нужно.
Цитата Сообщение от SoulStealer Посмотреть сообщение
int main()
{
???
0
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 46
18.08.2019, 15:29  [ТС] 6
nalbe666,
main я для себя, что бы проверять. Я всё пишу в QT, а на степик только функцию вставляю.

Добавлено через 3 минуты
Цитата Сообщение от Pvt Посмотреть сообщение
я заметил, тут тогда и надо было заканчивать
Так разве не так сравнивают: сначала минимальному значению присваивается первое значение, а далее всё сравнивается с ним и если находится элемент меньше, то он переопределяется?
0
359 / 226 / 120
Регистрация: 25.06.2019
Сообщений: 830
18.08.2019, 15:31 7
Лучший ответ Сообщение было отмечено SoulStealer как решение

Решение

а обновлять не надо?
1
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 46
18.08.2019, 15:32  [ТС] 8
Pvt, стадно мне...
спасибо!
0
359 / 226 / 120
Регистрация: 25.06.2019
Сообщений: 830
18.08.2019, 15:33 9
Цитата Сообщение от SoulStealer Посмотреть сообщение
переопределяется
с чего вдруг?
0
0 / 0 / 0
Регистрация: 22.11.2012
Сообщений: 46
18.08.2019, 15:36  [ТС] 10
Цитата Сообщение от Pvt Посмотреть сообщение
с чего вдруг?
*обновляется
0
183 / 158 / 27
Регистрация: 13.08.2019
Сообщений: 606
22.08.2019, 07:04 11
Немного поздно, но всё-таки дополню ветку своей реализацией.
C++ (Qt)
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
/*Реализуйте функцию swap_min, которая принимает на вход двумерный массив целых чисел,
 * ищет в этом массиве строку, содержащую наименьшее среди всех элементов массива значение,
 * и меняет эту строку местами с первой строкой массива.
Подумайте, как обменять строки массива, не обменивая элементы строк по-отдельности.
Требования к реализации: при выполнении этого задания вы можете определять любые вспомогательные функции.
Вводить или выводить что-либо не нужно. Реализовывать функцию main не нужно.*/
 
#include <iostream>
#include <utility>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int Min(int *array, size_t len);
int Swap2dArray(int *ptr[], int rows, int columns);
 
int main()
{
    int rows = 3;
    int colunms = 5;
    int matrix [rows][colunms] = {{1,2,3,4,5},{6,7,8,9,0},{4,2,4,6,-3}}; // массив
    int *ptr[rows];                //массив указателей на строки
    for (int i = 0; i <rows; i ++)
        ptr[i] = matrix[i];     // присваеваем указателю конкретную строку из двумерного массива
    Swap2dArray(ptr,rows,colunms); // вызываем функцию для поиска минимального значения и свапа строк
                                      return 0;
}
 
/*********Функция для нахождения минимального значения в одномерном массиве****/
int Min(int *array, size_t len)
{
    int min = array[0];
    for(size_t i = 0; i < len; i++)
    {
        if (array[i] < min)
        {
            min = array[i];
        }
    }
    return min;
}
/******Функция для свапа нулевой строки со стройко с самым минимальным элементом****/
int Swap2dArray(int *ptr[], int rows, int columns)
{
    int min = ptr[0][0]; //иницилазируем минимальное значение нулевым элементом двумерного массива
    int tmp = 0; // временная переменная для хранения минимального значения
    int *swap;  // указатель, который используется для временного хранения строк массива
    int num_min_row = 0; // номер строки, в которой содержится самый минимальный элемент
    int coun_min_val = 0; // счетчик минимальных значений по строкам.
    int min_array[columns]; // временный массив, в котором хранятся все минимальные значения из каждой строки
 
 
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < columns; j++)
        {
        cout << ptr[i][j] << "\t"; // выводим первую строку массива
        }
        tmp = Min(ptr[i], columns);  // находим минимальное значение
        if(tmp<= min)
        {
            min = tmp;
            min_array[coun_min_val] = min; // помещаем минимальное значение в массив для минимальных значений
            coun_min_val++;
        };
        cout << endl;
    }
 
    for(int i = 0; i < columns; i++)
    {
        if(min == min_array[i])     // находим индекс строки, в которой был найдет самый минимальны элемент
            break;
        else num_min_row++; // увеличиваем счетчик строк с минимальным элементом
 
    }
    cout << "Min val and index row:" << min << " "<< num_min_row << endl;
    swap = ptr[0];              // меняем положения строк с помощью указателей без копирования элементов строк
    ptr[0] = ptr [num_min_row];
    ptr[num_min_row] = swap;
 
 
    for (int i = 0; i < rows; i++)  // выводим на экран результат
    {
        for (int j = 0; j < columns; j++)
        {
        cout << ptr[i][j] << "\t";
        }
        cout << endl;
    }
 
  return 0;
}
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.08.2019, 07:04

Реализация функции принтф
Хелпуем товарищи, треба написать свою фукнцию принтф с форматной строкой(правда она слегка иная,...

Реализация friend функции
Есть код. Нужно реализовать вывод ответа через friend. Подскажите пожалуйста как это сделать?...

Реализация функции srcat.
Я написал (реализовал) функцию strcat. Вот ... #include &quot;stdafx.h&quot; #include &lt;iostream&gt;...

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


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

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

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