Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
Myrik
1 / 1 / 0
Регистрация: 20.05.2010
Сообщений: 11
1

Переместить столбцы в матрице так, чтобы четный встал на место нечетного справа

20.05.2010, 00:17. Просмотров 1069. Ответов 10
Метки нет (Все метки)

Текст программы не закомпилируеться так как это часть лабы там еще 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
/*Matrix module*/
#include <stdio.h>
#include <stdlib.h>
#include "main.h"
int mat[10][10]={           {  10, 20, 30, 40, 50, 60, 70, 80,  90, -200},
                            { -10,-20,-30,-40,-50,-60,-70,-80, -90,-100},
                            {   6,  1,  2,  3,  4,  5,  6,  7,   8,   9},
                            {-345, 66, 57, 98, 69, 13, 22, 16,  76,  89},
                            { -66, 76, 45, 32, 76,867, 67,677,  68,   9},
                            {  45, 54, 65, 56, 78, 98, 10, -9,  55,  43},
                            {  16, 13,-20,-80, 44, 55, 66, 77,  88,  99},
                            {   0, -1, -2, -3, -4, -5, -6, -7,  -8,  -9},
                            {  12, 98, 10, 20, 30,-30,-50,-80,-777, -32},
                            {  13, 14, 15, 16, 17, 18, 19, 20,  11,  12}
                };
 
int min1=9, max1=9,cnt,tmin,m,f,tmin1,n1,n2;
/*Function: menu of the matrix */
void matrix()
{
    int x;
    clrscr();
    printf ("1 - Back to the main menu\n");
    printf ("2 - Get size of matrix with who you will work\n");
    printf ("3 - Show the Matrix\n");
    printf ("4 - Function processing of Matrix(Opredelyaetsya variantom zadaniya\n");
    fflush(stdin);
    scanf("%d", &x);
    switch(x)
    {
    case 1: return; 
        break;
    case 2: sizemat();
        break;
    case 3: viewmat();
        break;
    case 4: matr();
        break;
    default:printf("Wrong choice");
        break;
    }
}
/*Function: get size of matrix */
void sizemat()
{
    fflush(stdin);
    system("cls");
    printf("vvedite nomer stroku: ");
    scanf("%d", &min1);
    printf("vvedite nomer stolbca: ");
    scanf("%d", &max1);
}
/*Function: show the matrix */
void viewmat()
{
 
    system("cls");
    for (int i=0; i<min1; ++i)
    {
        for (int j=0; j<max1; ++j)
        {
            
            printf ("%8d",mat[i][j]);
            
        }
 
    }
    fflush(stdin);
        
}
/*Function: show min element in every column; and change location odd numbers of columns in matrix with  not odd numbers of colums in matrix */
 void matr ()
 {
    for (f=0; f<=min1; ++f)
    {
        for (tmin1=0, m=0; m<=max1; ++m)
 
        { 
            if (mat[tmin1][f] > mat[m][f])
            tmin1=m;
        }   
        printf ("Stolbec Nomer %d i ego min element: %d nahodyashiysya v stroke nomer %d\n", f,mat[tmin1][f], tmin1 );
            }
    for (n1=0, f=0; f<=min1; ++f)
    {
        for (n2=0,m=0; m<=max1; ++m)    
            {
                if (f%2==1)
 
                    {
                        n1=f;
                        printf ("ne4etniy stolbec Nomer %d, stroka nomer %d, element: %d\n", n1, m, mat[m][n1]);
 
                    }
                else 
                    {
                        n2=f;
                        printf ("4etniy stolbec Nomer %d, stroka nomer %d, element:  %d\n",n2, m, mat[m][n2]);
                    }
                     
        
        
            }
 
    
    }
 }
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.05.2010, 00:17
Ответы с готовыми решениями:

Сдвиг элементов каждой строки матрицы так, чтобы максимальный элемент встал на первое место
Задана матрица размером NxM. Передвинуть циклическим сдвигом элементы каждой строки так, чтобы...

Переставить строки и столбцы матрицы так чтобы максимальный элемент оказался справа сверху
#include &quot;stdafx.h&quot; #include &lt;cstdlib&gt; #include &lt;iostream&gt; #include &lt;stdlib.h&gt; using namespace...

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

В матрице переместить последнюю строку на место первой
Помогите решить, пожалуйста. а) в данной матрице переместить последнюю строку на место первой, а...

В данной матрице переместить столбцы между собой
в данной матрице переместить столбцы между собой местами так, чтобы они следовали в таком порядке:...

10
Crudelis
Шаровик затейник
687 / 436 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
20.05.2010, 00:21 2
скажите что сделать?
0
Myrik
1 / 1 / 0
Регистрация: 20.05.2010
Сообщений: 11
20.05.2010, 00:23  [ТС] 3
поменять местами четный столбец исходной матрицы с нечетным справа т.е. 0 с 1 , 2 с 3, 4 с 5 и так далее... матрица 10х10
0
Crudelis
Шаровик затейник
687 / 436 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
20.05.2010, 00:28 4
возьмите цикл с шагом 2 и меняйте местами)
C++
1
2
3
4
5
6
7
8
9
for(int i=0;i<10;i++)
{
for(int j=0;j<n;j+=2)
{
int tem=mat[i][j];
mat[i][j]=mat[i][j+1];
mat[i][j+1]=tem;
}
}
0
20.05.2010, 00:28
Myrik
1 / 1 / 0
Регистрация: 20.05.2010
Сообщений: 11
20.05.2010, 00:49  [ТС] 5
О_О немного понятно но не совсем... а как потом на экран вывести исходную матрицу с поменяными столбцами? а то у меня не получаеться...
0
Crudelis
Шаровик затейник
687 / 436 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
20.05.2010, 00:54 6
C++
1
2
3
4
5
6
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
printf("%d\t",mat[i][j]);
printf("\n");
}
Добавлено через 2 минуты
Цитата Сообщение от Myrik Посмотреть сообщение
О_О немного понятно но не совсем...
что именно не понятно, смотри j=0
берем mat[i][0]=mat[i][1];
далее j=2
берем mat[i][2]=mat[i][3];
и так далее
0
Myrik
1 / 1 / 0
Регистрация: 20.05.2010
Сообщений: 11
20.05.2010, 00:59  [ТС] 7
так он просто выводит нечетные столбцы а местами не меняет... надо что бы 0 столбец встал на место 1 а 1 встал на место 0 и так далее...
0
Crudelis
Шаровик затейник
687 / 436 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
20.05.2010, 01:04 8
Добавлено через 2 минуты
Цитата Сообщение от Crudelis Посмотреть сообщение
C++
1
2
3
int tem=mat[i][j];
mat[i][j]=mat[i][j+1];
mat[i][j+1]=tem;
а что делается в этом коде?
0
Myrik
1 / 1 / 0
Регистрация: 20.05.2010
Сообщений: 11
20.05.2010, 01:21  [ТС] 9
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
for(int jj=0;jj<10;jj+=2)
    {
        for(int ii=0;ii<10;ii++)
                    {
                int tem=mat[ii][jj];/*четные столбцы*/
                    mat[ii][jj]=mat[ii][jj+1]; /*четные "заменяються" на нечетные столбцы т.е. 0+1 2+1 4+1 ....*/ 
                    mat[ii][jj+1]=tem; /*к "tem" приравниваеться массив из нечетных столбцов т.е. четные становяться нечетными ))) блин запутался */ 
                    printf("%d\t",mat[ii][jj]); /* если так то выводит нечетные столбцы*/
                                        printf("\n");
                                        printf("%d\t",tem); /* если так то выводит четные столбцы*/
                    printf("\n");
 
                    
            }
как вывести матрицу полностью в адеватном виде ?)
0
Mur3ik
102 / 102 / 23
Регистрация: 12.05.2010
Сообщений: 232
20.05.2010, 01:32 10
есть задачка посложнее.
Дана матрица порядка MxN (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
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
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
#include <iostream>
#include <clocale>
#include <cmath>
#include <cstring>
#include <cstdlib>
#include <ctime>
#include <iomanip>
#include <windows.h>
 
using namespace std;
bool move(int **&p, int &n, int &m);
bool copyDin2(int **&po, int **&po2, int &n, int &m);
bool newDin2(int **&p, int &n, int &m, bool automate);
bool RandDin2(int **&p, const int &n, const int &m, int a, int b);
bool PrintDin2( int **&p, const int &n, const int &m);
bool delDin2(int **&p, int &n, int &m);
 
void main()
{
    setlocale(LC_CTYPE, "rus");
    int **mas=0,N=0,M=0;
    int **mas3=0;
newDin2(mas,N,M, false);
RandDin2(mas,N,M,1,25);
system("cls");
cout<<"Массив 1"<<endl;
PrintDin2(mas,N,M);
move(mas,N,M);
cout<<"Массив 1 со смещением"<<endl;
PrintDin2(mas,N,M);
delDin2(mas,N,M);
 
}
 
bool move(int **&p, int &n, int &m)
{int step;
char ans, ans2;
cout<<"Что сдвигаем (l)ines/(c)olomus?";
cin>>ans;
cout<<"В какую сторону (l)eft/(r)ight?";
cin>>ans2;
cout<<"На сколько сдвигаем?";
cin>>step;
if(ans2=='l'&&ans=='l')
{
if(step<n)
{step=n-step;}
if(step>=n)
{step=n-(step%n);}
}
    if(ans2=='l'&&ans=='c')
    {
    if(step<m)
    {step=m-step;}
    if(step>=m)
    {step=m-(step%n);}
    }
    int **tmp=0;
    newDin2(tmp, n, m, true);
    copyDin2(p, tmp, n, m);
    if(ans=='c')
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(j+step<m)
                {p[i][j+step]=tmp[i][j];}
                else
                {p[i][(j+step)%m]=tmp[i][j];}
            }
        }
    }
    if(ans=='l')
    {
        for(int i=0;i<n;i++)
        {
            for(int j=0;j<m;j++)
            {
                if(i+step<n)
                {p[i+step][j]=tmp[i][j];}
                else
                {p[(i+step)%n][j]=tmp[i][j];}
            }
        }
    }
delDin2(tmp,n,m);
return true;
    
}
 
bool copyDin2(int **&po, int **&po2, int &n, int &m)
{
    for(int i=0; i<n; i++)
    {
        for(int j=0; j<m; j++)
        {
        po2[i][j]=po[i][j];
        }
    }
    return true;
}
 
bool newDin2(int **&p, int &n, int &m, bool automate)
{
    if(automate==false)
    {cout<<"n=";
    cin>>n;}
        if(n<=0)
        {
        cout<<"Error input\n";
            return false;
        }
        p = new int *[n];
        if(p==0)
        {
        cout<<"Error memory\n";
            return false;
        }
if(automate==false)
{cout<<"m=";
cin>>m;}
    if(m<=0)
        {
        cout<<"Error input\n";
            return false;
        }
for (int i=0; i<n; i++)
{
p[i]=new int[m];
    if(p[i]==NULL)
    {cout<<"memory error\n";
    return false;
    }
}
return true;
}
 
bool PrintDin2( int **&p, const int &n, const int &m)
{
if(n<=0||m<=0)
{
cout<<"Error\n";
return false;
}
        for(int i=0;i<n;i++)
        {
        for(int j=0; j<m;j++)
        {cout<<setw(6)<<p[i][j];}
        cout<<endl;
        }
        return true;
 
}
 
bool RandDin2(int **&p, const int &n, const int &m, int a, int b)
{
if(n<=0||m<=0)
{
cout<<"Error\n";
return false;
}
srand((unsigned int)time(0));
        for(int i=0;i<n;i++)
        {
        for(int j=0; j<m;j++)
        {p[i][j]=rand()%(b-a+1)+a;}
        }
        return true;
 
}
 
bool delDin2(int **&p, int &n, int &m)
{
if(n<=0||m<=0)
{cout<<"Error\n";
return false;}
        for(int i=0;i<n;i++)
        {if(p[i]!=NULL)
        delete [] p[i];}
            if(p!=0)
            {
            delete p;
            p=NULL;
            return true;
            }
            else return false;
}
0
Crudelis
Шаровик затейник
687 / 436 / 78
Регистрация: 06.05.2010
Сообщений: 1,109
20.05.2010, 01:36 11
Цитата Сообщение от Myrik Посмотреть сообщение
printf("%d\t",tem);
зачем выводить сразу в этом же месте где меняется? я наверху написал как сделать вывод
Цитата Сообщение от Crudelis Посмотреть сообщение
C++
1
2
3
4
5
6
for(int i=0;i<10;i++)
{
for(int j=0;j<10;j++)
printf("%d\t",mat[i][j]);
printf("\n");
}
если хочешь выводить здесь то думаю не трудно было догадаться изменить


Цитата Сообщение от Myrik Посмотреть сообщение
printf("%d\t",tem);
на
C++
1
printf("%d\t",mat[ii][jj+1]);
Добавлено через 1 минуту
Цитата Сообщение от Myrik Посмотреть сообщение
C++
1
2
3
printf("%d\t",mat[ii][jj]); /* если так то выводит нечетные столбцы*/
 printf("\n");
 printf("%d\t",tem);
выводишь
C++
1
mat[ii][jj]
а потом tem который тоже равен:

Цитата Сообщение от Myrik Посмотреть сообщение
C++
1
tem=mat[ii][jj]
0
20.05.2010, 01:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.05.2010, 01:36

В матрице AxB переместить столбцы между собой
в матрице AxB переместить столбцы между собой местами так, чтобы они следовали в таком порядке: n,...

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

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


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

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

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