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

Перестановка столбцов в матрице - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.86
lamer_c
0 / 0 / 0
Регистрация: 04.06.2009
Сообщений: 6
04.06.2009, 19:33     Перестановка столбцов в матрице #1
Смысл задания такой.. данна матрица. нужно:
1) посчитать сумму элементов в тех столбцах, которые содержат хоть 1 отрицательный элемент
2) характеристикой столбца называется сумма модулей его отрицательных нечетных элементов, переставить столбцы по возрастанию их харакстеристик..
1 задание я сделал... во 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
#include<iostream>
using namespace std;
#include<iomanip>
#include<stdlib.h>
int main(){
    const int row=5;const int col=5;
    int mas[row][col];
    int sum[row][col];
    int mass[row][2];
    int i,j,k,s,s1;
    for (i=0;i<row;i++) {for(j=0;j<col;j++){mas[i][j]=rand()%10-5;
        cout<<setw(4)<<mas[i][j]<<" ";}
        cout<<endl;
    }
 
    for (i=0;i<row;i++) for(j=0;j<col;j++)sum[i][j]=0;
    /// находим сумму в столбцах, содержащих отрицательные элементы
    for(j=0;j<col;j++) {s1=0;
        for(i=0;i<row;i++)
        if(mas[i][j]<0)
            for(i=0;i<row;i++) {k=j;
                s1+=mas[i][k];
                sum[0][j]=k+1;
                sum[1][j]=s1;}}
                cout<<endl;
    for (i=0;i<2;i++){
        for (j=0;j<col;j++)
        cout<<setw(4)<<sum[i][j]<<" ";cout<<endl;}
        cout<<endl;
    ///находим характеристики
        s=0;
        for (j=0;j<col;j++){s=0;
            for(i=0;i<row;i+=2){
                if(mas[i][j]<0)
            s+=abs(mas[i][j]);
            mass[0][j]=s;
            mass[3][j]=j;}
            cout<<"j= "<<j<<" "<<"s= "<<s<<endl;
        }
return 0;
}
выслушаю и критику так как в Си++ начал вот недавно програмить пытаться
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
lamer_c
0 / 0 / 0
Регистрация: 04.06.2009
Сообщений: 6
06.06.2009, 23:29  [ТС]     Перестановка столбцов в матрице #2
видимо так сложно.. что никто не ответил
Ultrator
11 / 7 / 1
Регистрация: 28.04.2009
Сообщений: 219
06.06.2009, 23:52     Перестановка столбцов в матрице #3
Дак это...

Ещё 1 одномерный массив нада: S[ j ],
Вместо 38 строки будет S[j]=s;
Затем - (любая) сортировка, но лучше посмотри в 3-й том Кнута (щас я и сам посмотрю, там как раз для указателей, по ключу), а переприсваивать столбцы - не надо (но, для этого 2-мерный массив mas[][] надо было создать несколько иначе), просто будут переприсвоены указатели...

Правда, при этом индексы придётся поменять местами (иначе - не получится).
Но, можно и более тупо. Смотря как надо...
lamer_c
0 / 0 / 0
Регистрация: 04.06.2009
Сообщений: 6
06.06.2009, 23:59  [ТС]     Перестановка столбцов в матрице #4
Ultrator, в смысле иначе? можно немного подробнее?
Search..
Заказ софта
 Аватар для Search..
339 / 184 / 10
Регистрация: 26.05.2009
Сообщений: 863
07.06.2009, 00:17     Перестановка столбцов в матрице #5
C++
1
"посмотри в 3-й том Кнута (щас я и сам посмотрю, там как раз для указателей, по ключу)" - эта цитата убила :D
mirso
524 / 342 / 17
Регистрация: 05.04.2009
Сообщений: 709
07.06.2009, 00:36     Перестановка столбцов в матрице #6
lamer_c,
"перестановка столбцов" уже была
C++
1
2
3
4
5
6
7
8
char tmp;
    for(i = 0; i < n; i++)
    {
            tmp = mas[i][x -1];
            mas[i][x - 1] = mas[i][y - 1];
            mas[i][y - 1] = tmp;
 
    }
Ultrator
11 / 7 / 1
Регистрация: 28.04.2009
Сообщений: 219
07.06.2009, 15:41     Перестановка столбцов в матрице #7
Ага, кому делать нечего - переприсваивать переменные.
Ну и ладно.
Смотря, как надо...

Добавлено через 12 минут 25 секунд

Не по теме:

Да и вообще, чёт настроения нет объяснять. Я бы сделал по-другому, но зачем я буду это навязывать.



Если чё: Кнут, Т3, 5.2.1, Алгоритм L (Сортировка: Метод вставки в список). (Это - ПОСЛЕ сортировки Шелла и её оценки.)
Ключ - S[i].
Ну, и всё, наверно.



А теперь - по поводу Search: Модератор, ау-у!
lamer_c
0 / 0 / 0
Регистрация: 04.06.2009
Сообщений: 6
07.06.2009, 16:19  [ТС]     Перестановка столбцов в матрице #8
mirso, ты мне написал пузырьковую сортировку... мне надо переставить в соответствии с характеристиками

Добавлено через 11 минут 58 секунд
З.Ы. если кто не понял характеристики столбцов здесь: mass[0][j]=s;
Patch
2276 / 491 / 11
Регистрация: 01.04.2009
Сообщений: 2,178
07.06.2009, 16:57     Перестановка столбцов в матрице #9
да нет, lamer_c.
mirso просто написал процедуру сдвига столбцов. что ты и просил.
ставь свое условие, и сдвигай по этому алгоритму.
lamer_c
0 / 0 / 0
Регистрация: 04.06.2009
Сообщений: 6
07.06.2009, 17:08  [ТС]     Перестановка столбцов в матрице #10
чтож спасибо. попробуем
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2009, 00:23     Перестановка столбцов в матрице
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
lamer_c
0 / 0 / 0
Регистрация: 04.06.2009
Сообщений: 6
11.06.2009, 00:23  [ТС]     Перестановка столбцов в матрице #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
#include <math.h>
#include<iostream>
#include <iomanip> 
using namespace std;
void main()
{
const int m=3;
const int n=4;
int matr[m][n];
int c,j,i;
bool f=false;
int mas[n];
cout<<"\nVvedite elementi mas";
for (i=0;i<m;i++)for ( j=0;j<n;j++)cin>>matr[i][j];
for (i=0;i<m;i++){for ( j=0;j<n;j++)cout<<setw(3)<<matr[i][j];
cout<<endl;}
//читаем характеристики
for(j=0;j<n;j++){
    mas[j]=0; for(i=0;i<m;i++)
        if(matr[i][j]<0 && matr[i][j]% 2) mas[j]+=abs(matr[i][j]);
        cout<<"j "<<j<<" "<<mas[j]<<endl;}
 
//Сортировка
for( i=0;i<m;i++)
  for(j=i+1;j<n;j++)
    if(mas[i]>mas[j])
      {
        c=mas[i];
        mas[i]=mas[j];
        mas[j]=c;
        for(int k=0;k<m;k++)
           {
               c=matr[k][i];
               matr[k][i]=matr[k][j];
               matr[k][j]=c;
            }
      }
for (i=0;i<m;i++){for ( j=0;j<n;j++)cout<<setw(3)<<matr[i][j];cout<<endl;}
//Нахождение суммы
for(i=0;i<n;i++)
  {
    c=0;
    f=false;
    for(int j=0;j<m;j++)
       {
            if(!f) f= (matr[j][i]<0);
            c+=matr[j][i];
       }
    if(f) cout<<"Summ "<<i<<" = "<<c<<endl;
  }
}
Yandex
Объявления
11.06.2009, 00:23     Перестановка столбцов в матрице
Ответ Создать тему
Опции темы

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