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

Перестановка строк в матрице (С++) - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.89
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
20.02.2012, 21:20     Перестановка строк в матрице (С++) #1
Здравствуйте ребята,очень нужна помощь
помогите пожалуйста написать программу..
смысл в том что
в программе я должна ввести любую матрицу размером 4*4,
после программа должна переставить строки в матрице..
а потом еще нужно определить номер строки матрицы,содержащей max элемент
ребятааа,очень нужно ((для лабораторной по информатике..(
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.02.2012, 21:20     Перестановка строк в матрице (С++)
Посмотрите здесь:

Перестановка столбцов в матрице C++
перестановка строк в матрице С++ C++
Перестановка строк матрицы C++
C++ Перестановка строк матрицы
C++ Перестановка диагоналей в матрице
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
20.02.2012, 21:28     Перестановка строк в матрице (С++) #2
А как переставить?
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
20.02.2012, 21:35  [ТС]     Перестановка строк в матрице (С++) #3
фиг его знает,тут в книжке так написано(
завтра лучше у препода спрошу,и напишу тебе,окей?
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
20.02.2012, 22:36  [ТС]     Перестановка строк в матрице (С++) #4
всё я поняла...у меня есть программа которая переставляет строки в матрице как мне надо в задание...

у меня третий вариант)

вот прога:


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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
#include <iostream>
#include <math.h>
#include <stdio.h>
#include <conio.h>
using namespace std;
int main()
{
int D[4][4],M[4][4],Dmax,Mmax,R,i,j,ID,k,m,IM;
 
cout<<"Vvedite massiv a 4*4\n"<<endl;
for (i=0; i<4; i++)
for (j=0; j<4; j++)
cin>>D[i][j];
cout<<" Massiv B [4][4]:"<<endl;
for (i=0; i<4; i++)
for (j=0; j<4; j++)
M[i][j]= i==j ? (D[i][j] - D[j][i]):(D[i][j]+D[j][i]);
for (j=0; j<4; j++)
 {
    
   cout<<"  "<<M[0][j];
  } 
  cout<<endl<<endl;
  for (j=0; j<4; j++)
 {
    
   cout<<"  "<<M[1][j];
  } 
  cout<<endl<<endl;
  for (j=0; j<4; j++)
 {
    
   cout<<"  "<<M[2][j];
  } 
  cout<<endl<<endl;
  for (j=0; j<4; j++)
 {
    
   cout<<"  "<<M[3][j];
  } 
  cout<<endl<<endl;
 
 
 
cout<<endl; 
 
 
cout<<endl;
 
 
Dmax=D[1][1];
Mmax=M[1][1];
ID=1;
IM=1;
for (i=0; i<4; i++)
for (j=0; j<4; j++)
 
if (D[i][j]>Dmax) Dmax=D[i][j],ID=i;
for (i=0; i<4; i++)
for (j=0; j<4; j++) 
if (M[i][j]>Mmax) Mmax=M[i][j],IM=i;
 
ID=ID+1;
IM=IM+1;
cout<<endl<<endl<<" Nomer stroki max elementa massiva A IA="<<ID<<endl;
 
cout<<" Nomer stroki max elementa massiva B IB="<<IM<<endl;
ID=ID-1;
IM=IM-1;
if (ID>IM) 
for (j=0;j<4;j++)
{
R=D[0][j];
D[0][j]=D[ID][j];
D[ID][j]=R;
}
else 
for (j=0;j<4;j++)
{
R=M[0][j];
M[0][j]=M[IM][j];
M[IM][j]=R;
 
}
cout<<endl<<"Massive C:"<<endl<<endl;
 
if (ID<IM) 
for (j=0; j<4; j++)
 {
    
   cout<<"  "<<M[0][j];
  } 
  cout<<endl<<endl;
 if (ID<IM) 
  for (j=0; j<4; j++)
 {
    
   cout<<"  "<<M[1][j];
  } 
  cout<<endl<<endl;
  if (ID<IM)
  for (j=0; j<4; j++)
 {
    
   cout<<"  "<<M[2][j];
  } 
  cout<<endl<<endl;
  if (ID<IM)
  for (j=0; j<4; j++)
 {
    
   cout<<"  "<<M[3][j];
  } 
  cout<<endl<<endl;
if (ID>IM)
  for (j=0; j<4; j++)
 {
    
   cout<<"  "<<D[0][j];
  } 
  cout<<endl<<endl;
  if (ID>IM)
  for (j=0; j<4; j++)
 {
    
   cout<<"  "<<D[1][j];
  } 
  cout<<endl<<endl;
  if (ID>IM)
  for (j=0; j<4; j++)
 {
    
   cout<<"  "<<D[2][j];
  } 
  cout<<endl<<endl;
  if (ID>IM)
  for (j=0; j<4; j++)
 {
    
   cout<<"  "<<D[3][j];
  } 
  cout<<endl<<endl;
 
  
 
 cin>>i;
 
}
и в эту прогу мне надо вбить функцию,которая звучит так "определение номера строки матрицы,содержащей максимальный элемент"
Миниатюры
Перестановка строк в матрице (С++)  
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
20.02.2012, 23:10     Перестановка строк в матрице (С++) #5
Да там всё запутано как-то. С нуля бы написал, а в таком чужом коде неохота разбираться, извини.
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
20.02.2012, 23:15  [ТС]     Перестановка строк в матрице (С++) #6
а ты сможешь мне с нуля написать за неделю?)ну до выходных хотя бы)
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
20.02.2012, 23:24     Перестановка строк в матрице (С++) #7
Смогу. Ты только скажи чё надо-то? Ты же вроде как у препода собралась спрашивать
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
21.02.2012, 21:27  [ТС]     Перестановка строк в матрице (С++) #8
вот фотка,смотри 3 вариант..это моё задание...
потом когда это прога сделается,надо вбить туда вот эту функцию,которая звучит так "определение номера строки матрицы,содержащей максимальный элемент")))
поможешь,пожалуйста....

Добавлено через 3 минуты
вот тут 3й вариант ))

Добавлено через 3 минуты
ааа всё,смотри фотографию выше...вот мне по этому заданию в третьей варианте и надо сделать прогу...а потом в нее функцию вбить которую я выше написала
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
21.02.2012, 21:39     Перестановка строк в матрице (С++) #9
Не ну ты в программировании можешь не разбираться, но в вещах ты должна разбираться,
Я так понял, что
1) матрицу C мы генерим только в том, случае если !(IA> IB)
2) ввод данных я осуществлю рандомно. Тьфу, короче матрицу A заполняю случайными числами, матрицу B по правилам, которые там указаны
3) "определение номера строки матрицы,содержащей максимальный элемент". Я не знаю, что это значит, мы же по ходу задания уже ищем номера этих строк. Останется просто номера этих строк вывести и всё, с учётом того, что строчки могут быть поменяты местами
Там русским языком написано: вывести IA и IB (ну и IC) тоже

Так?
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
22.02.2012, 14:24  [ТС]     Перестановка строк в матрице (С++) #10
почитай там на счет матрицы С,там написано что если IA>IB то меняем местами 1 и IA-ю строки в матрице A,а если не больше то 1 и IB-ю строки в матрице B)

дааа..вот матрицы A это любые числа,но матрица 4 на 4...там написано )

Да вроде так...надо найти строки в матрице A и В кот.содержат максимальный элемент
но это надо делать через функцию типо,потому что мы их проходим)
а до этого мы делали каким то раком,без функции..как я скинула тебе прогу выше..
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
22.02.2012, 15:27     Перестановка строк в матрице (С++) #11
Цитата Сообщение от Christine Посмотреть сообщение
почитай там на счет матрицы С
Я тебя недаром спросил, разбираешшься ли ты в вещах- ты вообще читать умеешь? Там написано: "Если IA> IB, то поменять местами 1-ю и IA строки в матрице A, иначе 1-ю и IB строки в матрице B (матрица C)"
И далее:
"Вывести... C"

Что я должен тут прочесть о матрице C? Тут есть подтверждение или опровержение этому?
Цитата Сообщение от kravam Посмотреть сообщение
1) матрицу C мы генерим только в том, случае если !(IA> IB)
Блин, от тебя требуется самая малость- сесть и подумать и написать ЧЁ ПОНЯЛА из снимка, или сказать честно- что ты ничё не понимаешь в написанном ()- или спросить у препода на крайняк- ты ничё не хочешь делать.

Короче, напишу как понял, в пятницу смотри решение.
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
22.02.2012, 23:29     Перестановка строк в матрице (С++) #12
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <windows.h>
#include <stdio.h>
#include <time.h>
using namespace std;
 
int main () {
 
 //Это для русского языка, если ё
 SetConsoleCP (1251);
 SetConsoleOutputCP (1251);
 
 //Включим генератор случайных чисел
 srand (time(0));
 
 
 //матрица A 
 int A [4][4];
 //Заполним её случайными числами от 0 до 99 включительно 
 for (int i= 0; i< 4; i++)  
  for (int j= 0; j< 4; j++)  
   A[i][j]= rand()%100; 
 
 //матрица B 
 int B [4][4];
 //Заполним её по правилам, указанным в задании
 for (int i= 0; i< 4; i++) 
  for (int j= 0; j< 4; j++) 
   if (i==j) 
    B[i][j]=0;
   else   
    B[i][j]= A[i][j]+ A[j][i];
 
 //матрица C (может пригодиться, может нет, кто его знает)
 int C [4][4];
 //Заполним нолями
 for (int i= 0; i< 4; i++) 
  for (int j= 0; j< 4; j++) 
   C[i][j]= 0; 
 
                                 //+
                                 //+
                                 //+
                                 
 
 //Есть две заполненых матрицы, теперь найдём номера строк,
 //содержащих максималные элементы таблиц, IA и IB сответственно
 int IA, max_A; max_A= 0; 
 int IB, max_B; max_B= 0;
 
 //Побегаемся по матрицам 
 for (int i= 0; i< 4; i++) 
  for (int j= 0; j< 4; j++) { 
   //ДЛя матрицы A
   if (A[i][j]>= max_A) {
    max_A= A[i][j]; 
    IA= i;
   } 
   //и B соответственное
   if (B[i][j]>= max_B) {
    max_B= B[i][j]; 
    IB= i;
   } 
  }
  //После этого в переменной IA номер строки, содержащей максимальный 
  //элемент таблицы A
  //с переменной IB аналогично
  //Если окажется так, что есть несколько равных максимальных элементов, 
  //например 
  //в нулевой, второй и третьей строках, то IA будет содержать цифру 3
  //(третья строка)                                                      
  //Аналогично для переменой IB
 
                                 //+
                                 //+
                                 //+
  
  //Теперь выполняем или не выполняем обмен
  //ЭТО временая пременная для обмена переменных местами
  int temp;
 
  if (IA> IB) {
   //меняем 1 и IA строку местами. НЕобходимо учитывать, что нумерация
   //начинается c 1 (по условию задачи)
   if (!(IA)) {
    for (int i= 0; i< 4; i++) { 
     temp= A[0][i];
     A[0][i]= A[IA][i];
     A[IA][i]= temp;
    }
   }
  } 
  //А тут, как и договаривались, копируем 
  //B в C и меняем строки в матрице C
  //Копирование и перестановку местами можно было бы осуществит за один приём, 
  //(проход) но ну его на фиг 
  else {
   //сперва просто скопируем
   for (int i= 0; i< 4; i++)
    for (int j= 0; j< 4; j++)
     C[i][j]= B[i][j];
 
 
   
   //Так, а теперь поменяем местами нужные строки в матрице C
    for (int i= 0; i< 4; i++) { 
     temp= C[0][i];
     C[0][i]= C[IB][i];
     C[IB][i]= temp;
    }
  }
  
                                 //+
                                 //+
                                 //+
  //Ну и всё, осталось только вывести
  printf ("\n");
  printf ("\n");
  printf ("матрица B\n");
  for (int i= 0; i< 4; i++) {
   for (int j= 0; j< 4; j++) {
    printf ("%*d  ",4, B[i][j]);
   } 
   printf ("\n");
  }    
 
  printf ("\nномер строки в матрице A содержащей максимальный элемент  %d\n", ++IA);
  printf ("номер строки в матрице B содержащей максимальный элемент  %d\n", ++IB);
  printf ("\nматрица C\n");
  for (int i= 0; i< 4; i++) {
   for (int j= 0; j< 4; j++) {
    printf ("%*d  ",4, C[i][j]);
   } 
   printf ("\n");
  }    
 
 
 getchar (); 
 return 0;
}
Там есть одна деталь, мы определяем матрицу C, заранее не зная, пригодитсяли она нам. То есть мы выделяем память, которая может, и не пригодится. Это недостаток, но если его устранять это надо вводить динамические массивы, а препод может придраться, так что так оставим.

Чё надо спрашивай. Функция-то нужна?
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
23.02.2012, 17:51  [ТС]     Перестановка строк в матрице (С++) #13
Дааа функция конечно нужна)я тебе написала как она звучит выше )

и еще..смотри..я включаю прогу...открываю..и вот что...
Миниатюры
Перестановка строк в матрице (С++)  
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
23.02.2012, 17:53  [ТС]     Перестановка строк в матрице (С++) #14
может надо какую то другую прогу мне установить..а то у меня Dev C++

Добавлено через 1 минуту
твоя прога сразу почему то выдаёт какие то числа...
а мне надо сначала самой ввести массив A 4x4 и нажать Enter и она мне остальное выведет всё
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
23.02.2012, 19:37     Перестановка строк в матрице (С++) #15
У меня тоже Dev-Cpp, со шрифтами вообще заморочки те ещё, села так: когда запустится окно консоли, зайди в свойства косноли и поправь шрифт, там у тебя щас точечный стоит, а ты его исправь на Lucida Console; в принципе я бы тебе рекомендовал сделать это во всей системе. Это надо поправить реестр, но можно и разово править, как я тебя научил, главное что потом поставить галку, чтобы такой шрифт присутствовал для всех окон с тем же именем.

Добавлено через 11 минут
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
#include <windows.h>
#include <stdio.h>
#include <time.h>
using namespace std;
 
 
int main () {
 
 //Это для русского языка, если ё
 SetConsoleCP (1251);
 SetConsoleOutputCP (1251);
 
 //Включим генератор случайных чисел
 srand (time(0));
 
 
 //матрица A 
 int A [4][4];
 //Заполним её случайными числами от 0 до 99 включительно 
 for (int i= 0; i< 4; i++)  
  for (int j= 0; j< 4; j++)  
   scanf ("%d",&A[i][j]);
 
 //матрица B 
 int B [4][4];
 //Заполним её по правилам, указанным в задании
 for (int i= 0; i< 4; i++) 
  for (int j= 0; j< 4; j++) 
   if (i==j) 
    B[i][j]=0;
   else   
    B[i][j]= A[i][j]+ A[j][i];
 
 //матрица C (может пригодиться, может нет, кто его знает)
 int C [4][4];
 //Заполним нолями
 for (int i= 0; i< 4; i++) 
  for (int j= 0; j< 4; j++) 
   C[i][j]= 0; 
 
                                 //+
                                 //+
                                 //+
                                 
 
 //Есть две заполненых матрицы, теперь найдём номера строк,
 //содержащих максималные элементы таблиц, IA и IB сответственно
 int IA, max_A; max_A= 0; 
 int IB, max_B; max_B= 0;
 
 //Побегаемся по матрицам 
 for (int i= 0; i< 4; i++) 
  for (int j= 0; j< 4; j++) { 
   //ДЛя матрицы A
   if (A[i][j]>= max_A) {
    max_A= A[i][j]; 
    IA= i;
   } 
   //и B соответственное
   if (B[i][j]>= max_B) {
    max_B= B[i][j]; 
    IB= i;
   } 
  }
  //После этого в переменной IA номер строки, содержащей максимальный 
  //элемент таблицы A
  //с переменной IB аналогично
  //Если окажется так, что есть несколько равных максимальных элементов, 
  //например 
  //в нулевой, второй и третьей строках, то IA будет содержать цифру 3
  //(третья строка)                                                      
  //Аналогично для переменой IB
 
                                 //+
                                 //+
                                 //+
  
  //Теперь выполняем или не выполняем обмен
  //ЭТО временая пременная для обмена переменных местами
  int temp;
 
  if (IA> IB) {
   //меняем 1 и IA строку местами. НЕобходимо учитывать, что нумерация
   //начинается c 1 (по условию задачи)
   if (!(IA)) {
    for (int i= 0; i< 4; i++) { 
     temp= A[0][i];
     A[0][i]= A[IA][i];
     A[IA][i]= temp;
    }
   }
  } 
  //А тут, как и договаривались, копируем 
  //B в C и меняем строки в матрице C
  //Копирование и перестановку местами можно было бы осуществит за один приём, 
  //(проход) но ну его на фиг 
  else {
   //сперва просто скопируем
   for (int i= 0; i< 4; i++)
    for (int j= 0; j< 4; j++)
     C[i][j]= B[i][j];
 
 
   
   //Так, а теперь поменяем местами нужные строки в матрице C
    for (int i= 0; i< 4; i++) { 
     temp= C[0][i];
     C[0][i]= C[IB][i];
     C[IB][i]= temp;
    }
  }
  
                                 //+
                                 //+
                                 //+
  //Ну и всё, осталось только вывести
  printf ("\n");
  printf ("\n");
  printf ("матрица B\n");
  for (int i= 0; i< 4; i++) {
   for (int j= 0; j< 4; j++) {
    printf ("%*d  ",4, B[i][j]);
   } 
   printf ("\n");
  }    
 
  printf ("\nномер строки в матрице A содержащей максимальный элемент  %d\n", ++IA);
  printf ("номер строки в матрице B содержащей максимальный элемент  %d\n", ++IB);
  printf ("\nматрица C\n");
  for (int i= 0; i< 4; i++) {
   for (int j= 0; j< 4; j++) {
    printf ("%*d  ",4, C[i][j]);
   } 
   printf ("\n");
  }    
 
 
 getchar (); 
 return 0;
}
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
24.02.2012, 20:57  [ТС]     Перестановка строк в матрице (С++) #16
скопировала то что ты скинул,теперь вводиться матрица,как только нажимаю enter прога выключается..(
то что ты мне скинул,там надо шрифт менять или ты уже всё сделал?
и если честно я не знаю где тут шрифт менять..тут нету св-в консоли..я их не нашла...вот смотри меню проги...
и еще когда копирую с тебя в прогу,всё в каких то вопросиках))
вот смотри на фотке...
Миниатюры
Перестановка строк в матрице (С++)  
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
24.02.2012, 20:59  [ТС]     Перестановка строк в матрице (С++) #17
хотя вот еще раз скопировала,вопросики пропали,с ними разобралась...
на счет шрифта еще поясни..где это искать и нужно ли мне искать вообще,или ты уже исправил сам?
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
25.02.2012, 00:20     Перестановка строк в матрице (С++) #18
Вопросики это русский шрифт, комментарии мои.
Шрифт в консоли меняется так: сперва увидь саму косноль, потом жми:
Alt+Enter-> свойства-> шрифт-Lucida Console-> ОК-> сохранть свойства для всех окон с тем же именем->ОК
поправил код
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
#include <windows.h>
#include <stdio.h>
#include <time.h>
using namespace std;
 
 
int main () {
 
 //Это для русского языка, если ё
 SetConsoleCP (1251);
 SetConsoleOutputCP (1251);
 
 //Включим генератор случайных чисел
 srand (time(0));
 
 
 //матрица A 
 int A [4][4];
 //Заполним её случайными числами от 0 до 99 включительно 
 for (int i= 0; i< 4; i++)  
  for (int j= 0; j< 4; j++)  
   scanf ("%d",&A[i][j]);
 
 //матрица B 
 int B [4][4];
 //Заполним её по правилам, указанным в задании
 for (int i= 0; i< 4; i++) 
  for (int j= 0; j< 4; j++) 
   if (i==j) 
    B[i][j]=0;
   else   
    B[i][j]= A[i][j]+ A[j][i];
 
 //матрица C (может пригодиться, может нет, кто его знает)
 int C [4][4];
 //Заполним нолями
 for (int i= 0; i< 4; i++) 
  for (int j= 0; j< 4; j++) 
   C[i][j]= 0; 
 
                                 //+
                                 //+
                                 //+
                                 
 
 //Есть две заполненых матрицы, теперь найдём номера строк,
 //содержащих максималные элементы таблиц, IA и IB сответственно
 int IA, max_A; max_A= 0; 
 int IB, max_B; max_B= 0;
 
 //Побегаемся по матрицам 
 for (int i= 0; i< 4; i++) 
  for (int j= 0; j< 4; j++) { 
   //ДЛя матрицы A
   if (A[i][j]>= max_A) {
    max_A= A[i][j]; 
    IA= i;
   } 
   //и B соответственное
   if (B[i][j]>= max_B) {
    max_B= B[i][j]; 
    IB= i;
   } 
  }
  //После этого в переменной IA номер строки, содержащей максимальный 
  //элемент таблицы A
  //с переменной IB аналогично
  //Если окажется так, что есть несколько равных максимальных элементов, 
  //например 
  //в нулевой, второй и третьей строках, то IA будет содержать цифру 3
  //(третья строка)                                                      
  //Аналогично для переменой IB
 
                                 //+
                                 //+
                                 //+
  
  //Теперь выполняем или не выполняем обмен
  //ЭТО временая пременная для обмена переменных местами
  int temp;
 
  if (IA> IB) {
   //меняем 1 и IA строку местами. НЕобходимо учитывать, что нумерация
   //начинается c 1 (по условию задачи)
   if (!(IA)) {
    for (int i= 0; i< 4; i++) { 
     temp= A[0][i];
     A[0][i]= A[IA][i];
     A[IA][i]= temp;
    }
   }
  } 
  //А тут, как и договаривались, копируем 
  //B в C и меняем строки в матрице C
  //Копирование и перестановку местами можно было бы осуществит за один приём, 
  //(проход) но ну его на фиг 
  else {
   //сперва просто скопируем
   for (int i= 0; i< 4; i++)
    for (int j= 0; j< 4; j++)
     C[i][j]= B[i][j];
 
 
   
   //Так, а теперь поменяем местами нужные строки в матрице C
    for (int i= 0; i< 4; i++) { 
     temp= C[0][i];
     C[0][i]= C[IB][i];
     C[IB][i]= temp;
    }
  }
  
                                 //+
                                 //+
                                 //+
  //Ну и всё, осталось только вывести
  printf ("\n");
  printf ("\n");
  printf ("матрица B\n");
  for (int i= 0; i< 4; i++) {
   for (int j= 0; j< 4; j++) {
    printf ("%*d  ",4, B[i][j]);
   } 
   printf ("\n");
  }    
 
  printf ("\nномер строки в матрице A содержащей максимальный элемент  %d\n", ++IA);
  printf ("номер строки в матрице B содержащей максимальный элемент  %d\n", ++IB);
  printf ("\nматрица C\n");
  for (int i= 0; i< 4; i++) {
   for (int j= 0; j< 4; j++) {
    printf ("%*d  ",4, C[i][j]);
   } 
   printf ("\n");
  }    
 
 
 fflush(stdin);
 getchar (); 
 return 0;
}
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,270
26.02.2012, 21:23     Перестановка строк в матрице (С++) #19
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <windows.h>
#include <stdio.h>
#include <time.h>
using namespace std;
 
 
//функция определение номера строки матрицы,содержащей максимальный элемент
//Эта функция принимает количество строк и столбцов матрицы и указатель н анеё
//возвращат номер строки, содержащей максимальный элемент
int max_matr (int kol_vo_strok, int kol_vo_stolb, int matrix [] [4]) {
 
 int max, temp; temp= 0; 
 for (int i= 0; i< kol_vo_strok; i++)  
  for (int j= 0; j< kol_vo_stolb; j++) 
   if (matrix[i][j]>= temp) {
    temp= matrix[i][j]; 
    max= i;
   } 
 return max;
}
 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
int main () {
 
 //Это для русского языка, если ё
 SetConsoleCP (1251);
 SetConsoleOutputCP (1251);
 
 
 
 int A [4][4]= {2, 3,4, 6, 7, 8, 9,0, 2, 3, 4, 5, 6, 7, 8, 9};
 //матрица A 
// int A [4][4];
// //Заполним её случайными числами от 0 до 99 включительно 
// for (int i= 0; i< 4; i++)  
//  for (int j= 0; j< 4; j++)  
//   scanf ("%d",&A[i][j]);
 
 //матрица B 
 int B [4][4];
 //Заполним её по правилам, указанным в задании
 for (int i= 0; i< 4; i++) 
  for (int j= 0; j< 4; j++) 
   if (i==j) 
    B[i][j]=0;
   else   
    B[i][j]= A[i][j]+ A[j][i];
 
 //матрица C (может пригодиться, может нет, кто его знает)
 int C [4][4];
 //Заполним нолями
 for (int i= 0; i< 4; i++) 
  for (int j= 0; j< 4; j++) 
   C[i][j]= 0; 
 
                                 //+
                                 //+
                                 //+
                                 
 
 //Есть две заполненых матрицы, теперь найдём номера строк,
 //содержащих максималные элементы таблиц, IA и IB сответственно
 int IA, max_A; max_A= 0; 
 int IB, max_B; max_B= 0;
 
 //Побегаемся по матрицам 
 for (int i= 0; i< 4; i++) 
  for (int j= 0; j< 4; j++) { 
   //ДЛя матрицы A
   if (A[i][j]>= max_A) {
    max_A= A[i][j]; 
    IA= i;
   } 
   //и B соответственное
   if (B[i][j]>= max_B) {
    max_B= B[i][j]; 
    IB= i;
   } 
  }
  //После этого в переменной IA номер строки, содержащей максимальный 
  //элемент таблицы A
  //с переменной IB аналогично
  //Если окажется так, что есть несколько равных максимальных элементов, 
  //например 
  //в нулевой, второй и третьей строках, то IA будет содержать цифру 3
  //(третья строка)                                                      
  //Аналогично для переменой IB
 
                                 //+
                                 //+
                                 //+
  
  //Теперь выполняем или не выполняем обмен
  //ЭТО временая пременная для обмена переменных местами
  int temp;
 
  if (IA> IB) {
   //меняем 1 и IA строку местами. НЕобходимо учитывать, что нумерация
   //начинается c 1 (по условию задачи)
   if (!(IA)) {
    for (int i= 0; i< 4; i++) { 
     temp= A[0][i];
     A[0][i]= A[IA][i];
     A[IA][i]= temp;
    }
   }
  } 
  //А тут, как и договаривались, копируем 
  //B в C и меняем строки в матрице C
  //Копирование и перестановку местами можно было бы осуществит за один приём, 
  //(проход) но ну его на фиг 
  else {
   //сперва просто скопируем
   for (int i= 0; i< 4; i++)
    for (int j= 0; j< 4; j++)
     C[i][j]= B[i][j];
 
 
   
   //Так, а теперь поменяем местами нужные строки в матрице C
    for (int i= 0; i< 4; i++) { 
     temp= C[0][i];
     C[0][i]= C[IB][i];
     C[IB][i]= temp;
    }
  }
  
                                 //+
                                 //+
                                 //+
  //Ну и всё, осталось только вывести
  printf ("\n");
  printf ("\n");
  printf ("матрица B\n");
  for (int i= 0; i< 4; i++) {
   for (int j= 0; j< 4; j++) {
    printf ("%*d  ",4, B[i][j]);
   } 
   printf ("\n");
  }    
 
  printf ("\nномер строки в матрице A содержащей максимальный элемент  %d\n", ++IA);
  printf ("номер строки в матрице B содержащей максимальный элемент  %d\n", ++IB);
  printf ("\nматрица C\n");
  for (int i= 0; i< 4; i++) {
   for (int j= 0; j< 4; j++) {
    printf ("%*d  ",4, C[i][j]);
   } 
   printf ("\n");
  }    
 
 printf ("\nнахождение максимального элемента с помощь функции:\n");
 printf ("\nномер строки в матрице A содержащей максимальный элемент  %d\n", max_matr(4, 4, A)+ 1);
 printf ("номер строки в матрице B содержащей максимальный элемент  %d\n", max_matr(4, 4, B)+ 1);
 
 fflush(stdin);
 getchar (); 
 return 0;
}
Тут с функцией, а алгоритм- это суть последовательность действий, смотри мои комменты что за чем я делаю; это и будет алгоритм.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.02.2012, 19:38     Перестановка строк в матрице (С++)
Еще ссылки по теме:

Перестановка строк со столбцами C++
C++ Сортировка строк матрицы C++ (перестановка строк)
C++ Перестановка строк и столбцов в матрице

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

Или воспользуйтесь поиском по форуму:
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
27.02.2012, 19:38  [ТС]     Перестановка строк в матрице (С++) #20
ааааа у меня всё в вопросиках опять когда копирую...а прога в вопросиках (((
хотя там на нужный шрифт переставлено..((
чего делать??сделай чтобы твои коменты были не вопросиками(

Добавлено через 4 минуты
с вопросиками сама разобралась..твоя прога теперь сразу цифры выдает,без ввода матрицы A((
а ее же вводить надо..ведь так..)сделай за сегодн. вечер..мне завтра сдавать типо(
Yandex
Объявления
27.02.2012, 19:38     Перестановка строк в матрице (С++)
Ответ Создать тему
Опции темы

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