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

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

Войти
Регистрация
Восстановить пароль
 
legend
28 / 27 / 0
Регистрация: 17.11.2010
Сообщений: 152
#1

как менять сторки местами - C++

18.11.2010, 17:05. Просмотров 650. Ответов 14
Метки нет (Все метки)

добрый день!!

вот дали мне заданине.. в квадратной матрице поменять местами строки где есть мин значение.. со строкой в которой максимальное значание..

дошел я до того момента где прога умеет находить эти же строки.. но вот.. как их местами поменять.. и потом все это красиво вывести, у меня не получилось..

буду рад если вы мне поможете..

вот впринципи то что у меня на данный момент имееться:

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
#include "stdafx.h"
#include <stdio.h>
#include <iostream>
#include <conio.h>
 
using std::cout;
using std::cin;
using std::endl;
 
 
int main ()
{
    int matrix [20][20];
    int n,i,j;
setlocale( LC_ALL,"Russian" );
 
cout<<"какая размерность матрици :";
cin>>n;
//ввод матрицы
        for( i=1; i<=n; ++i)
        {   
            for( j=1; j<=n; ++j)
            {
                cout<<"введите значение елемента такой позиции"<<" ["<<i<<"]["<<j<<"]"<<"=";
                cout<<endl;
                cin>>matrix[i][j];
            }
        }
 
//нахождение строки с максимальным и масимальным значением
        
int min,max;
    min=matrix[0][0];
    max=matrix[0][0];
    
    for (i=0; i<n;i++)
     {for ( j=0;j<n;j++)
        {if(matrix[i][j]<min)   {min=matrix[i][j];}
 
    if (matrix[i][j]>max)       {max=matrix[i][j]; }}}
    
        
 
        
getch ();
 
}
Добавлено через 6 минут
п.с.вывести надо всю матрицу .. но с поменяными уже строками =))
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2010, 17:05     как менять сторки местами
Посмотрите здесь:

C++ как менять слова местами?
C++ как динамически менять размер массива?
C++ Как мышкой менять размер DialogBar'а?
C++ Как менять иконку файла .exe?
В заданном массиве А может менять местами минимальный и максимальный элементы. C++
C++ Менять массивы местами при условии
Работа с указателями: во введенной строке в каждом слове менять буквы местами C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Mayonez
380 / 272 / 20
Регистрация: 26.12.2009
Сообщений: 875
18.11.2010, 17:15     как менять сторки местами #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int buffer[20];
for (int i = 0; i <= n; i++)
   buffer[i] = matrix[minR][i]; 
//minR номер строки с минимальным элементом
   
for (int i = 0; i <= n; i++)
   matrix[maxR][i] = matrix[minR][i];
//minR - номер строки с максимальным элементом
   
for (int i = 0; i <= n; i++)
   matrix[minR][i] = buffer[i];
   
//////////////////////////////////////////////
//вывод матрицы
//////////////////////////////////////////////
for (int i = 0; i <= n; i++)
{
   for (int j = 0; j <= n; j++)
      cout << matrix[i][j] << " ";
   cout << endl;
}
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
18.11.2010, 17:15     как менять сторки местами #3
постарайтесь запомнить что массивы в С/С++ начинаются с нулевого индекса, а не с 1 и идут до n, т.е. <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
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <conio.h>
#include <clocale>
 
using std::cout;
using std::cin;
using std::endl;
 
 
int main ()
{
        int **matrix;
        int n,i,j;
setlocale( LC_ALL,"Russian" );
 
cout<<"какая размерность матрици :";
cin>>n;
matrix=new int*[n];
for(int i=0; i<n; ++i)
    matrix[i]=new int[n];
//ввод матрицы
                for( i=0; i<n; ++i)
                {       
                        for( j=0; j<n; ++j)
                        {
                                cout<<"введите значение елемента такой позиции"<<" ["<<i<<"]["<<j<<"]"<<"=";
                                cout<<endl;
                                cin>>matrix[i][j];
                        }
                }
                for(int i=0; i<n; ++i)
                {
                    for(int j=0; j<n; ++j)
                    {
                        cout<<matrix[i][j]<<' ';
                    }
                    cout<<'\n';
                }
//нахождение строки с максимальным и масимальным значением
                
int min,max;
        min=matrix[0][0];
        max=matrix[0][0];
        int min_ind=0, max_ind=0;
        
        for (i=0; i<n;i++)
         {for ( j=0;j<n;j++)
        {if(matrix[i][j]<min)   {min=matrix[i][j]; min_ind=i;}
 
        else if (matrix[i][j]>max)           {max=matrix[i][j]; max_ind=j;}}}
        cout<<"Max element "<< max <<" is in "<< max_ind <<" row\n";
        cout<<"Min element "<< min <<" is in "<< min_ind <<" row\n";
        
        std::swap(matrix[min_ind], matrix[max_ind]);
 
        for(int i=0; i<n; ++i)
        {
            for(int j=0; j<n; ++j)
            {
                cout<<matrix[i][j]<<' ';
            }
            cout<<'\n';
        }
        for(int i=0; i<n; ++i)
            delete[] matrix[i];
        delete[] matrix;
    
                
getch ();
 
}
legend
28 / 27 / 0
Регистрация: 17.11.2010
Сообщений: 152
18.11.2010, 17:33  [ТС]     как менять сторки местами #4
воть http://s012.***********/i321/1011/ef/137ee7b1a107.jpg.. проверку прога не прошла.. номер строки не правильно находит

хотя я понял принцип..

но у меня вопрос.. мы еще не учили такого.. но что делает
C++
1
std::swap(matrix[min_ind], matrix[max_ind]);
??

Добавлено через 1 минуту
и не совсем понял принцип вывода матрици.. но выводит оно красиво ! =))
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
18.11.2010, 17:39     как менять сторки местами #5
legend, swap - меняет два элемента местами соответственно. Функция шаблонная из библиотеки STL.
Выводит обыкновенно. А про строки ща посмотрю.

Добавлено через 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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <conio.h>
#include <clocale>
 
using std::cout;
using std::cin;
using std::endl;
 
 
int main ()
{
        int **matrix;
        int n,i,j;
setlocale( LC_ALL,"Russian" );
 
cout<<"какая размерность матрици :";
cin>>n;
matrix=new int*[n];
for(int i=0; i<n; ++i)
        matrix[i]=new int[n];
//ввод матрицы
                for( i=0; i<n; ++i)
                {       
                        for( j=0; j<n; ++j)
                        {
                                cout<<"введите значение елемента такой позиции"<<" ["<<i<<"]["<<j<<"]"<<"=";
                                cout<<endl;
                                cin>>matrix[i][j];
                        }
                }
                                for(int i=0; i<n; ++i)
                                {
                                        for(int j=0; j<n; ++j)
                                        {
                                                cout<<matrix[i][j]<<' ';
                                        }
                                        cout<<'\n';
                                }
//нахождение строки с максимальным и масимальным значением
                
int min,max;
        min=matrix[0][0];
        max=matrix[0][0];
                int min_ind=0, max_ind=0;
        
        for (i=0; i<n;i++)
         {for ( j=0;j<n;j++)
        {if(matrix[i][j]<min)   {min=matrix[i][j]; min_ind=i;}
 
        else if (matrix[i][j]>max)           {max=matrix[i][j]; max_ind=i;}}}
                cout<<"Max element "<< max <<" is in "<< max_ind <<" row\n";
                cout<<"Min element "<< min <<" is in "<< min_ind <<" row\n";
                
                std::swap(matrix[min_ind], matrix[max_ind]);
 
                for(int i=0; i<n; ++i)
                {
                        for(int j=0; j<n; ++j)
                        {
                                cout<<matrix[i][j]<<' ';
                        }
                        cout<<'\n';
                }
                for(int i=0; i<n; ++i)
                        delete[] matrix[i];
                delete[] matrix;
        
                
getch ();
 
}
legend
28 / 27 / 0
Регистрация: 17.11.2010
Сообщений: 152
18.11.2010, 20:18  [ТС]     как менять сторки местами #6
учту что масивы начинаються с нуля.

спасибо за код и разьяснения..

Добавлено через 25 минут
C++
1
2
3
  for(int i=0; i<n; ++i)
            delete[] matrix[i];
            delete[] matrix;
delete = я правильно понял что оно очищает матрицу.. тем самым удаляя значения из оперативной памяти ??

п.с. Библиотека "STL" это какая имено??

Добавлено через 6 минут
и еще.. последний вопрос

C++
1
2
3
4
5
6
7
 int **matrix;
        int n;
 
cout<<"какая размерность матрици : ";
cin>>n;
 
matrix=new int*[n];


тоесть у меня было
C++
1
 int matrix [20][20];
максимально допустимый размер 20 на 20..

А по вашему способу я так понял что мы не ограничиваем нашу матрицу максимально допустимым размером.. я правильно понял?
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
18.11.2010, 20:33     как менять сторки местами #7
legend, Правильно.
legend
28 / 27 / 0
Регистрация: 17.11.2010
Сообщений: 152
20.11.2010, 18:09  [ТС]     как менять сторки местами #8
на защите мне сказали что все хорошо.. только сделать надо чтобы небыло
C++
1
swap
ну я попробовал сделать.. вот мой код..
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
#include <iostream>
#include <conio.h>
#include <clocale>
 
using std::cout;
using std::cin;
using std::endl;
 
 
int main ()
{
        int **matrix;
        int n,i,j;
 
setlocale( LC_ALL,"Russian" );
 
cout<<"какая размерность матрици : ";
cin>>n;
matrix=new int*[n];
for(int i=0; i<n; ++i)
        matrix[i]=new int[n];
//ввод матрици
                for( i=0; i<n; ++i)
                {       
                        for( j=0; j<n; ++j)
                        {
                                cout<<"введите значение елемента такой позиции"<<" ["<<i<<"]["<<j<<"]"<<"=";
                                cout<<endl;
                                cin>>matrix[i][j];
                        }
                }
                cout<<"ваша начальная матрица :"<<endl;
                                for(int i=0; i<n; ++i)
                                {
                                        for(int j=0; j<n; ++j)
                                        {
                                                cout<<matrix[i][j]<<' ';
                                        }
                                        cout<<'\n';
                                }
//нахождение строки с максимальным и масимальным значением
                
int min,max;
int min_ind=0, max_ind=0;
 
        min=matrix[0][0];
        max=matrix[0][0];
               
    int minb[50];
    int maxb[50];
 
        
        for (i=0; i<n;i++)
         {for ( j=0;j<n;j++)
        {if(matrix[i][j]<min)  
            {min=matrix[i][j]; min_ind=i; 
            for(j=0;j<n;++j) {i=min_ind; minb[j]=matrix[i][j];}}
 
        else if (matrix[i][j]>max)           {max=matrix[i][j]; max_ind=i; for (j=0;j<n;++j) {i=max_ind; maxb[j]=matrix[i][j];}}}}
              
//вывод на экран данных
                cout<<"Максимальный елемент = "<< max <<". Он находиться в "<< max_ind <<"-ом рядке\n";
                cout<<"Min елемент = "<< min <<". Он находиться в "<< min_ind <<"-ом рядке\n";
                cout<<"конечная матрица :"<<endl;
        
                //std::swap(matrix[min_ind], matrix[max_ind]);
 
                for (j=0;j<n;++j)
                {i=min_ind;
                    matrix[i][j]=minb[j];}
                for (j=0;j<n;++j)
                {i=max_ind;
                    matrix[i][j]=maxb[j];
                }
                //вывод конечной матрицы.. с изменнеными рядками
                for(int i=0; i<n; ++i)
                {
                        for(int j=0; j<n; ++j)
                        {
                                cout<<matrix[i][j]<<' ';
                        }
                        cout<<'\n';
                }
//очищения значения матрици из опперативной памяти
            for(int i=0; i<n; ++i)
            delete[] matrix[i];
            delete[] matrix;
        
                
getch ();
 
}
но он чето неправильно мне меняет строки =((

думаю разобраться будет сложно.. но я уже второй день мучаюсь..
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
20.11.2010, 18:14     как менять сторки местами #9
legend, Так пойдет?

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
#include <iostream>
#include <conio.h>
#include <clocale>
 
using std::cout;
using std::cin;
using std::endl;
 
void swap(int**, int**);
 
int main ()
{
        int **matrix;
        int n,i,j;
 
setlocale( LC_ALL,"Russian" );
 
cout<<"какая размерность матрици : ";
cin>>n;
matrix=new int*[n];
for(int i=0; i<n; ++i)
        matrix[i]=new int[n];
//ввод матрици
                for( i=0; i<n; ++i)
                {       
                        for( j=0; j<n; ++j)
                        {
                                cout<<"введите значение елемента такой позиции"<<" ["<<i<<"]["<<j<<"]"<<"=";
                                cout<<endl;
                                cin>>matrix[i][j];
                        }
                }
                                cout<<"ваша начальная матрица :"<<endl;
                                for(int i=0; i<n; ++i)
                                {
                                        for(int j=0; j<n; ++j)
                                        {
                                                cout<<matrix[i][j]<<' ';
                                        }
                                        cout<<'\n';
                                }
//нахождение строки с максимальным и масимальным значением
                
int min,max;
int min_ind=0, max_ind=0;
 
        min=matrix[0][0];
        max=matrix[0][0];
               
        int minb[50];
        int maxb[50];
 
        
        for (i=0; i<n;i++)
         {for ( j=0;j<n;j++)
                {if(matrix[i][j]<min)  
                        {min=matrix[i][j]; min_ind=i; 
                        for(j=0;j<n;++j) {i=min_ind; minb[j]=matrix[i][j];}}
 
                else if (matrix[i][j]>max)           {max=matrix[i][j]; max_ind=i; for (j=0;j<n;++j) {i=max_ind; maxb[j]=matrix[i][j];}}}}
              
//вывод на экран данных
                                cout<<"Максимальный елемент = "<< max <<". Он находиться в "<< max_ind <<"-ом рядке\n";
                cout<<"Min елемент = "<< min <<". Он находиться в "<< min_ind <<"-ом рядке\n";
                cout<<"конечная матрица :"<<endl;
                
                swap(&matrix[min_ind], &matrix[max_ind]);
                                //вывод конечной матрицы.. с изменнеными рядками
                for(int i=0; i<n; ++i)
                {
                        for(int j=0; j<n; ++j)
                        {
                                cout<<matrix[i][j]<<' ';
                        }
                        cout<<'\n';
                }
//очищения значения матрици из опперативной памяти
            for(int i=0; i<n; ++i)
            delete[] matrix[i];
            delete[] matrix;
        
                
getch (); 
}
 
void swap(int** first, int** second)
{
    int* t=*first;
    *first=*second;
    *second=t;
}
legend
28 / 27 / 0
Регистрация: 17.11.2010
Сообщений: 152
20.11.2010, 18:42  [ТС]     как менять сторки местами #10
НЕ.. надо зделать замену строк.. но не используя
C++
1
swap
я пытался занести значения рядка c мин значением в одномерный массив, и этим масивом заменить тот рядок с макс значением..

анологично с макс значением.. но у меня выводит оно странным образом..
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
20.11.2010, 18:48     как менять сторки местами #11
а что сложного? вместо swap пусти цикл, в котором поочереди будут менятся соответсвуешие значения, допустим через вспомогательную переменную temp.
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
20.11.2010, 19:07     как менять сторки местами #12
legend, Черт. swap - своя функция. Описанная в программе. Что такого? оО
Можете в мейн перенести...
nikkka
Мат в 32 хода
235 / 170 / 8
Регистрация: 10.09.2009
Сообщений: 1,096
20.11.2010, 19:10     как менять сторки местами #13
ForEveR,
Цитата Сообщение от legend Посмотреть сообщение
мы еще не учили такого..
legend
28 / 27 / 0
Регистрация: 17.11.2010
Сообщений: 152
20.11.2010, 19:10  [ТС]     как менять сторки местами #14
да .. через переменую.. но у меня чето не работает через эту переменую..


ForEveR, учитель сказал что надо сделать тоже самое но не использовать команду "свап"


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
int min,max;
int min_ind=0, max_ind=0;
 
        min=matrix[0][0];
        max=matrix[0][0];
               
    int minb[50];
    int maxb[50];
 
        
        for (i=0; i<n;i++)
         {for ( j=0;j<n;j++)
        {if(matrix[i][j]<min)  
            {min=matrix[i][j]; min_ind=i; 
            for(j=0;j<n;++j) {i=min_ind; minb[j]=matrix[i][j];}}
 
        else if (matrix[i][j]>max)           {max=matrix[i][j]; max_ind=i; for (j=0;j<n;++j) {i=max_ind; maxb[j]=matrix[i][j];}}}}
тут я в цикле применял к переменным значения рядков..

а тут пытался их внедрить в матрицу
C++
1
2
3
4
5
6
7
for (j=0;j<n;++j)
                {i=min_ind;
                    matrix[i][j]=minb[j];}
                for (j=0;j<n;++j)
                {i=max_ind;
                    matrix[i][j]=maxb[j];
                }
но у меня оно не работает.. почемуто ничего не меняет..
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.11.2010, 19:12     как менять сторки местами
Еще ссылки по теме:

Менять местами имена в зависимости от зарплаты C++
Функция ->*. Как исправить, что менять C++
Как менять родительское окно из дочернего? C++
C++ Как в матрице менять столбцы местами?
C++ менять местами символы в массиве в нижней и верхней четверти

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

Или воспользуйтесь поиском по форуму:
ForEveR
Модератор
Эксперт С++
7958 / 4720 / 319
Регистрация: 24.06.2010
Сообщений: 10,525
Завершенные тесты: 3
20.11.2010, 19:12     как менять сторки местами #15
legend, Слушайте. Если так принципиально swap - обзовите ее как хотите.
Можно менять и в мейне конечно.

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
#include <iostream>
#include <conio.h>
#include <clocale>
 
using std::cout;
using std::cin;
using std::endl;
 
int main ()
{
        int **matrix;
        int n,i,j;
 
setlocale( LC_ALL,"Russian" );
 
cout<<"какая размерность матрици : ";
cin>>n;
matrix=new int*[n];
for(int i=0; i<n; ++i)
        matrix[i]=new int[n];
//ввод матрици
                for( i=0; i<n; ++i)
                {       
                        for( j=0; j<n; ++j)
                        {
                                cout<<"введите значение елемента такой позиции"<<" ["<<i<<"]["<<j<<"]"<<"=";
                                cout<<endl;
                                cin>>matrix[i][j];
                        }
                }
                                cout<<"ваша начальная матрица :"<<endl;
                                for(int i=0; i<n; ++i)
                                {
                                        for(int j=0; j<n; ++j)
                                        {
                                                cout<<matrix[i][j]<<' ';
                                        }
                                        cout<<'\n';
                                }
//нахождение строки с максимальным и масимальным значением
                
int min,max;
int min_ind=0, max_ind=0;
 
        min=matrix[0][0];
        max=matrix[0][0];
               
        int minb[50];
        int maxb[50];
 
        
        for (i=0; i<n;i++)
         {for ( j=0;j<n;j++)
                {if(matrix[i][j]<min)  
                        {min=matrix[i][j]; min_ind=i; 
                        for(j=0;j<n;++j) {i=min_ind; minb[j]=matrix[i][j];}}
 
                else if (matrix[i][j]>max)           {max=matrix[i][j]; max_ind=i; for (j=0;j<n;++j) {i=max_ind; maxb[j]=matrix[i][j];}}}}
              
//вывод на экран данных
                                cout<<"Максимальный елемент = "<< max <<". Он находиться в "<< max_ind <<"-ом рядке\n";
                cout<<"Min елемент = "<< min <<". Он находиться в "<< min_ind <<"-ом рядке\n";
                cout<<"конечная матрица :"<<endl;
                
                int* temp=matrix[min_ind];
                matrix[min_ind]=matrix[max_ind];
                matrix[max_ind]=temp;
                                //вывод конечной матрицы.. с изменнеными рядками
                for(int i=0; i<n; ++i)
                {
                        for(int j=0; j<n; ++j)
                        {
                                cout<<matrix[i][j]<<' ';
                        }
                        cout<<'\n';
                }
//очищения значения матрици из опперативной памяти
            for(int i=0; i<n; ++i)
            delete[] matrix[i];
            delete[] matrix;
        
                
getch (); 
}
Yandex
Объявления
20.11.2010, 19:12     как менять сторки местами
Ответ Создать тему
Опции темы

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