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

Функция разбиения матрицы на две - C++

Восстановить пароль Регистрация
 
_Loader_
 Аватар для _Loader_
6 / 6 / 0
Регистрация: 18.04.2012
Сообщений: 92
21.05.2012, 21:57     Функция разбиения матрицы на две #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
86
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    cout<<"Input number of rows: "<<endl;
    int k;
    cin>>k;
    cout<<"Input number of cols: "<<endl;
    int m;
    cin>>m;
    typedef vector<vector<int> > Matrix;
 
    Matrix A(k);
    cout<<"Input matrix: "<<endl;
    int temp;
 
    // Заполнение исходной матрицы
    for (int i = 0; i < k; ++i)
        for (int j = 0; j < m; ++j)
        {
            cin>>temp;
            A[i].push_back(temp);
        }
 
        cout<<"Input number of rows of first matrix: "<<endl;
        int k1;
        cin>>k1;
        // Проверка допустимости числа строк
        if (k1 == k)
        {
            while (k1 == k)
            {
                cout<<"Wrong number of rows!"<<endl;
                cout<<"Input number of rows: "<<endl;
                cin>>k1;
            }
        }
 
        // Заполнение первой матрицы    
        Matrix B(k1);
        for (int i = 0; i < k1; ++i)
            for (int j = 0; j < m; ++j)
            {
                B[i].push_back(A[i][j]);            }
// Заполнение второй матрицы    
            int k2 = k - k1;    
            Matrix C(k2);
            for (int i = k1, i1 = 0; i < k; ++i, ++i1)
                for (int j = 0; j < m; ++j)
                {
                    C[i1].push_back(A[i][j]);
                }
 
                // Вывод исходной матрицы
                cout<<"Matrix A: "<<endl;
                for (int i = 0; i < k; ++i)   
                {
                    for (int j = 0; j < m; ++j)
                        cout<<A[i][j]<<" ";
                    cout<<endl;
                }
 
                // Вывод первой матрицы
                cout<<"Matrix A1: "<<endl;
                for (int i = 0; i < k1; ++i)   
                {
                    for (int j = 0; j < m; ++j)
                        cout<<B[i][j]<<" ";
                    cout<<endl;
                }
 
                // Вывод второй матрицы
                cout<<"Matrix A2: "<<endl;
                for (int i = 0; i < k2; ++i)   
                {
                    for (int j = 0; j < m; ++j)
                        cout<<C[i][j]<<" ";
                    cout<<endl;
                }
                system("PAUSE");
 
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2012, 21:57     Функция разбиения матрицы на две
Посмотрите здесь:

C++ Функция разбиения строки в части [C++]
Функция разбиения строки на отдельные слова C++
C++ Даны две целочисленные матрицы 4-го порядка. Получить новую * матрицу путем вычитания из элементов каждого столбца первой матрицы
C++ Даны две действительные квадратные матрицы порядка n. Получить новую матрицу: путем умножения элементов каждой строки первой матрицы на наибольшее из
1)Даны две действительные квадратные матрицы порядка n. Получить новую матрицу : А) умножение элементов каждой строки первой матрицы на наибольшее из C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
21.05.2012, 23:26     Функция разбиения матрицы на две #2
Вы уж тогда напишите, как именно вам нужно разбивать матрицу... Т.е., матрица у вас должна разбиться на произведение двух? Как именно? Это ведь я могу написать A=A*E, где E -- единичная...
_Loader_
 Аватар для _Loader_
6 / 6 / 0
Регистрация: 18.04.2012
Сообщений: 92
21.05.2012, 23:32  [ТС]     Функция разбиения матрицы на две #3
Нужно просто "разделить" ее физически допустим пополам например:

1 2 3 4
5 6 7 8
9 0 1 2
и разделить ее на
1 2
5 6
9 0

3 4
7 8
1 2
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
21.05.2012, 23:49     Функция разбиения матрицы на две #4
Ну, сложностей не вижу. Тут даже 3 варианта.
Первый:
Строки 42-82 выносим в функцию, у нее будет 3 аргумента (кол-во строк, стлобцов и сама исходная матрица), и она будет иметь тип void и ничего возвращать не будет.
Второй:
Строки 42-55 выносим в функцию, аргументы такие же, только теперь у нас будут не матрицы B и C, а обьявим массив матриц Matrix* M=new Matrix[2]; , и это у нас будут матрицы M[0] и M[1]. Возвращаем массив M.
Третий:
Строки 42-55 выносим в функцию, к аргументам добавляем Matrix &B, Matrix &C, которые создаем в основной программе (пустыми) и передаем в функцию. Функция имеет тип void.
_Loader_
 Аватар для _Loader_
6 / 6 / 0
Регистрация: 18.04.2012
Сообщений: 92
22.05.2012, 00:16  [ТС]     Функция разбиения матрицы на две #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
        double Funk(int k, int m, Matrix A);
        {
            Matrix* M=new Matrix[2];
            
            // Заполнение первой матрицы    
            Matrix M[1];
            for (int i = 0; i < k1; ++i)
                for (int j = 0; j < m; ++j)
                {
                // M[0].push_back(A[i][j]);         }
                // Заполнение второй матрицы    
                int k2 = k - k1;    
                Matrix M[2];
                for (int i = k1, i1 = 0; i < k; ++i, ++i1)
                    for (int j = 0; j < m; ++j)
                    {
                    //  M[1][i1].push_back(A[i][j]);
                    }
        }
Вот так надо сделать как я понял? это по второму способу.
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
22.05.2012, 00:24     Функция разбиения матрицы на две #6
Только тип функции не double, а Matrix*, и в конце функции дописать return M.
И в основной программе к ним, соответственно, тоже обращаться как к M[0] и M[1].
_Loader_
 Аватар для _Loader_
6 / 6 / 0
Регистрация: 18.04.2012
Сообщений: 92
22.05.2012, 00:34  [ТС]     Функция разбиения матрицы на две #7
C++
1
Matrix M[0];
тут пишет ошибку что массив должен быть больше нуля.
C++
1
M[0].push_back(A[i][j]);
тут не дает доступ.
C++
1
    return (M);
не работает, выдает ошибку.
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
22.05.2012, 00:40     Функция разбиения матрицы на две #8
Ага... У вас ошибки в строках 6 и 13. В Си массивы номеруются с 0, потому там не M[1] и M[2], а M[0] и M[1]...
Киньте ваш класс Matrix, пожалуйста...
Цитата Сообщение от _Loader_ Посмотреть сообщение
не работает, выдает ошибку
Какую именно?
_Loader_
 Аватар для _Loader_
6 / 6 / 0
Регистрация: 18.04.2012
Сообщений: 92
22.05.2012, 00:46  [ТС]     Функция разбиения матрицы на две #9
Это полный код программы, больше я ни чего не подключал. Matrix находится в Vector.
Ошибок куча, попробуйте его скомпилировать если не затруднит.
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
22.05.2012, 00:59     Функция разбиения матрицы на две #10
Тогда можете кинуть полный код, со всеми исправлениями?
_Loader_
 Аватар для _Loader_
6 / 6 / 0
Регистрация: 18.04.2012
Сообщений: 92
22.05.2012, 01:03  [ТС]     Функция разбиения матрицы на две #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
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
#include "stdafx.h"
#include <iostream>
#include <vector>
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    cout<<"Input number of rows: "<<endl;
    int k;
    cin>>k;
    cout<<"Input number of cols: "<<endl;
    int m;
    cin>>m;
    typedef vector<vector<int> > Matrix;
 
    Matrix A(k);
    cout<<"Input matrix: "<<endl;
    int temp;
 
    // Заполнение исходной матрицы
    for (int i = 0; i < k; ++i)
        for (int j = 0; j < m; ++j)
        {
            cin>>temp;
            A[i].push_back(temp);
        }
 
        cout<<"Input number of rows of first matrix: "<<endl;
        int k1;
        cin>>k1;
        // Проверка допустимости числа строк
        if (k1 == k)
        {
            while (k1 == k)
            {
                cout<<"Wrong number of rows!"<<endl;
                cout<<"Input number of rows: "<<endl;
                cin>>k1;
            }
        }
 
        Matrix* Funk(int k, int m, Matrix A);
        {
            Matrix* M=new Matrix[2];
            
            // Заполнение первой матрицы    
            Matrix M[0];
            for (int i = 0; i < k1; ++i)
                for (int j = 0; j < m; ++j)
                {
                 M[0].push_back(A[i][j]);           }
                // Заполнение второй матрицы    
                int k2 = k - k1;    
                Matrix M[2];
                for (int i = k1, i1 = 0; i < k; ++i, ++i1)
                    for (int j = 0; j < m; ++j)
                    {
                    M[1][i1].push_back(A[i][j]);
                    }
                    return (M);
        }
                // Вывод исходной матрицы
                cout<<"Matrix A: "<<endl;
                for (int i = 0; i < k; ++i)   
                {
                    for (int j = 0; j < m; ++j)
                        cout<<A[i][j]<<" ";
                    cout<<endl;
                }
 
                // Вывод первой матрицы
                cout<<"Matrix A1: "<<endl;
                for (int i = 0; i < k1; ++i)   
                {
                    for (int j = 0; j < m; ++j)
                        cout<<M[0][i][j]<<" ";
                    cout<<endl;
                }
 
                // Вывод второй матрицы
                cout<<"Matrix A2: "<<endl;
                for (int i = 0; i < k2; ++i)   
                {
                    for (int j = 0; j < m; ++j)
                        cout<<M[1][i][j]<<" ";
                    cout<<endl;
                }
                system("PAUSE");
 
                return 0;
}
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
22.05.2012, 01:55     Функция разбиения матрицы на две #12
Кинь мне stdafx, что-то его у меня нет...
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4923 / 2666 / 243
Регистрация: 29.11.2010
Сообщений: 7,421
22.05.2012, 02:36     Функция разбиения матрицы на две #13
Цитата Сообщение от UFO94 Посмотреть сообщение
Кинь мне stdafx, что-то его у меня нет...
Ты уверен, что тебе так нужен этот предкомпилированный заголовок? Фактически, это просто перечень тех же инклюдов. Пока что не существует ни одной программы, которая не смогла бы обойтись без этого файла. Хочешь - можешь создать свой такой.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2012, 10:12     Функция разбиения матрицы на две
Еще ссылки по теме:

Даны две действительные квадратные матрицы порядка n. Получить новую матрицу: а) умножением элементов каждой строки первой матрицы на наибольш C++
C++ Написать программу разбиения строки на две части: до первого вхождения заданного символа и после него

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

Или воспользуйтесь поиском по форуму:
UFO94
 Аватар для UFO94
263 / 252 / 13
Регистрация: 04.04.2012
Сообщений: 546
22.05.2012, 10:12     Функция разбиения матрицы на две #14
Просто я не знаю, какие именно инклуды там. Если я пытаюсь подключить stdafx, то оно его не находит. Если не подключаю, то программа ругается дальше по тексту...
Yandex
Объявления
22.05.2012, 10:12     Функция разбиения матрицы на две
Ответ Создать тему
Опции темы

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