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

Нужен пример нахождения определителя матрицы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Структура http://www.cyberforum.ru/cpp-beginners/thread96249.html
Описать структуру с именем TRAIN, содержащую следующие поля: Название пункта; номер поезда; Время отправления; Программа должна: Ввод с клавиатуры данных в масив состоящий из восьми элементов типа TRAIN;записи должны быть размещены в алфавитном порятке по названиям пунктов назначения; вывод на экран информации о поездах, отправляющихся после введённого с клавиатуры времини;
C++ соединить эл-ты массива Люди, подскажите, пожалуйста!!! Короче есть массив char arr1="1 2 3"; (3 элемента) Нужно соединить эти элементы 1,2 и 3 в одно число, чтобы получилось 123 а потом перевести в двоичную систему. В двоичную систему легко, но вот как соединить элементы??? http://www.cyberforum.ru/cpp-beginners/thread96230.html
Циклы C++
если честно, даже сам не знаю что нужно сделать с этой формулой. У читель тал текст, сказал написать на С++ с использованием циклов) больше ничего...подскажите что нужно сделать?)
перевести элементарные программы с delphi на С++ C++
Здравствуйте, я провожу анализ языков программирования по времени исполнения программ, но не владею С++, программы есть на delphi и все очень простые в несколько строчек, просьба перевести их на С++ список программ 1) Задача на длинную арифметику, подсчет факториала числа N=100; 2) Ханойские башни N =16; 3)Кол-во способов разбиения числа N на различные комбинации слагаемых (в целых числах)...
C++ Строки http://www.cyberforum.ru/cpp-beginners/thread96223.html
Помогите пожалуйста, создать программку, вот задача: "Превратить строку так, чтобы все цифры в ней были отсортированы по убыванию". Заранее огромное спасибо за помощь
C++ Вывести количество чисел в наборе Дан набор ненулевых целых чисел; признак его завершения - число 0. Вывести количество чисел в наборе. Задача на С подробнее

Показать сообщение отдельно
sandye51
программист С++
682 / 584 / 39
Регистрация: 19.12.2010
Сообщений: 2,016
29.11.2011, 13:45
Рекурсивно, раскладывая по первому столбцу
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
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
#include <iostream>
#include <vector>
#include <cstdlib>
#include <ctime>
#include <string>
#include <fstream>
#include <iterator>
#include <cmath>
#include <algorithm>
#include <conio.h>
#include <functional>
 
template <typename iteratorType, typename predType>
bool all_of (iteratorType iterBegin, iteratorType iterEnd, predType* pred)
{
        for ( ; iterBegin != iterEnd; ++iterBegin)
                if (!pred(*iterBegin))
                        return false;
        return true;
}
 
template <typename valueType>
class printing_matrix :
        public std::unary_function<std::vector<valueType>, void >
{
public:
        void operator() (const std::vector<valueType>& vec) const
        {
                std::copy(vec.begin(), vec.end(), std::ostream_iterator<valueType>(std::cout, " "));
                std::cout << std::endl;
        }
};
 
template <typename valueType>
void printMatrix(const std::vector<std::vector<valueType> >& matrix)
{
        std::for_each(matrix.begin(), matrix.end(), printing_matrix<valueType>());
}
 
template <typename valueType>
bool zero(const std::vector<valueType>& value)
{
        return !value.front();
}
 
template <typename valueType>
class comparer :
        public std::binary_function<std::vector<valueType>, std::vector<valueType>, bool>
{
        mutable int& compair;
public:
        comparer(int& value) :
          compair(value)
          {
          }
          bool operator() (const std::vector<valueType>& first, const std::vector<valueType>& second) const
          {
                  if (first.front() < second.front())
                          ++compair;
                  return first.front() > second.front();
          }
};
 
template <typename valueType>
class calc :
        public std::unary_function<std::vector<valueType>, void>
{
        mutable std::vector<std::vector<valueType> >& new_matrix;
        const std::vector<std::vector<valueType> > matrix;
 
        template <typename value_type>
        class privater :
                public std::unary_function<value_type, value_type>
        {
                mutable typename std::vector<value_type>::const_iterator first;
                const value_type k;
        public:
                privater(value_type k, const typename std::vector<value_type>::const_iterator& first) :
                  k(k), first(first)
                  {
                  }
                  value_type operator() (value_type value) const
                  {
                          return value -= k * (*first++);
                  }
        };
 
public:
        calc(std::vector<std::vector<valueType> >& new_matrix, const std::vector<std::vector<valueType> >& matrix) :
          new_matrix(new_matrix), matrix(matrix)
          {
          }
          void operator() (std::vector<valueType>& i) const
          {
                  std::transform(i.begin(), i.end(), i.begin(), privater<valueType>(i.front() / matrix.front().front(), matrix.begin()->begin()));
 
                  new_matrix.push_back(std::vector<double>(++i.begin(), i.end()));
          }
};
 
double determinant(std::vector<std::vector<double> > matrix)
{
        if (matrix.size() == 1)
                return matrix.front().front();
 
        if (all_of(matrix.begin(), matrix.end(), &zero<double>))
                return 0;
 
        int compair = 0;
        std::sort(matrix.begin(), matrix.end(), comparer<double>(compair));
 
        std::vector<std::vector<double> > new_matrix;
        std::for_each(++matrix.begin(), matrix.end(), calc<double>(new_matrix, matrix));
 
        return matrix.front().front() * determinant(new_matrix) * pow(-1.0, compair);
}
 
template <typename streamType>
class streamer :
        public std::unary_function<void, double>
{
        streamType& _file;
public:
        streamer(streamType& file) :
          _file(file)
          {
          }
 
          double operator() ()
          {
                  double tmp;
                  _file >> tmp;
                  return tmp;
          }
};
 
template <typename streamType, typename valueType>
class rander :
        public std::unary_function<std::vector<valueType>, void>
{
        mutable streamType& file;
        const unsigned int size;
public:
        rander(streamType& file, unsigned int size) :
          file(file), size(size)
          {
          }
          void operator() (std::vector<valueType>& vec) const
          {
                  std::generate_n(std::back_inserter(vec), size, streamer<streamType>(file));
          }
};
 
int main()
{
        srand(static_cast<unsigned int>(time(NULL)));
        setlocale(LC_ALL, "Russian");
 
        unsigned char key;
        do
        {
                std::cout << "Выберите тип формирования матрицы" << std::endl
                        << "\t1. Считать матрицы из файла" << std::endl
                        << "\t2. Ввод с клавиатуры" << std::endl
                        << "\t3. Выход из программы" << std::endl;
                key = _getch();
        } while (key < '1' || key > '3');
 
        std::vector<std::vector<double> > matrix;
 
        switch (key)
        {
        case '1':
                {
                        std::string fileName;
                        std::cout << "Введите имя файла" << std::endl;
                        std::cin >> fileName;
                        std::ifstream file(fileName.c_str());
 
                        std::vector<double>::size_type size;
                        file >> size;
                        matrix.resize(size);
                        std::for_each(matrix.begin(), matrix.end(), rander<std::ifstream, double>(file, size));
                }
                break;
        case '2':
                {
                        std::cout << "Введите размер матрицы" << std::endl;
                        std::vector<double>::size_type size;
                        std::cin >> size;
                        matrix.resize(size);
                        std::cout << "Введите матрицу" << std::endl;
                        std::for_each(matrix.begin(), matrix.end(), rander<std::istream, double>(std::cin, size));
                }
                break;
        case '3':
                return EXIT_SUCCESS;
        default:
                return EXIT_FAILURE;
        }
 
        std::cout << "Введенная матрица" << std::endl;
        printMatrix<double>(matrix);
 
        std::cout << "Определитель: \t" << determinant(matrix) << std::endl;
 
        _getch();
        return EXIT_SUCCESS;
}
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru