1 / 1 / 0
Регистрация: 14.12.2017
Сообщений: 63
1

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

19.04.2019, 20:27. Показов 1308. Ответов 8
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Задание: В заданной матрице поменять местами: 1) строку с указанным номером и строку, содержащую минимальный элемент среди элементов с неотрицательным значением. 2) первую строку и строку, содержащую максимальный элемент среди элементов с неположительным значением.
__
ПРОБЛЕМА! - Не меняет строки матрицы, в чем ошибка???

p.s. В программе представлен 1 пункт из задания. (по возможности помогите и со 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
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
93
94
95
96
97
98
99
100
101
102
103
#include<iostream>
#include <locale.h>
#include <cctype>
#include<stdlib.h>
using namespace std ;
 
 
using namespace std ;
const int RAZ = 10 ;
typedef int telem ;
typedef telem tmatr[RAZ][RAZ] ;
void input_matr(tmatr, int&, int&) ;
void minimal(tmatr b, int Ryad, int n, int m);
void output(tmatr a, int n, int m);
void zamena(tmatr a, int Ryad);
 
int main()
 
{
 
 
setlocale(LC_ALL,"Russian");
    tmatr a ;
 int imax ;
 telem max ;
 int str ;
 int sto ;
int R;
 
 input_matr(a, str, sto) ;
 minimal(a, R, str, sto);
 
//Вывод результата поиска строки с минимальным элементом
cout  << R<< endl;
cout << "Минимальный  элемент находится в  " << R << "-й строке исходного массива " << endl << endl;
//zamena(a,R);
 
}
 //main_end_________________________________
 
 
 
//Ввод исходных данных
 
void input_matr(tmatr a, int &str, int &sto)
{
cout << "Введите число строк в массиве <= " << RAZ << " " ;
cin >> str ;
cout << "Введите число столбцов в массиве <= " << RAZ << " " ;
cin >> sto ;
cout << "Введите построчно через пробел значения элементов" << endl ; cout << "двумерного массива размера " << str << "x" << sto << endl ;
cout << "После ввода каждой строки нажимайте <Enter>" << endl ;
for(int i = 0 ; i < str ; i++)
for(int j = 0 ; j < sto ; j++) cin >> a[i][j] ;
return ; }
 
 
void output(tmatr a, int n, int m)
{
for (int i = 0; i < n; i++)
{
    for (int j = 0; j < m; j++)
        cout << a[i][j] << " ";
     cout << endl;
}
}
 
 
 
void minimal (tmatr b, int Ryad, int n, int m)
{
int min = b[1][1];
 
int i,j;
 
for (int i = 1; i<=n; i++)
{
for (int j = 1; j<=m; j++)
{
if (b[i][j] < min)
{
min = b[i][j];
Ryad = i;
        }
    }
}
 
cout << Ryad;
 
}
 
/* /void zamena (tmatr a, int Ryad)
{
int i = 0;
int j = 0;
    int tmp = a[0][j];
for (int i = 0; i < n; i++ && j++)
{ tmp = a[0][j];
  a[0][j] = a[Ryad][j];
  a[Ryad][i] = tmp;
}
}
*/
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.04.2019, 20:27
Ответы с готовыми решениями:

В матрице поменять местами строку, содержащую минимальный элемент, со строкой, содержащей максимальный элемент
В произвольной матрице i=1, M , j=1, N поменять местами строку, содержащую минимальный элемент, со...

В матрице поменять местами строку, содержащую минимальный элемент, со строкой, содержащей максимальный элемент массива
Помогите пожалуйста поправить код... Задание:В двумерном N*K массиве целых чисел поменять местами...

В заданной матрице поменять местами строку, содержащую максимальный элемент со строкой, содержащей минимальный
Надо сделать к понедельнику. Задание по ПЯВУ, состоит из двух частей. Если первую часть я понимаю,...

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

8
6340 / 3511 / 1427
Регистрация: 07.02.2019
Сообщений: 8,977
20.04.2019, 01:25 2
sayurimayuri,
Кликните здесь для просмотра всего текста
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
#include <iostream>
 
typedef int size_type; 
typedef int value_type;
 
template<class T, size_type r, size_type c, class Binary_foo, class Unary_foo>
size_type find_row(T(&matrix)[r][c], Binary_foo bf, Unary_foo uf)
{
    size_type row_ret{};
    T compare{};
    bool flag{};
    for (size_type row{}; row < r; ++row)
        for (size_type col{}; col < c; ++col)
            if (flag && uf(matrix[row][col]) && bf(matrix[row][col], compare))
            {
                row_ret = row;
                compare = matrix[row][col];
            }
            else
                if (!flag && uf(matrix[row][col]))
                {
                    flag = true;
                    row_ret = row;
                    compare = matrix[row][col];
                }
    return row_ret;
}
 
template<class T, size_type r, size_type c>
std::ostream& operator<<(std::ostream& os, T(&matrix)[r][c])
{
    for (size_type row{}; row < r; ++row)
    {
        for (size_type col{}; col < c; ++col)
            os << matrix[row][col] << ' ';
        os << std::endl;
    }
    return os;
}
 
int main()
{
    const size_type rows = 4;
    const size_type cols = 5;
    value_type matrix [rows][cols]
    {
        {-4,-3, 3, 5, 5},
        { 2,-3, 0, 4, 6},
        { 3,-8,-2, 5, 7},
        { 0, 5, 6,-1, 8}
    };
    std::cout << matrix << "\nchoose the line: ";
 
    size_type user_row{};
    while (std::cin >> user_row && user_row < 1 && rows < user_row);
    if (!std::cin) return -1;
    --user_row;
 
    size_type to_swap = find_row(matrix, std::less(), [](value_type val)
    {
        return std::isgreaterequal(val, 0);
    });
    std::swap(matrix[user_row], matrix[to_swap]);
 
    std::cout << "\ntask one:\n" << matrix;
 
    user_row = 0;
    to_swap = find_row(matrix, std::greater(), [](value_type val)
    {
        return std::islessequal(val, 0);
    });
    std::swap(matrix[user_row], matrix[to_swap]);
 
    std::cout << "\ntask two:\n" << matrix;
}
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.04.2019, 02:17 3
sayurimayuri, таких минимальных в матрице может быть несколько и находиться они могут в разных строках, поэтому код для такого условия:
В заданной матрице поменять местами: 1) строку с указанным номером и строку, содержащую первый минимальный элемент среди элементов с неотрицательным значением.
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
#include <iostream>
#include <iomanip>
#include <cstdlib>
#include <ctime>
using namespace std;
 
int main()
{
    srand((int)time(0));
    int n, m, index_min=0, k;
    cout << "n="; cin >> n;
    cout << "m="; cin >> m;
    
      double **a = new double*[n], min_pos=-1.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 && (min_pos==-1.0 || a[i][j]<min_pos)) {min_pos=a[i][j];index_min=i;}
    cout << setw(2) << a[i][j] << " ";
    }
    cout << "\n";
    }
    
    if (min_pos!=-1.0)
    {    
    cout << "Row="; cin >> k;
    
    swap (a[k-1],a[index_min]);
    
    for (int i = 0; i < n; i++)
    {
    for (int j = 0; j < m; j++) 
    cout << setw(2) << a[i][j] << " ";  
    cout << "\n";
    }
    }
    else cout << "Non-negative elements are absent\n";
 
    for (int i = 0; i < n; i++)
    delete[]a[i];
    delete[]a;
 
system("pause");
return 0;
}
вторую часть задания реализуйте самостоятельно.
0
1 / 1 / 0
Регистрация: 14.12.2017
Сообщений: 63
20.04.2019, 09:37  [ТС] 4
Yetty, спасибо вам, который раз!)
а вторая часть программы там меняются только знаки "меньше/больше"?
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.04.2019, 12:40 5
Цитата Сообщение от sayurimayuri Посмотреть сообщение
вторая часть программы там меняются только знаки "меньше/больше"?
знаки поменять конечно нужно. прочитайте условие 2) части - потребуются ещё некоторые корректировки. кроме того, решите как соединить две части задачи - организовать выбор ( первая часть или вторая часть ) или просто последовательно выполнить. однотипные действия желательно вынести в функции.
0
1 / 1 / 0
Регистрация: 14.12.2017
Сообщений: 63
20.04.2019, 12:52  [ТС] 6
Yetty, у меня появился вопрос по вашей программе. а зачем вы задаете ряд, для перестановки строк? если должно по условию менять строку с минимальным элементом?
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.04.2019, 13:00 7
Цитата Сообщение от sayurimayuri Посмотреть сообщение
зачем вы задаете ряд
какой ряд ? есть матрица, она случайным образом заполняется числами, одновременно находится первый min элемент среди элементов с неотрицательным значением и его индекс. затем строка с номером k меняется со строкой с этим индексом.
0
1 / 1 / 0
Регистрация: 14.12.2017
Сообщений: 63
20.04.2019, 19:35  [ТС] 8
Yetty, таак. меня смутило, то что рандомом задается матрица, но это ладно.. но вот потом программа спрашивает какую строчку поменять, когда она должна сама определять где минимальное значение и менять.
я полистала форум, и нашла похожую тему. вы там ответили программой и она более менее подходит под мое условие. я ее переделала под себя немного, но вот вопрос, как ее сделать через статический двумерный массив??
0
7437 / 5029 / 2892
Регистрация: 18.12.2017
Сообщений: 15,692
20.04.2019, 19:52 9
sayurimayuri, рандом чтобы быстрее заполнять, как переделать под ввод с клавиатуры Вы уже спрашивали в другой теме, если не ошибаюсь.
Цитата Сообщение от sayurimayuri Посмотреть сообщение
она должна сама определять
номер первой строки для обмена - задаётся, индекс второй строки для обмена (с первым min) находится.
в чём Ваш вопрос ?
Цитата Сообщение от sayurimayuri Посмотреть сообщение
я ее переделала под себя немного
я сбросил код под условие задачи. что-то в нём переделывать - Ваше право, но сомневаюсь, что это нужно.
Цитата Сообщение от sayurimayuri Посмотреть сообщение
как ее сделать через статический двумерный массив?
если размер массива задаётся с клавиатуры, применяется динамический массив
0
20.04.2019, 19:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.04.2019, 19:52
Помогаю со студенческими работами здесь

Поменять в матрице местами строку с максимальным элементом и строку, содержащую min элемент
// 1=Указатели. Поменять местами строки.cpp : Defines the entry point for the console application....

Поменять в матрице местами первую строку и строку, содержащую максимальный неположительный элемент
Задание: В заданной матрице поменять местами первую строку и строку, содержащую максимальный...

В матрице поменять местами первую строку и строку, содержащую наибольший элемент матрицы
Помогите сделать работы через функции и процедуры... 1)Дан массив b1,b2…b2n . Написать программу...

Найти строку, содержащую минимальный элемент матрицы. Найденную строку поменять местами с 4-ой строкой
Дана матрица А(5,3) 1. Найти строку, содержащую минимальный элемент матрицы 2. Найденную...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru