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

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

02.05.2018, 00:46. Просмотров 3851. Ответов 19
Метки нет (Все метки)

Помогите, кто может! Нигде помощи не нашла, хотя подобные темы есть; не получается, а скоро сдавать. Динамический или статический- не важно.
Если не трудно, объясните кратко
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
02.05.2018, 00:46
Ответы с готовыми решениями:

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

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

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

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

19
267 / 197 / 162
Регистрация: 02.05.2017
Сообщений: 792
02.05.2018, 18:49 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
#include <iostream>
#include <iomanip>
#include <ctime>
 
using namespace std;
 
int main()
{
    srand(time(0));
 
    int n(0),m(0),elem(0),_i(0);
    cout << "Enter n : ";cin >> n;
    cout << "Enter m : ";cin >> m;
 
    int ** matrix = new int*[n];
    for(int i = 0;i<n;++i)matrix[i] = new int[m];
 
    for(int i = 0;i<n;++i){
        for(int j = 0;j<m;++j){
            matrix[i][j] = rand() % 16 - 8;
            cout << setw(4) << matrix[i][j];
            if(matrix[i][j]< 0 && elem == 0)elem = matrix[i][j];
            if(matrix[i][j]< 0 && matrix[i][j] > elem){
                elem = matrix[i][j];
                _i = i;
            }
        }
        cout << "\n";
    }
    cout << "\n\n";
 
    for(int i = 0;i<n;++i){
        for(int j = 0;j<m;++j){
            if(i==0){                 // Если именно "первый", как ты написал - замени в 0 на 1
                int temp(matrix[i][j]);
                matrix[i][j] = matrix[_i][j];
                matrix[_i][j] = temp;
            }
            cout << setw(4) << matrix[i][j];
        }
        cout << "\n";
    }
    for (int i=0;i<n;++i)delete []matrix[i];
    delete [] matrix;
 
    cout << endl;
    return 0;
}

Не по теме:

На g++в бубунте 17.10 работает. Проверенно мною же

0
4422 / 3013 / 1836
Регистрация: 18.12.2017
Сообщений: 9,464
03.05.2018, 01:11 3
Лучший ответ Сообщение было отмечено Appi19 как решение

Решение

Используем динамический массив, т.к. его размер вводится с клавиатуры. Рандом не используем (т.к. по условию менять строку, а не строки, т.е. одну, а при случайном заполнении строк с отрицательными max может быть несколько). Массив вещественный (не целочисленный, т.е тип массива double).
Цитата Сообщение от Appi19 Посмотреть сообщение
Если не трудно, объясните кратко
если есть вопросы - спрашивайте

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
#include <iostream>
#include <iomanip>
using namespace std;
 
int main()
{
    int n, m, k=0, ifirst=0, jfirst=0, imax=0;
    cout <<"Enter n: "; cin >>n;
    cout <<"Enter m: "; cin >>m;
    
      double **a = new double*[n], max=0; 
    for (int i = 0; i < n; i++)
       a[i] = new double[m];
    
    cout <<"Enter matrix elements:\n";
    for (int i = 0; i < n; i++)
    for (int j = 0; j < m; j++) 
      cin >> a[i][j];
      
    for (int i = 0; i < n; i++)  
    {
    for (int j = 0; j < m; j++)
    cout <<setw(3)<<a[i][j]<<" ";
        cout << endl;
    }
    cout << endl;
    
    for (int i = 0; i < n; i++)
    {
    for (int j = 0; j < m; j++)
    if (a[i][j]<0) {ifirst=i, jfirst=j; k++; break;}
    if (k==1) break;    
    }   
    
    for (int i = 0; i < n; i++) 
    for (int j = 0; j < m; j++)
    if (a[i][j]<0 && ((i == ifirst && j==jfirst) || a[i][j]>max)) {max=a[i][j]; imax=i;}    
    
    swap (a[0], a[imax]);
    
    for (int i = 0; i < n; i++)  
    {
    for (int j = 0; j < m; j++) 
    cout <<setw(3)<<a[i][j]<<" ";
        cout << endl;
    }
    cout << endl;
    
    for (int i = 0; i < n; i++)
    delete [] a[i];
    delete [] a;
system("pause");
return 0;
}
2
0 / 0 / 0
Регистрация: 02.05.2018
Сообщений: 12
03.05.2018, 19:02  [ТС] 4
Простите, что затрудняю вас еще раз, но не могли бы вы подсказать, как правильно сделать так, чтобы матрица выводилась рандомно(пользователь вводить только количество строк и столбцов; можно просто размерность, в случае квадратной матрицы)?
Я пыталась сделать следующим образом, но у меня не работает:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
srand(time (NULL));
 int n, m, k=0, ifirst=0, jfirst=0, max, imax=0;
 max=-10000;
 cout<<"Введите размер массива"<<endl;
 cin>>n;
 cout<<"\n"<<"Заданная матрица размером "<<n<<"*"<<n<<" со случайными числами \n"<<endl;
 double **a = new double*[n]; 
 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() % 200-100;
   cout<<setw(3)<<a[i][j]<<" ";
  }
   cout<<endl;
 }
 cout<<endl;
0
0 / 0 / 0
Регистрация: 02.05.2018
Сообщений: 12
03.05.2018, 19:15  [ТС] 5
Почему то меняет не те строки в вашей программе
0
Миниатюры
В заданной матрице поменять местами первую строку со строкой, содержащей максимальный отрицательный элемент матрицы  
Изображения
 
0 / 0 / 0
Регистрация: 02.05.2018
Сообщений: 12
03.05.2018, 19:18  [ТС] 6
LegionK, простите, я заменила на единицу, как вы написали, но меняет на вторую строку, как сделать правильно?
0
Миниатюры
В заданной матрице поменять местами первую строку со строкой, содержащей максимальный отрицательный элемент матрицы  
4422 / 3013 / 1836
Регистрация: 18.12.2017
Сообщений: 9,464
03.05.2018, 20:40 7
Цитата Сообщение от Appi19 Посмотреть сообщение
Почему то меняет не те строки в вашей программе
в каком смысле не те ? Скрин 1 - максимальный отрицательный: -1, находится в строке 4. Строку 4 поменяли местами с первой строкой.
Скрин 2 - максимальный отрицательный: -30, находится в строке 2. Строку 2 поменяли местами с первой строкой.

Добавлено через 2 минуты
Цитата Сообщение от Appi19 Посмотреть сообщение
чтобы матрица выводилась рандомно
уже сообщал что рандом не подходит под условие Вашей задачи
0
0 / 0 / 0
Регистрация: 02.05.2018
Сообщений: 12
03.05.2018, 20:43  [ТС] 8
Yetty, да, простите пожалуйста, хотела удалить тот ответ, но уже не было возможности. Виновата, все верно! Я не правильно сравнивала.
В описании к работе написано: "Ввести с клавиатуры целое число, которое будет задавать размерность
матрицы. Задать матрицу случайных вещественных чисел (числа должны быть
положительными и отрицательными). Провести преобразования по варианту
(если дополнительно не указано, сравнение проводить по абсолютной
величине)."
Преподаватель сказал, что можно использовать статический или динамический метод, но делать рандомно, чтобы матрица была задана случайными числами. Сама его порой не понимаю.
0
4422 / 3013 / 1836
Регистрация: 18.12.2017
Сообщений: 9,464
03.05.2018, 21:09 9
Appi19, перестаньте извиняться. мне совсем не тяжело подсказать, если есть вопросы. Рандом так рандом,
только поставьте задачу (другую). Например рандом выдал:

3 5 6 7
-1 2 -1 2
2 3 8 -9
-1 -1 3 4
6 7 -1 5

Что на что меняем ?

Цитата Сообщение от Appi19 Посмотреть сообщение
Ввести с клавиатуры целое число, которое будет задавать размерность
матрицы.
Цитата Сообщение от Appi19 Посмотреть сообщение
Преподаватель сказал, что можно использовать статический или динамический метод
можно это оставить без комментариев ?

Добавлено через 11 минут
Цитата Сообщение от Appi19 Посмотреть сообщение
Сама его порой не понимаю.
Вы намекаете что я не использую в данной задаче случайное заполнение из-за того, что не могу его применить на практике ?
0
0 / 0 / 0
Регистрация: 02.05.2018
Сообщений: 12
03.05.2018, 21:35  [ТС] 10
Нет, я написала это к тому, что тоже не понимаю преподавателя в том плане: как мне задавать рандом, если он выведет в нескольких строках нужное мне значение. Там ведь не понятно, что на что менять.

Добавлено через 10 минут
Наверное он рандомно выберет, что на что заменять
0
4422 / 3013 / 1836
Регистрация: 18.12.2017
Сообщений: 9,464
03.05.2018, 21:59 11
Цитата Сообщение от Appi19 Посмотреть сообщение
Там ведь не понятно, что на что менять.
Конечно можно заполнять матрицу случайно, но тогда и условие должно быть сформулировано соответствующим образом, например: "В заданной матрице поменять местами первую строку со строками, содержащими максимальный отрицательный элемент матрицы" или "В заданной матрице поменять местами первую строку с первой (последней) из строк, содержащей максимальный отрицательный элемент матрицы" - это всё можно реализовать, так что уточняйте что именно нужно.
Цитата Сообщение от Appi19 Посмотреть сообщение
Наверное он рандомно выберет, что на что заменять
у Вас есть чувство юмора... впрочем номер строки действительно можно выбрать случайным образом...
0
0 / 0 / 0
Регистрация: 02.05.2018
Сообщений: 12
03.05.2018, 22:04  [ТС] 12
Yetty, В задании написано следующее: "в заданной матрице поменять местами первую строку со строкой,
содержащей максимальный отрицательный элемент матрицы".
Видимо, преподаватель, составляющий методичку, не задумывался о таких подробностях. Я думаю, если такой случай произойдет, то преподаватель попросит выполнить заново или же просто посмотрит, чтобы какая то из подходящих строк заменилась на первую( т.е. чтобы просто проверить факт корректной работы программы).
0
4422 / 3013 / 1836
Регистрация: 18.12.2017
Сообщений: 9,464
03.05.2018, 22:10 13
Цитата Сообщение от Appi19 Посмотреть сообщение
у меня не работает
Пробуем ввести кроме n ещё и m (или для квадратной меняем все m на n), получается ?
0
0 / 0 / 0
Регистрация: 02.05.2018
Сообщений: 12
03.05.2018, 22:17  [ТС] 14
Yetty, заменила все m на n (для квадратной), наблюдаю теперь такую картину, дальше ничего не делает
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
#include <iostream>
#include <iomanip>
#include <ctime>
#include <stdlib.h>
#include <memory>
#include <clocale>
using namespace std;
int main()
{
setlocale(LC_ALL, "Russian");
srand(time (NULL));
 int i, j, n, max, m, ifirst=0, jfirst=0, k=0, imax=0;
 
 max=-10000;
 cout<<"Введите размер массива"<<endl;
 cin>>n;
 cout<<"\n"<<"Заданная матрица размером "<<n<<"*"<<n<<" со случайными числами \n"<<endl;
 double **a = new double*[n]; 
 for (i = 0; i < n; i++)
 {
   a[i] = new double[n];
 }
 for (i = 0; i < n; i++)
 {
  for (j = 0; j < n; j++) 
  { a[i][j]=rand() % 200-100;
   cout<<setw(5)<<a[i][j]<<" ";
  }
   cout<<endl;
 }
 cout<<endl;
 
 for (i = 0; i < n; i++)
 {
 for (j = 0; j < m; j++)
 if (a[i][j]<0) {ifirst=i, jfirst=j; k++; break;}
 if (k==1) break; 
 } 
 
 for (i = 0; i < n; i++) 
 for (j = 0; j < m; j++)
 if (a[i][j]<0 && ((i == ifirst && j==jfirst) || a[i][j]>max)) {max=a[i][j]; imax=i;} 
 
 swap (a[0], a[imax]);
 
 for (i = 0; i < n; i++) 
 {
 for (j = 0; j < m; j++) 
 cout<<setw(5)<<a[i][j]<<" ";
 cout<<endl;
 }
 cout<<endl;
 for (i = 0; i < n; i++)
 delete [] a[i];
 delete [] a;
system("pause");
return 0;
}
0
Миниатюры
В заданной матрице поменять местами первую строку со строкой, содержащей максимальный отрицательный элемент матрицы  
4422 / 3013 / 1836
Регистрация: 18.12.2017
Сообщений: 9,464
03.05.2018, 22:21 15
Цитата Сообщение от Appi19 Посмотреть сообщение
max=-10000;
и это сотрите пожалуйста если не сложно

Добавлено через 2 минуты
Цитата Сообщение от Appi19 Посмотреть сообщение
заменила все m на n
Вы в этом уверены ?
0
0 / 0 / 0
Регистрация: 02.05.2018
Сообщений: 12
03.05.2018, 22:25  [ТС] 16
Yetty, ну конечно же я упустила:
Теперь все работает!
0
4422 / 3013 / 1836
Регистрация: 18.12.2017
Сообщений: 9,464
03.05.2018, 22:32 17
Appi19, сформулируйте что Вы решаете. Не забывайте, что при случайном заполнении максимальный отрицательный может оказаться и в первой строке.

Добавлено через 5 минут
Цитата Сообщение от Appi19 Посмотреть сообщение
Теперь все работает!
Вопрос в том ли правильно? Например тип max если матрица вещественных чисел точно не int.
1
0 / 0 / 0
Регистрация: 02.05.2018
Сообщений: 12
03.05.2018, 22:38  [ТС] 18
Это понятно. Еще раз вам огромное спасибо

Добавлено через 1 минуту
Это сейчас буду редактировать, написала тогда все сразу, чтобы быстрее к сути перейти. Надеюсь, что правильно.
0
267 / 197 / 162
Регистрация: 02.05.2017
Сообщений: 792
04.05.2018, 05:21 19
Appi19, Yetty уже решил проблему. Но просто сверху, для справки : элементы в массивах в большинстве языков программирования (в с++ тоже) нумеруются с 0. Если например есть массив : 1 2 3 , то первый элемент - 2 , а нулевой - 1,третий - 3. Так же и со строками и столбцами в матрице.
0
4422 / 3013 / 1836
Регистрация: 18.12.2017
Сообщений: 9,464
04.05.2018, 13:52 20
Цитата Сообщение от LegionK Посмотреть сообщение
нумеруются с 0. Если например есть массив : 1 2 3 , то первый элемент - 2 , а нулевой - 1,третий - 3. Так же и со строками и столбцами в матрице.
LegionK, различайте индексацию и нумерацию (позицию). массив 1 2 3. первый элемент 1, его индекс 0. второй элемент 2, его индекс 1. третий элемент 3, его индекс 2. Матрица 3x3:
3 7 5 - первая строка матрицы
2 1 3 - вторая строка матрицы
9 2 7 - третья строка матрицы
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.05.2018, 13:52

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

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

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

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

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


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

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

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