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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 37, средняя оценка - 4.89
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
#1

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

20.02.2012, 21:20. Просмотров 5274. Ответов 52
Метки нет (Все метки)

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

Перестановка строк в матрице - C++
Добрый день Дана заданная целочисленная матрица 6x9. Нужно чтобы по заданному пользователем распорядку чисел от 1 до 9 выстаивались в...

Перестановка строк в матрице - C++
Дана целочисленная матрица размера 6х9. Найти матрицу, получающуюся из данной: перестановкой строк первой с последней, второй с...

Перестановка строк и столбцов в матрице - C++
Добрый день программисты! Вопрос заключается в том как сделать так чтобы можно было переставлять строки и(или) столбцы в нужном порядке. ...

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

Перестановка строк матрицы по возрастанию среднего значения строк - C++
Разработать программу для перестановки строк матрицы таким образом, чтобы средние значения по строкам возрастали от первой строки к...

Перестановка диагоналей в матрице - C++
Нужно переставить диагонали в матрице, сори если было не нашел: Вот тут написал уже кое-что: #include <iostream> #include <cstdlib> ...

52
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
28.02.2012, 00:28  [ТС] #31
жесть как всё сложно ))))

блииин мне теперь надо как то по этому алгоритм составить..а ты вначале сразу функцию ввел..а в алгоритме не так делаться должно..ну пофиг...я просто не знаю после каких строчек в агоритме стоит засунуть функцию и как еще ее в алогитме записывать...((
0
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
28.02.2012, 00:35 #32
Функцию можно засунуть куда угодно, коль скоро она принимает указатель на матрицу, значит, надо её засовывать туда, где матрица уже объявлена. Я уже это сделал в самом конце проги:
C++
1
2
3
printf ("\nнахождение максимального элемента с помощь функции:\n");
 printf ("\nномер строки в матрице A содержащей максимальный элемент  %d\n", max_matr(4, 4, A)+ 1);
 printf ("номер строки в матрице B содержащей максимальный элемент  %d\n", max_matr(4, 4, B)+ 1);
max_matr(4, 4, A) и max_matr(4, 4, B) два вызова функции для матриц A и B

Добавлено через 2 минуты
Я эж тебе говорил, последовательность комментов и есть алгоритм
1) //матрица A
2)//Заполним её случайными числами от 0 до 99 включительно
3)//матрица B
4)//матрица C (может пригодиться, может нет, кто его знает)
5)//Заполним нолями
6)//Есть две заполненых матрицы, теперь найдём номера строк,
//содержащих максималные элементы таблиц, IA и IB сответственно
И так далее
1
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
06.03.2012, 18:57  [ТС] #33
привет)я показала программу преподавателю,ей понравилось вроде всё..
только смотри...надо доработать..))
ты сделал одну функцию нахождения мах и мин элементов))это функция типо с параметрами..
а в этой проге еще вместо того как ты обыкновенным способом переставлял строки в матрице,нужно сделать это по функции)это функция без параметров
а то обыкновенное всё,типо перестановки строк и мах и мин удалить всё нафиг)
главное чтобы были две функции))
Ты понял в чем суть?
0
kravam
06.03.2012, 20:39
  #34

Не по теме:

Тебе к какому сроку?

0
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
11.03.2012, 18:20  [ТС] #35
желательно чтобы в понедельник было уже)мне типо во вторник показывать))

Добавлено через 21 час 23 минуты
ааа ответь мне!!!помоги!!!!мне очень нужно!
0
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
11.03.2012, 19:17 #36
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
161
162
163
164
165
166
167
168
169
170
171
172
#include <windows.h>
#include <stdio.h>
#include <time.h>
using namespace std;
 
//матрица A 
int A [4][4];
//матрица B 
int B [4][4];
//матрица C (может пригодиться, может нет, кто его знает)
int C [4][4];
 
 
//номера строк, содержащих максималные элементы таблиц, IA и IB сответственно
int IA, IB;
 
 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
//Функция для обмена
void f () {
  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;
    }
  }
}
 
 
 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
//функция определение номера строки матрицы,содержащей максимальный элемент
//Эта функция принимает количество строк и столбцов матрицы и указатель н анеё
//возвращат номер строки, содержащей максимальный элемент
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;
   } 
 }
 printf ("max= %d\n", max);
 return max;
}
 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
int main () {
 
 //Это для русского языка, если ё
 SetConsoleCP (1251);
 SetConsoleOutputCP (1251);
 
 
 
 //Заполним A случайными числами от 0 до 99 включительно 
 for (int i= 0; i< 4; i++)  
  for (int j= 0; j< 4; j++)  
   scanf ("%d",&A[i][j]);
 
 //Заполним B по правилам, указанным в задании
 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 (может пригодиться, может нет, кто его знает)
 //Заполним нолями
 for (int i= 0; i< 4; i++) 
  for (int j= 0; j< 4; j++) 
   C[i][j]= 0; 
 
                                 //+
                                 //+
                                 //+
                                 
 
 //Есть две заполненых матрицы, теперь найдём номера строк,
 //содержащих максималные элементы таблиц
 IA= max_matr(4, 4, A);
 IB= max_matr(4, 4, B); 
 
  //После этого в переменной IA номер строки, содержащей максимальный 
  //элемент таблицы A
  //с переменной IB аналогично
  //Если окажется так, что есть несколько равных максимальных элементов, 
  //например 
  //в нулевой, второй и третьей строках, то IA будет содержать цифру 3
  //(третья строка)                                                      
  //Аналогично для переменой IB
 
                                 //+
                                 //+
                                 //+
  
  //Теперь выполняем или не выполняем обмен
  f ();
                                 //+
                                 //+
                                 //+
  //Ну и всё, осталось только вывести
  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+ 1);
  printf ("номер строки в матрице B содержащей максимальный элемент  %d\n", IB+ 1);
  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;
}
тестируй
1
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
12.03.2012, 20:52  [ТС] #37
протестировала))
здесь ты сделал по функции чтобы строчки в матрице по правилу переставлялись,да?

смооотри))всё устраивает..только глянь на фотку...я не понимаю...откуда эти строчки взялись ненужные
мах=0
мах=3

это вообще что?я думаю это нафиг не нужно)да?
0
Миниатюры
Перестановка строк в матрице (С++)  
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
12.03.2012, 20:56 #38
Всё как надо сделал, видишь же две функции,эту строчку закомменть
C++
1
printf ("max= %d\n", max);
и всё будет круто

Добавлено через 36 секунд
Это номера максимальных строк чисто служебная инфа.

Добавлено через 31 секунду
То есть номера строк с максимальными элеметнами.
0
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
12.03.2012, 21:35  [ТС] #39
так это же не нужно)
прога и так показывает мах и мин элементы..
а это вообще не понятно,и цифры не правильные...0 и 3 строчки..там не ту мах элементов...
удали это )

я не понимаю куда надо закоментить...это как??

Добавлено через 1 минуту
просто она придерётся и будет спрашивать и я не смогу ответить откуда это вообще и для чего..((

Добавлено через 5 минут
аааааааа ответь ответь ответь!!!!пожалуйста...помоги(((
0
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
12.03.2012, 22:21 #40
Закоменть эти строчки; они правильные, нумерация начинается с ноля; а у тебя по условию задачи с 1-ы; в нужном месте 0 меняется на 1 а 3 на 4. Как закомментить меня не спрашивай.
0
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
12.03.2012, 23:17  [ТС] #41
ааа я нифига не поняла что ты написал((
ты можешь просто убрать эти строчки?
чтобы не высвечивалось maх= 0
мах=3

ведь и так есть строчки "номер строки мах элемента в матрице а"
и так же в матрице в

зафиг эти строчки(((
я не понимаю (

Добавлено через 1 минуту
я не знаю как комментить...
я не понимаю что это означает..

коммент,это типо как оставить комментарий?и какой же мне оставить комментарий к той строчке...

Добавлено через 42 минуты
Ааааа помоги пожалуйста..мне завтра сдавать,удали ты эти строчки..неужели так трудно?(
0
isaak
102 / 39 / 9
Регистрация: 17.10.2010
Сообщений: 658
12.03.2012, 23:21 #42
C++
1
// printf ("max= %d\n", max);
//, /**/ -означает закоментировать строку.

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
161
162
163
164
165
166
167
168
169
170
171
172
173
#include <windows.h>
#include <stdio.h>
#include <time.h>
#include <iostream>
#include <locale.h>
using namespace std;
 
//матрица A 
int A [4][4];
//матрица B 
int B [4][4];
//матрица C (может пригодиться, может нет, кто его знает)
int C [4][4];
 
 
//номера строк, содержащих максималные элементы таблиц, IA и IB сответственно
int IA, IB;
 
 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
//Функция для обмена
void f () {
  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;
    }
  }
}
 
 
 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
//функция определение номера строки матрицы,содержащей максимальный элемент
//Эта функция принимает количество строк и столбцов матрицы и указатель н анеё
//возвращат номер строки, содержащей максимальный элемент
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;
   } 
 }
 // printf ("max= %d\n", max);
 return max;
}
 
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 
int main () {
 
 //Это для русского языка, если ё
 SetConsoleCP (1251);
 SetConsoleOutputCP (1251);
 
 
 //Заполним A случайными числами от 0 до 99 включительно 
 for (int i= 0; i< 4; i++)  
  for (int j= 0; j< 4; j++)  
   scanf ("%d",&A[i][j]);
 
 //Заполним B по правилам, указанным в задании
 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 (может пригодиться, может нет, кто его знает)
 //Заполним нолями
 for (int i= 0; i< 4; i++) 
  for (int j= 0; j< 4; j++) 
   C[i][j]= 0; 
 
                                 //+
                                 //+
                                 //+
                                 
 
 //Есть две заполненых матрицы, теперь найдём номера строк,
 //содержащих максималные элементы таблиц
 IA= max_matr(4, 4, A);
 IB= max_matr(4, 4, B); 
 
  //После этого в переменной IA номер строки, содержащей максимальный 
  //элемент таблицы A
  //с переменной IB аналогично
  //Если окажется так, что есть несколько равных максимальных элементов, 
  //например 
  //в нулевой, второй и третьей строках, то IA будет содержать цифру 3
  //(третья строка)                                                      
  //Аналогично для переменой IB
 
                                 //+
                                 //+
                                 //+
  
  //Теперь выполняем или не выполняем обмен
  f ();
                                 //+
                                 //+
                                 //+
  //Ну и всё, осталось только вывести
  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+ 1);
  printf ("номер строки в матрице B содержащей максимальный элемент  %d\n", IB+ 1);
  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;
}
0
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
12.03.2012, 23:42  [ТС] #43
ошибку какую то показывает,гляди
0
Миниатюры
Перестановка строк в матрице (С++)  
Christine
0 / 0 / 0
Регистрация: 20.02.2012
Сообщений: 32
12.03.2012, 23:48  [ТС] #44
почему ты первую самую строчку отступил место?
0
kravam
быдлокодер
1696 / 883 / 45
Регистрация: 04.06.2008
Сообщений: 5,474
13.03.2012, 01:29 #45

Не по теме:

Цитата Сообщение от Christine Посмотреть сообщение
удали ты эти строчки

Это уже что-то запредельное
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2012, 01:29
Привет! Вот еще темы с ответами:

Перестановка блоков в матрице - C++
Переставить блоки в матрице. Функция написана просто на начальном этапе(объявление переменных и т.д), а вот код для самой перестановки не...

Перестановка столбцов в матрице - C++
Смысл задания такой.. данна матрица. нужно: 1) посчитать сумму элементов в тех столбцах, которые содержат хоть 1 отрицательный элемент ...

Перестановка элементов в двумерной матрице - C++
Нужно поменять местами элементы, которые находятся на главной диагонали с элементами на боковой диагонали. Вот код, который я написал(по...

Сортировка строк матрицы C++ (перестановка строк) - C++
Помогите пожалуйста, в матрице из целых чисел поменять местами первую строку и строку, содержащую самый большой по абсолютной величине...


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

Или воспользуйтесь поиском по форуму:
45
Yandex
Объявления
13.03.2012, 01:29
Ответ Создать тему
Опции темы

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