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

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

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

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

21.05.2012, 21:57. Просмотров 781. Ответов 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;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.05.2012, 21:57     Функция разбиения матрицы на две
Посмотрите здесь:

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

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

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

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

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

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

Две матрицы - C++
У меня есть два кода. Нужно код второй матрицы вставить в первый в указаное место (строка 127). Несколько дней уже его мучаю... У меня не...

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

Функция разбивает строку на две части: до первого вхождения заданного символа и после него - C++
Программу написал но не очень понятно как без цстринг (а это в условии, что нельзя пользоваться cstring). В самоучителе про цстринг...

Перемножить две матрицы - C++
Сформировать два одномерных массива целочисленных из 10 элементов каждый, а потом сформировать матрицу MxN элементами которого являются...

Как сложить две матрицы ? - C++
Есть такой код #include &lt;iostream&gt; #include &lt;ctime&gt; #include &lt;cstdlib&gt; #include &lt;iomanip&gt; using namespace std; int main() { ...

Поменять местами две строки матрицы - C++
1 6 7 2 5 8 3 4 9. Язык программирования Си.

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


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

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

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