Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
_Loader_
6 / 6 / 0
Регистрация: 18.04.2012
Сообщений: 92
#1

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

21.05.2012, 21:57. Просмотров 846. Ответов 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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2012, 21:57
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция разбиения матрицы на две (C++):

Функция: получить две матрицы и вернуть номер матрицы, среднее арифметическое элементов которой максимально - C++
нужна помощь в этой задаче!!! Написать функцию, получающую в качестве параметров два массива целого типа произвольного размера и...

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

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

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

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

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

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

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

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

Функция сравнивает две строки, игнорируя различия в регистрах - C++
Я студент 1 курса на зачёт сказали написать программку помогите!! не хочу вылететь из универа С++ Консоль 1. Функция сравнивает...

Функция, сравнивающая две строки, игнорируя количество пробелов между словами - C++
Разработать функцию, которая сравнивает две строки, игнорируя количество пробелов между словами (использовать функции работы со строками). ...


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

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

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