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

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

21.05.2012, 21:57. Просмотров 919. Ответов 13
Метки нет (Все метки)

Доброго времени суток уважаемые форумчане. Столкнулся с проблемой. Необходимо написать функцию разбиения матрицы на две матрицы, в качестве входных параметров должна быть матрица, а в качестве выходных две матрицы.
Сделал программу, но преподаватель забраковал. В общем надо сделать с помощью функции.
Вот что у меня получилось:
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;
}

http://www.cyberforum.ru/cpp-beginners/thread58502.html
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2012, 21:57
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Функция разбиения матрицы на две (C++):

Функция разбиения строки в части [C++]
Всем доброго времени суток. Нужно написать условие, который разделит (через...

Функция разбиения строки на отдельные слова
Подскажите, плиз, как написать функцию разбиения строки на отдельные слова....

Написать программу разбиения строки на две части: до первого вхождения заданного символа и после него
8.5.1. Помогите, пожалуйста, решить задачу в С++. Написать программу...

Написать функцию разбиения строки s пополам на две строки s1 и s2
Написать функцию разбиения строки s пополам на две строки s1 и s2 Сделал в...

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

13
UFO94
264 / 253 / 23
Регистрация: 04.04.2012
Сообщений: 546
21.05.2012, 23:26 #2
Вы уж тогда напишите, как именно вам нужно разбивать матрицу... Т.е., матрица у вас должна разбиться на произведение двух? Как именно? Это ведь я могу написать A=A*E, где E -- единичная...
0
_Loader_
6 / 6 / 1
Регистрация: 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
0
UFO94
264 / 253 / 23
Регистрация: 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.
0
_Loader_
6 / 6 / 1
Регистрация: 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]);
                    }
        }
Вот так надо сделать как я понял? это по второму способу.
0
UFO94
264 / 253 / 23
Регистрация: 04.04.2012
Сообщений: 546
22.05.2012, 00:24 #6
Только тип функции не double, а Matrix*, и в конце функции дописать return M.
И в основной программе к ним, соответственно, тоже обращаться как к M[0] и M[1].
0
_Loader_
6 / 6 / 1
Регистрация: 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);
не работает, выдает ошибку.
0
UFO94
264 / 253 / 23
Регистрация: 04.04.2012
Сообщений: 546
22.05.2012, 00:40 #8
Ага... У вас ошибки в строках 6 и 13. В Си массивы номеруются с 0, потому там не M[1] и M[2], а M[0] и M[1]...
Киньте ваш класс Matrix, пожалуйста...
Цитата Сообщение от _Loader_ Посмотреть сообщение
не работает, выдает ошибку
Какую именно?
0
_Loader_
6 / 6 / 1
Регистрация: 18.04.2012
Сообщений: 92
22.05.2012, 00:46  [ТС] #9
Это полный код программы, больше я ни чего не подключал. Matrix находится в Vector.
Ошибок куча, попробуйте его скомпилировать если не затруднит.
0
UFO94
264 / 253 / 23
Регистрация: 04.04.2012
Сообщений: 546
22.05.2012, 00:59 #10
Тогда можете кинуть полный код, со всеми исправлениями?
0
_Loader_
6 / 6 / 1
Регистрация: 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;
}
0
UFO94
264 / 253 / 23
Регистрация: 04.04.2012
Сообщений: 546
22.05.2012, 01:55 #12
Кинь мне stdafx, что-то его у меня нет...
0
MrGluck
Модератор
Эксперт CЭксперт С++
8021 / 4864 / 1425
Регистрация: 29.11.2010
Сообщений: 13,240
22.05.2012, 02:36 #13
Цитата Сообщение от UFO94 Посмотреть сообщение
Кинь мне stdafx, что-то его у меня нет...
Ты уверен, что тебе так нужен этот предкомпилированный заголовок? Фактически, это просто перечень тех же инклюдов. Пока что не существует ни одной программы, которая не смогла бы обойтись без этого файла. Хочешь - можешь создать свой такой.
1
UFO94
264 / 253 / 23
Регистрация: 04.04.2012
Сообщений: 546
22.05.2012, 10:12 #14
Просто я не знаю, какие именно инклуды там. Если я пытаюсь подключить stdafx, то оно его не находит. Если не подключаю, то программа ругается дальше по тексту...
0
22.05.2012, 10:12
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2012, 10:12
Привет! Вот еще темы с решениями:

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

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

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

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


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

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

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