Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/7: Рейтинг темы: голосов - 7, средняя оценка - 5.00
7 / 7 / 5
Регистрация: 20.10.2012
Сообщений: 86
1

Из заданной матрицы, найти в каждом столбце максимальный элемент, и из максимального элемента вычесть значения в своих столбцах

22.02.2014, 12:12. Показов 1354. Ответов 7
Метки нет (Все метки)

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

Пример
Была матрица:
2 -3 4 -10 1
-3 1 5 7 -2
0 0 0 -10 10

Максимальный элемент в 1 столбце:2
Максимальный элемент в 2 столбце:1
Максимальный элемент в 3 столбце:5
Максимальный элемент в 4 столбце:7
Максимальный элемент в 5 столбце:10

Должно получиться

1.r11 = 2 - 2 = 0; r21 = 2 - (-3) = 5; r31 = 2 - 0 = 2;

2.r12 = 1 - (-3) = 4; r22 = 1 - 1 = 0; r32 = 1 - 0 = 1;

3.r13 = 5 - 4 = 1; r23 = 5 - 5 = 0; r33 = 5 - 0 = 5;

4.r14 = 7 - (-10) = 17; r24 = 7 - 7 = 0; r34 = 7 - (-10) = 17;

5.r15 = 10 - 1 = 9; r25 = 10 - (-2) = 12; r35 = 10 - 10 = 0;
Результаты
Ai П1 П2 П3 П4 П5
A1 0 4 1 17 9
A2 5 0 0 0 12
A3 2 1 5 17 0


Сама программа
Я нашел максимальные элементы в каждом столбце, а дальше не знаю как сделать
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
const int n=3;
const int m=5;
int VivodMassiva(int mas[n][m]);
int main()
{
  int mas[n][m],C[n],i,j,t,max,k=0,menu;
  printf ("1-Vvesti massiv s klaviaturi \n2-Iz Faila\n");
  scanf  ("%d",&menu);
  
/*---------Ввод матрицы с клавиатуры-------------------------------------------*/
 if(menu==1)
 {
                
  for(i=1;i<=n;i++)
      {
       for(j=1;j<=m;j++)
                  {
                  printf ("M[%d][%d]:",i,j);
                  scanf  ("%d",&(mas[i][j]));
                  }
      }
      }
/*-----------------------------------------------------------------------------*/ 
 
  
/*---------Ввод матрицы из файла-----------------------------------------------*/
 if(menu==2)
{
FILE *file;
if((file=fopen("1.txt","r"))==NULL)
  {
  printf("no file\n");
  system("PAUSE");
  return 1;
  }
  for(i=1;i<=n;i++)
      {
       for(j=1;j<=m;j++)
                  {
                  fscanf  (file,"%d",&mas[i][j]);
                  }
      }
 fclose(file);
}
/*-----------------------------------------------------------------------------*/
 
 for(i=1;i<=m;i++)
    {
      max=0;
      for(j=1;j<=n;j++)
            {
             for(t=1; t<=n;t++)
             if(mas[j][i]>max)
                { 
                  max=mas[j][i];
                }
      }
      k++;C[k]=max; 
     
      printf("Max element %d stolbca=%d ",i,max);
        printf("\n");       
    }
   
/*-----------------------------------------------------------------------------*/  
  
  
/*------------Вывод матрицы----------------------------------------------------*/ 
 
 VivodMassiva(mas);
  printf ("\n");
  for(i=1;i<=k;i++)
  printf ("%d ",C[i]);
  printf ("\n");
/*-----------------------------------------------------------------------------*/
  system("PAUSE");  
  return 0;
}
 
int VivodMassiva(int mas[n][m])
{   int i;
     int j;
    for(i=1;i<=n;i++)
    {
     printf("\n ");
     for(j=1;j<=m;j++)
         {
          printf ("%d \t",mas[i][j]);
         }
    }
return 0;
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.02.2014, 12:12
Ответы с готовыми решениями:

Найти максимальный и минимальный элемент в каждом столбце матрицы и заменить их нулями
Нужно найти макс и мин элемент в каждом столбце в двумерном массиве и заменить их нулями....

Найти в каждом столбце матрицы индексы максимального элемента
разработать алгоритм обработки двумерного массива размера nxm.Числа n и m,a также элементы массива...

Найти максимальный элемент в каждом столбце матрицы
Ребята помогите мне с решением Дана матрица целых чисел МxN элементов . Найти максимальный элемент...

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

7
79 / 73 / 66
Регистрация: 11.04.2013
Сообщений: 221
22.02.2014, 19:17 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
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
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
const int n=3;
const int m=5;
 
int VivodMassiva(int mas[n][m]);
int main()
{
  int mas[n][m],C[n],i,j,t,max,k=0,menu;
  printf ("1-Vvesti massiv s klaviaturi \n2-Iz Faila\n");
  scanf  ("%d",&menu);
  
/*---------Ââîä ìàòðèöû ñ êëàâèàòóðû-------------------------------------------*/
 if(menu==1)
 {
                
  for(i=1;i<=n;i++)
      {
       for(j=1;j<=m;j++)
                  {
                  printf ("M[%d][%d]:",i,j);
                  scanf  ("%d",&(mas[i][j]));
                  }
      }
  }  
/*---------Ââîä ìàòðèöû èç ôàéëà-----------------------------------------------*/
 if(menu==2)
{
FILE *file;
if((file=fopen("1.txt","r"))==NULL)
  {
  printf("no file\n");
  system("PAUSE");
  return 1;
  }
  for(i=1;i<=n;i++)
      {
       for(j=1;j<=m;j++)
                  {
                  fscanf  (file,"%d",&mas[i][j]);
                  }
      }
 fclose(file);
}
/*-----------------------------------------------------------------------------*/
 
 for(i=1;i<=m;i++)
    {
      max=0;
      for(j=1;j<=n;j++)
            {            
             if(mas[j][i]>max)
             max=mas[j][i];  
             }
      for(j=1;j<=n;j++)
             mas[i][j] = max - mas[i][j];         
     
      printf("Max element %d stolbca=%d ",i,max);
        printf("\n");       
    }
  
/*------------Âûâîä ìàòðèöû----------------------------------------------------*/ 
 
 VivodMassiva(mas);
  system("PAUSE");  
  return 0;
}
 
int VivodMassiva(int mas[n][m])
{   int i;
     int j;
    for(i=1;i<=n;i++)
    {
     printf("\n ");
     for(j=1;j<=m;j++)
         {
          printf ("%d \t",mas[i][j]);
         }
    }
return 0;
}
1
7 / 7 / 5
Регистрация: 20.10.2012
Сообщений: 86
22.02.2014, 19:44  [ТС] 3
pahuss, не запускается
0
79 / 73 / 66
Регистрация: 11.04.2013
Сообщений: 221
22.02.2014, 20:27 4
У меня запускается.
0
7 / 7 / 5
Регистрация: 20.10.2012
Сообщений: 86
22.02.2014, 20:55  [ТС] 5
после заполнения матрицы вылетает

Добавлено через 25 минут
если сделать так то вычисляет правильно 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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
 
const int n=3;
const int m=5;
 
int VivodMassiva(int mas[n][m]);
int main()
{
  int mas[n][m],C[n],i,j,t,z,max,k=0,menu;
  printf ("1-Vvesti massiv s klaviaturi \n2-Iz Faila\n");
  scanf  ("%d",&menu);
  
/*---------Ââîä ìàòðèöû ñ êëàâèàòóðû-------------------------------------------*/
 if(menu==1)
 {
                
  for(i=1;i<=n;i++)
      {
       for(j=1;j<=m;j++)
                  {
                  printf ("M[%d][%d]:",i,j);
                  scanf  ("%d",&(mas[i][j]));
                  }
      }
  }  
/*---------Ââîä ìàòðèöû èç ôàéëà-----------------------------------------------*/
 if(menu==2)
{
FILE *file;
if((file=fopen("1.txt","r"))==NULL)
  {
  printf("no file\n");
  system("PAUSE");
  return 1;
  }
  for(i=1;i<=n;i++)
      {
       for(j=1;j<=m;j++)
                  {
                  fscanf  (file,"%d",&mas[i][j]);
                  }
      }
 fclose(file);
}
/*-----------------------------------------------------------------------------*/
 
 for(i=1;i<=m;i++)
    {
      max=0;
      for(j=1;j<=n;j++)
            {            
             if(mas[j][i]>max)
             max=mas[j][i];  
           for(z=1;z<=n;z++)
              mas[j][i] = max - mas[j][i];
                      
             }
             
      printf("Max element %d stolbca=%d ",i,max);
        printf("\n");       
    }
    
  
/*------------Âûâîä ìàòðèöû----------------------------------------------------*/ 
 
 VivodMassiva(mas);
  system("PAUSE");  
  return 0;
}
 
int VivodMassiva(int mas[n][m])
{   int i;
     int j;
    for(i=1;i<=n;i++)
    {
     printf("\n ");
     for(j=1;j<=m;j++)
         {
          printf ("%d \t",mas[i][j]);
         }
    }
return 0;
}
0
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
22.02.2014, 21:57 6
Лови! Подправил чуток. Может пригодится.

Кликните здесь для просмотра всего текста

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
#include "stdafx.h"
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
 
using namespace std;
 
int** matrixConstructor(int n, int m); 
void matrixFill(int** matrix, int n, int m, bool random_fill = true);
bool matrixReadFromFile(char * file_name, int **matrix, int n, int m);
void doTask(int **matrix, int n, int m);
void matrixPrint(int** matrix, int n, int m); 
void matrixDestructor(int** matrix, int t);
 
int main(){
 
    int n, m;
    cout << "Enter n : "; cin >> n;
    cout << "Enter m : "; cin >> m;
 
    int **M 
        = matrixConstructor(n, m + 1)/*one collum for max items*/; 
 
    char answer;
    cout << "1. Enter matrix" << endl
        << "2. Read matrix from file" << endl
        << "Your choose? - "; cin >> answer;
 
    if(answer == '1'){
        matrixFill(M, n, m, true);
    }else{
        matrixReadFromFile("someName.txt", M, n, m);
    }
 
    matrixPrint(M, n, m);
 
    doTask(M, n, m);
 
    matrixPrint(M, n, m + 1);
 
    matrixDestructor(M, n);
 
    system("pause");  
    return 0;
}
 
int** matrixConstructor(int n, int m)
{
    int** matrix_new = new int* [n]; 
    for (int i = 0; i < n; ++i) {
        matrix_new[i] = new int[m];
    }
    return matrix_new;
}
 
void matrixFill(int** matrix, int n, int m, bool random_fill){
 
    if(random_fill){
        srand((unsigned)time(NULL));
        for (int i = 0; i < n; i++){
            for (int j = 0; j < m; j++){
                matrix[i][j] = rand() % 30 + 10;      
            }
        }
 
    }else{
        for(int i = 0; i < n; i++){
            for(int j = 0; j < m; j++){
                cout<<"Enter {"<<i<<":"<<j<<"}"<<"element"; cin>> matrix[i][j];
            }
            cout<<endl;
        }
    }
}
 
bool matrixReadFromFile(char * fileName, int **matrix, int n, int m){
 
    FILE *file;
    if((file=fopen(fileName,"r"))==NULL){
        cout << "File open error!" << endl;
        system("pause");
        return false;
    }
 
    for(int i = 1; i < n; ++i){
        for(int j = 1; j < m; ++j){
            fscanf(file,"%d",&matrix[i][j]);
        }
    }
    fclose(file);
}
 
void doTask(int **matrix, int n, int m){
 
    for (int i = 0; i < n; ++i){
        int maxInRow = matrix[i][0];
        for (int j = 1; j < m; ++j){
            if(matrix[i][j] > maxInRow){
                maxInRow = matrix[i][j];
            }
        }               
        for (int k = 0; k < m; ++k){
            matrix[i][k] -= maxInRow;
        }
        matrix[i][m] = maxInRow;
    } 
}
 
void matrixPrint(int** matrix, int n, int m){
 
    for (int i = 0; i < n; ++i){
        for (int j = 0; j < m; ++j){
            cout<<matrix[i][j]<<"   ";
        }
        cout<<endl;
    }
    cout<<endl;
}
 
void matrixDestructor(int** matrix, int t)
{   
    for (int i = 0; i < t; ++i){
        delete [] matrix[i];
    }
    delete [] matrix;  
}


Из заданной матрицы, найти в каждом столбце максимальный элемент, и из максимального элемента вычесть значения в своих столбцах
1
7 / 7 / 5
Регистрация: 20.10.2012
Сообщений: 86
22.02.2014, 22:10  [ТС] 7
some_name, а что нужно поменять что бы не в строках а в столбцах вычитало?
0
Вежливость-главное оружие
233 / 234 / 86
Регистрация: 19.02.2013
Сообщений: 1,446
22.02.2014, 22:23 8
Лучший ответ Сообщение было отмечено shop как решение

Решение

Цитата Сообщение от shop Посмотреть сообщение
some_name, а что нужно поменять что бы не в строках а в столбцах вычитало?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void doTask(int **matrix, int n, int m){
 
    for (int i = 0; i < n; ++i){
        int maxInRow = matrix[i][0];
 
        for (int j = 1; j < m; ++j){
            if(matrix[i][j] > maxInRow){
                maxInRow = matrix[i][j];
            }
        }               
        for (int k = 0; k < m; ++k){
            matrix[i][k] -= maxInRow;
        }
        matrix[i][m] = maxInRow;
    } 
}
Добавлено через 43 секунды
стоп, это не то : случайно нажал "Отправить..."

Добавлено через 2 минуты
Если вы имели ввиду вычесть max элемент из столбца, в котором он находится, то вот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
void doTask(int **matrix, int n, int m){
 
    for (int i = 0; i < n; ++i){
        int maxInRow = matrix[i][0];
        int maxIndex;
        for (int j = 1; j < m; ++j){
            if(matrix[i][j] > maxInRow){
                maxInRow = matrix[i][j];
                maxIndex = j;
            }
        }               
        for (int k = 0; k < m; ++k){
            matrix[k][maxIndex] -= maxInRow;
        }
        matrix[i][m] = maxInRow;
    } 
}
Добавлено через 1 минуту
и еще вот :
C++
1
int maxIndex;
(это принципиально важно)

Добавлено через 16 секунд
елы палы!

вот так: int maxIndex = 0;
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.02.2014, 22:23

В каждом столбце матрицы найти максимальный элемент
Дана матрица размера MxN. В каждом столбце матрицы найти максимальный элемент.

В каждом столбце матрицы найти максимальный элемент
Помогите, пожалуйста.. 1)Дана матрица размера M×N. Вывести ее элементы, расположенные в столбцах с...

В каждом столбце матрицы найти максимальный элемент.
Дана матрица размера M на N. В каждом столбце найти максимальный элемент.

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


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru