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

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

04.06.2009, 19:33. Просмотров 2134. Ответов 10
Метки нет (Все метки)

Смысл задания такой.. данна матрица. нужно:
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;
}
выслушаю и критику так как в Си++ начал вот недавно програмить пытаться
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.06.2009, 19:33
Ответы с готовыми решениями:

Перестановка столбцов в матрице
Составьте программу преобразования целочисленной матрицы размерностью n*m по...

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

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

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

Перестановка столбцов матрицы
Дан двумерный числовой массив n*m. Найти массив получающийся перестановкой...

10
lamer_c
0 / 0 / 0
Регистрация: 04.06.2009
Сообщений: 6
06.06.2009, 23:29  [ТС] 2
видимо так сложно.. что никто не ответил
0
Ultrator
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
06.06.2009, 23:52 3
Дак это...

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

Правда, при этом индексы придётся поменять местами (иначе - не получится).
Но, можно и более тупо. Смотря как надо...
0
lamer_c
0 / 0 / 0
Регистрация: 04.06.2009
Сообщений: 6
06.06.2009, 23:59  [ТС] 4
Ultrator, в смысле иначе? можно немного подробнее?
0
Search..
Заказ софта
340 / 185 / 21
Регистрация: 26.05.2009
Сообщений: 863
07.06.2009, 00:17 5
C++
1
"посмотри в 3-й том Кнута (щас я и сам посмотрю, там как раз для указателей, по ключу)" - эта цитата убила :D
0
mirso
526 / 344 / 45
Регистрация: 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;
 
    }
1
Ultrator
14 / 10 / 1
Регистрация: 28.04.2009
Сообщений: 219
07.06.2009, 15:41 7
Ага, кому делать нечего - переприсваивать переменные.
Ну и ладно.
Смотря, как надо...

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

Не по теме:

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



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



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

Добавлено через 11 минут 58 секунд
З.Ы. если кто не понял характеристики столбцов здесь: mass[0][j]=s;
0
Patch
2336 / 492 / 22
Регистрация: 01.04.2009
Сообщений: 2,181
07.06.2009, 16:57 9
да нет, lamer_c.
mirso просто написал процедуру сдвига столбцов. что ты и просил.
ставь свое условие, и сдвигай по этому алгоритму.
1
lamer_c
0 / 0 / 0
Регистрация: 04.06.2009
Сообщений: 6
07.06.2009, 17:08  [ТС] 10
чтож спасибо. попробуем
0
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;
  }
}
0
11.06.2009, 00:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.06.2009, 00:23

Перестановка столбцов матрицы
Помогите разобраться, суть задачи: Дана целочисленная матрица размера 6х9....

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

Перестановка строк в матрице (С++)
Здравствуйте ребята,очень нужна помощь помогите пожалуйста написать...


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

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

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