Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
jon4eg
1 / 1 / 0
Регистрация: 28.01.2014
Сообщений: 96
#1

Преобразование матрицы (удалить из матрицы столбец с наибольшей по модулю суммой элементов)

29.12.2014, 23:00. Просмотров 479. Ответов 3
Метки нет (Все метки)

Всем привет, есть программа для ввода матрицы и вывода на экран. Нужно удалить из матрицы столбец с наибольшей по модулю суммой элементов.
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
#include <cstdio>
#include <Windows.h>
#include <clocale>
#include <cstdlib>
#include <conio.h>
#include <cstring>
void SetColor(int text, int background)
{
   HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
   SetConsoleTextAttribute(hStdOut, (WORD)((background << 4) | text));
}
int menu(char *Menu[],int n)
{
    int punkt=0,vybor=-1;;
    while(vybor==-1)
    {   SetColor(15, 0);
        system("cls");
        for(int i=0;i<n;i++)
        {   if(punkt==i)
                SetColor( 0, 15);
                else SetColor(15, 0);
            //cout<<Menu[i];
                printf("%s",Menu[i]);
        }
        
        
        int key = getch();
        int kod=key;
        if (kod==13) return punkt;
        
                key = getch();
                switch(key){
        
                    case 72: if(punkt>0)punkt--;break;
                    case 80: if(punkt<n-1)punkt++;break;
                    //case '\n': return punkt; break;
                }
 
        }
}
void PrintMatr(int *A,int m,int n)
{ 
    for (int i=0; i<m; i++)
    {
        for (int j=0; j<n; j++)
            
            printf("%5d", A[i*n+j]);
            printf("\n");
    } 
}
int* InputMatr(int m,int n)
{ 
    int *A = new int[n * m];
    for (int i = 0; i < m; i++)
        for (int j = 0; j < n; j++)
            scanf("%d", &A[i * j + n]);
    return A;
}
int* inputMatrfromfile(FILE* f, int &n, int &m)
{ 
    fscanf(f,"%d%d", &n,&m);
    int *A = new int[n * m];
    for (int i = 0; i < n; i++)
        for (int j = 0; j < m; j++)
            fscanf(f,"%d", &A[i * m + j]);
    return A;
}
bool Xarakt(int *A, int n, int m)
{
    int max, i, j;
    for (i=0; i<n; i++)
    {
        for (j=0; j<m; j++)
            int max;
        if(A[i*m+j] > max)
            max = A[i*m+j];
        if(max % 2 == 0)
            return true;
        else
            return false;
        break;
    }
}
void Transplanirovanie(int *A, int n, int m)
{
    
    
}
 
int main(int argc, char* argv[])
{ 
    setlocale (LC_ALL,"Russian");
    int n, m, p = 0, max;
    int *A = 0;
    FILE *file;
    char name [200];
    bool f = false;
    char *MENU[]={"Ввод матрицы с клавиатуры\n","Вывод матрицы из файла\n","Характеристика\n", "Транспланирование\n", "Печать матрицы\n", "Преобразование\n","Выход\n"};
     
    while (p != 7)
    {
        system("cls");
        /*printf("\n 1. Ввод матрицы с клавиатуры");
        printf("\n 2. Вывод матрицы из файла");
        printf("\n 3. Вычисление характеристики");
        printf("\n 4. Транспланирование");
        printf("\n 5. Печать матрицы");
        printf("\n 6. ");
        printf("\n 7. Выход\n");
        scanf("%d",&p);*/
         p = menu(MENU,7)+1;
        switch (p)
        {
        case 1: 
            {
                if (A != 0)
                    delete []A;
                    printf("\nВведите размер матрицы");
                     /*scanf("%d%d",&n,&m);
                     A=InputMatr(n,m);*/
                    A = inputMatrfromfile(stdin, m, n);
                    f = true;
                    break;
            }
        case 2: 
            { 
                if (argc < 2)
                {
                    printf("\nВы забыли указать имя файла");
                    scanf("%s", name);
                }
                else 
                    strcpy(name, argv[1]);
                    file = fopen(name,"r");
                    if (file == 0)
                        printf("\nОшибка открытия файла");
                    else 
                    { 
                        if (A != 0)
                            delete []A;
                            A = inputMatrfromfile(file, n, m);
                            f = true;
                    }
                    fclose(file);
                    break;
            }
        case 3:
            {
                if(Xarakt(A, n, m) == true)
                    printf("\n да \n");
                else
                    printf("\n нет\n");
                break;
            }
        case 4:
            {if (f == true)
                Transplanirovanie(A, n, m);
            else 
                    printf("\nМатрица еще не введена");
                break;
            }
        case 5: 
            { 
                if (f == true)
                    PrintMatr(A, n, m);
                else 
                    printf("\nМатрица еще не введена");
                 break;
            }
        case 7: 
            break;
        default : printf("Введен не допустимый пункт меню");
        }
        printf("Для продолжения введите любую клавишу");
        fflush(stdin);
        getch();
    }
    if(f == true)
        delete []A;
    return 0;
}
функция void Transplanirovanie потенциально за это должна отвечать. Подскажите, как это сделать?

Добавлено через 2 часа 50 минут
вверх
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
29.12.2014, 23:00
Ответы с готовыми решениями:

Поменять местами столбец матрицы с наибольшей суммой элементов и заданный столбец (результат не выводится)
Задана матрица произвольной размерности. Поменять местами столбец матрицы,...

Удаление столбца с наибольшей по модулю суммой элементов из матрицы. Объясните принцип работы
Есть кусок программы, который удаляет из матрицы столбец с наибольшей по модулю...

Поменять местами строку матрицы с наименьшей суммой элементов со строкой с наибольшей суммой элементов
Помогите плиз решить несколько задас на преобразование матриц на С++ 1.В...

Найти строку матрицы с наибольшей и наименьшей суммой элементов
Напишите пожалуйста решение задачи Вот условие:Дана прямоугольная матрица....

Найти строки матрицы с наибольшей и наименьшей суммой элементов
Доброго времени суток! Если кто-то может, !!!ПОМОГИТЕ!!! с решением задачи...

3
_script_
171 / 139 / 70
Регистрация: 01.05.2012
Сообщений: 414
29.12.2014, 23:19 #2
Цитата Сообщение от jon4eg Посмотреть сообщение
Нужно удалить из матрицы столбец с наибольшей по модулю суммой элементов.
это не транспонирование)
0
jon4eg
1 / 1 / 0
Регистрация: 28.01.2014
Сообщений: 96
29.12.2014, 23:20  [ТС] #3
_script_, я в курсе Просто раньше там было именго транспонирование, а потом задача изменилась
0
_script_
171 / 139 / 70
Регистрация: 01.05.2012
Сообщений: 414
30.12.2014, 00:03 #4
jon4eg,
ну тогда как то так:
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
int* Transplanirovanie(int *A, int m, int &n)
{
    int nColumn=0;
    int maxSum=0;
    for(int j=0; j<n; j++)
    {
        int Sum=0;
        for  (int i=0; i<m; i++)
        {
            Sum+=abs(A[i*n+j]);
        }
       if(maxSum<Sum)
       {
           maxSum=Sum;
           nColumn=j;
        }
    }
    n--;
    int *newA=new int[n*m];
    for(int i=0; i<m; i++)
    {
        int k=0;
        for(int j=0; j<n; j++)
        {
            newA[i*n+j]=A[i*n+j+i+((nColumn<=j)?1:0)];
        }
    }
    return newA;
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
 case 4:
        {
            if (f == true)
            {
                int *t= Transplanirovanie(A, n, m);
                delete []A;
                A=t;
            }
            else
                printf("\nМатрица еще не введена");
            break;
        }
Способ хранения матрицы у Вас не самый лучший
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.12.2014, 00:03

Найти номер строки матрицы с наибольшей суммой элементов
Задача. Дана матрица размера M x N . Найти номер её строки с наибольшей суммой...

Найти номер строки матрицы с наибольшей суммой элементов
Дана матрица размера МхН.Найти номер ее строки с наибольшей суммой элементов и...

Найти строки матрицы с наибольшей и наименьшей суммой элементов
Дана прямоугольная матрица. Найти ее строки с наибольшей и наименьшей суммой...


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

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

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