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

Матрицы - C++

Восстановить пароль Регистрация
 
Rooney
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 37
19.01.2011, 22:20     Матрицы #1
Дана квадратная матрица А порядка М. Найти максимальный элемент для каждой её диагонали, параллельной побочной (начиная с одноэлементной диагонали А[1,1])

Помогите пожалуйста, оттолкнуться....
У матрицы ведь есть побочная диагональ, у которой есть две параллельные... одна находится выше побочной, другая ниже....
Нужно создать две функции? Одна находит макс. значение, которое выше побочной, а другая ниже побочной? или можно всё в одну заделать?
Помогите мне пожалуйста только сам алгоритм написать (функцию).
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.01.2011, 22:20     Матрицы
Посмотрите здесь:

C++ Функция: получить две матрицы и вернуть номер матрицы, среднее арифметическое элементов которой максимально
C++ какими средствами пользоваться для того, чтобы умножать матрицы, складывать матрицы?
Матрицы[макс. элементы, получение новой матрицы] C++
C++ Для матрицы размером m x n вычислить сумму элементов матрицы
Построение новой матрицы по части заданой матрицы C++
Если в строках матрицы есть хотя бы один положительный элемент ,то поменять знаки всей матрицы на противоположные C++
Из матрицы получить массив, каждый элемент которого равен среднему арифметическому каждой строки матрицы C++
Составить функцию для построения вектора из элементов матрицы по заданному правилу и отсортировать элементы матрицы C++
C++ не могу сделать так чтоб я сам вводил матрицы) задача умножения матрицы на вектор
C++ Шаблонный класс матрицы. Проверка матрицы на пустоту
Для заданной матрицы найти такие k, что k-ая строка матрицы совпадает с k-ым столбцом C++

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
killboss
 Аватар для killboss
59 / 59 / 2
Регистрация: 18.12.2010
Сообщений: 127
19.01.2011, 22:26     Матрицы #2
Цитата Сообщение от Rooney Посмотреть сообщение
или можно всё в одну заделать?
Конечно в одну функцию, только выбор между диагоналями можно, к примеру, задавать через флаг (tru, false).
Rooney
0 / 0 / 0
Регистрация: 22.11.2009
Сообщений: 37
20.01.2011, 09:02  [ТС]     Матрицы #3
Цитата Сообщение от killboss Посмотреть сообщение
Конечно в одну функцию, только выбор между диагоналями можно, к примеру, задавать через флаг (tru, false).
Так надо без выбора надо и для верхней и для нижней найти максимум....
отдельно цикл для верхней, и отдельно для нижней?

Добавлено через 43 минуты
killboss,
как мне это реализовать в функции?
допустим во начальное описание, до самого главного алгоритма...

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
#include<windows.h>
#include<iomanip>
#include<iostream>
#include<fstream>
# define NMAX 100
 
using namespace std;
const int mmax=100,
          nmax=100; 
 
void matr(int matrix[][nmax],int M, char name[]);
void output_matrix (int matrix[][nmax],int M);
void smatrix (int matrix[][nmax],int M);
 
int main()
{
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        int matrix[mmax][nmax];
        int M=0;                      // число строк матрицы
        char name[] = "Matrix92.txt";
        cout << "Введите порядок матрицы:" << endl;
        cin >> M;
        matr(matrix,M,name);
        cout << "Данная матрица:" << endl;
        output_matrix (matrix,M);
        smatrix (matrix,M);
        cout << "Матрица после сортировки: " << endl;
        output_matrix (matrix,M);
        system("pause");
        return 0;
      
}
 
void matr(int matrix[][nmax],int M, char name[]){
      for (int i=0; i < M; i++){
            for (int j=0; j < M; j++){
                // cin >> matrix[i][j];
                matrix[i][j]=1;
            }
      }
}
 
 
void output_matrix (int matrix[][nmax],int M){
     for (int i = 0; i < M; i++){ 
          for (int j = 0; j < M; j++){
               cout << setw(3) << matrix[i][j] << " ";
          }
          cout << endl;
     }
}
 
void smatrix (int matrix[][nmax],int M){
                
 
 
 
}
Вы не можете помочь составить алгоритм, реализующий данное условие?

Добавлено через 9 часов 50 минут
Пожалуйста, оцените решение:

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
#include<windows.h>
#include<iomanip>
#include<iostream>
#include<fstream>
# define NMAX 100
 
using namespace std;
const int mmax=100,
          nmax=100; 
 
void matr(int matrix[][nmax],int M, char name[]);
void output_matrix (int matrix[][nmax],int M);
void smatrix (int matrix[][nmax],int M,int &maxL,int &maxN);
 
int main()
{
        SetConsoleCP(1251);
        SetConsoleOutputCP(1251);
        int matrix[mmax][nmax];
        int M=0;                      // порядок матрицы
        char name[] = "Matrix87.txt";
        int maxL , maxN;
        cout << "Введите порядок матрицы:" << endl;
        cin >> M;
        matr(matrix,M,name);
        cout << "Данная матрица:" << endl;
        output_matrix (matrix,M);
        smatrix (matrix,M,maxL,maxN);
        cout << endl <<"Максимальный элемент диагонали 1: " << maxL<<endl;
        cout << "Максимальный элемент диагонали 2: " << maxN<<endl;
        system("pause");
        return 0;
      
}
 
void matr(int matrix[][nmax],int M, char name[]){
      ifstream in(name);
      for (int i=0; i < M; i++){
            for (int j=0; j < M; j++){
                 in >> matrix[i][j];
            }
      }
      in.close();
} 
 
void output_matrix (int matrix[][nmax],int M){
     for (int i = 0; i < M; i++){ 
          for (int j = 0; j < M; j++){
               cout << setw(3) << matrix[i][j] << " ";
          }
          cout << endl;
     }
}
 
void smatrix (int matrix[][nmax],int M,int &maxL,int &maxN){
                bool haveMaxL =false;
                bool haveMaxN =false;
                for(int i =M-2,j=0; i>=0;i--,j++){     // верхняя, параллельная побочной
                            if (!haveMaxL || maxL < matrix[i][j]){
                                 maxL = matrix[i][j];
                                 haveMaxL = true;
                            }
                } 
                for(int i=M-1,j=1; i>0;i--,j++){   // нижняя, параллельная побочной
                            if (!haveMaxN || maxN < matrix[i][j]){
                                 maxN = matrix[i][j];
                                 haveMaxN = true;
                            }
                }
}
Yandex
Объявления
20.01.2011, 09:02     Матрицы
Ответ Создать тему
Опции темы

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