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

Решения СЛАУ методом Гаусса по шагу - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ почему не работает функция? http://www.cyberforum.ru/cpp-beginners/thread1088685.html
#include <iostream> #include <conio.h> void function (int k)// { for(int i=0;i<k;i++) std::cout<<"*"; } int main()
C++ DirectSound. Как правильно, и какую библиотеку следует добавить? Ребята, нужна ваша помощь. MVS 2010 выдаёт следующее 1>DXUTsound.obj : error LNK2019: unresolved external symbol __imp__mmioClose@8 referenced in function "public: long __thiscall CWaveFile::Open(char *,struct tWAVEFORMATEX *,unsigned long)" (?Open@CWaveFile@@QAEJPADPAUtWAVEFORMATEX@@K@Z) 1>DXUTsound.obj : error LNK2019: unresolved external symbol __imp__mmioOpenA@12 referenced in function... http://www.cyberforum.ru/cpp-beginners/thread1088683.html
C++ Составить программу для вычисления расстояния между точками пересечения окружностей
Две окружности на плоскости заданы координатами своих центров и радиусами. Составить программу для вычисления расстояния между точками пересечения окружностей. Если окружности соприкасаются в одной точке или не пересекаются, то выдать сообщения об этом.
В следующем слове после точки, первую строчную букву заменить на прописную C++
В строке, содержащей последовательность слов, найти конец предложения, обозначенный символом "точка". В следующем слове первую строчную букву заменить на прописную
C++ Растолкуйте код http://www.cyberforum.ru/cpp-beginners/thread1088660.html
Помогите с кодом cout << (i == 0 || j == 0 || i == N + 1 || j == M + 1 ? '#' : a) << (j <= M ? "" : "\n"); что делает cout << ( ? : ); я впервые с таким столкнулся.
C++ Содержимое массива Уважаемые подскажите пожалуйста, можно ли как-то посмотреть содержимое массива в MVS 2012, в режиме отладки, содержимое переменных можно посмотреть а массива никак не могу найти как ? подробнее

Показать сообщение отдельно
о_О_Кто_здесь
11 / 11 / 1
Регистрация: 06.06.2011
Сообщений: 152
29.03.2014, 17:40  [ТС]     Решения СЛАУ методом Гаусса по шагу
Добрый день! Вот вернулся к решению данного задания.

Методом проб, мануалов и примеров, сделал свой метод гаусса.

Тестирую на таком примере:
Решения СЛАУ методом Гаусса по шагу

подробней:
Пример 1.docx

Не совсем как по мануалу, жду советов и критики.

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
#include <iostream>
#include <ctime>
#include <fstream>
#include <iomanip>
#include <string>
 
using namespace std;
 
void GenerateMatrix(double **A, double *B, int& n, int& m) // генерируем рандомно
{
    srand(time(NULL));
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            A[i][j] = rand() % 10;
        }
        B[i] = rand() % 10;
    }
}
 
void InputMatrix(double **A, double *B, int& n, int& m) //вводим вручную
{
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            cout << "a[" << i << "][" << j << "]: ";
            cin >> A[i][j];
        }
        cout << "B[" << i << "]: ";
        cin >> B[i];
    }
}
 
void MatrixFromFile(double **A, double *B, int& n, int& m) // вводим из файла
{
    string name;
    cout << " Важно. Файл должен находится в папке с проектом." << endl;
    //  cout << " Введите название файла вместе с расширением, где записана матрица." << endl;
    //cout << " Имя файла: "; cin >> name; cout << endl;
    //std::ifstream in(name);
 
    std::ifstream in("base.txt");
    if (!in.is_open())
    {
        std::cout << " Файл " << name << " не был открыт для чтения. ";
        return;
    }
 
    for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            in >> A[i][j];
        }
        in >> B[i];
    }
}
 
void DisplayMatrix(double **A, double *B, int& n, int& m)
{
    cout << "\n" << endl;
    {
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
                //  cout << setw(4) << "A[" << i << "][" << j << "] = " << A[i][j]; cout << "    B[" << i << "] = " << B[i]; //вывод 1
                //cout << endl << endl;
 
                //упрощеный вывод
                cout << setw(9) << A[i][j]; cout << setw(9) << " = " << setw(9) << B[i]; // вывод 2
            cout << endl << endl;
        }
    }
}
 
void menu1(double **A, double*B, int& n, int& m)
{
    cout << " Выберите вариант заполнения матрицы :" << endl;
    cout << " 1. Случайным образом" << endl;
    cout << " 2. С клавиатуры" << endl;
    cout << " 3. Из файла" << endl;
    int answer;
    cout << "\n" << " Введите ваш выбор: "; cin >> answer; cout << endl;
    switch (answer)
    {
    case 1:
        GenerateMatrix(A, B, n, m);
        break;
    case 2:
        InputMatrix(A, B, n, m);
        break;
    case 3:
        MatrixFromFile(A, B, n, m);
        break;
    default:
    {
               cout << " Введено неправильное значение. Матрица будет сгенерирована автоматически" << endl;
               GenerateMatrix(A, B, n, m);
    }
    }
}
 
void Gauss(double **A, double*B, int& n, int &m)//прямой ход
{
    int f, jmax;
    double k, max, *p = NULL, l; //приводим к стандартному виду
 
    for (int i = 0; i < n; i++)
    {
        max = A[i][i];
        jmax = i;
        for (int j = i; j < n; j++)
        if ((A[j][i])>max)
        {
            max = A[j][i]; jmax = j;
        }
        p = A[i];
        A[i] = A[jmax];
        A[jmax] = p;
        l = B[i];
        B[i] = B[jmax];
        B[jmax] = l;
 
        for (f = i + 1; f < n; f++){
            k = A[f][i] / A[i][i];
            B[f] = B[f] - k*B[i];
            for (int j = i; j < n; j++)
                A[f][j] = A[f][j] - A[i][j] * k;
        }
    }
 
    cout << "****************************************************************" << endl;
    DisplayMatrix(A, B, n, m);
    cout << "****************************************************************" << endl;
    for (int i = 0; i < n; i++)
    if (A[i][i] == 0)
    {
        cout << "Система не имеет решения. " << endl;
        cout << " Нажмите любую клавишу для выхода... ";
        exit(1);
    }
 
    double s = 0, *x = new double[n];//находим x
    for (int i = 0; i<n; i++) x[i] = 0;
    for (int i = n - 1; i >= 0; i--)
    {
        s = B[i];
        for (int j = n - 1; j>i; j--) s -= x[j] * A[i][j];
        x[i] = s / A[i][i];
    }
 
    for (int i = 0; i < n; i++) cout << " x " << i + 1 << " = " << x[i] << " ";
    cout << endl << endl;
 
    for (int i = 0; i < n; i++)
        delete[]A[i];
    delete[]A;
    delete[]B;
    delete[]x;
 
}
 
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int n, m;
    cout << "****************************************************************" << endl;
    cout << "\n" << " Введите размерность матрицы NxM " << endl;
    cout << " n= "; cin >> n; cout << " m= "; cin >> m; cout << endl;
    double **A = new double *[n], *B = new double[n]; //инициализация динамических массивов
    for (int i = 0; i < n; i++)
        A[i] = new double[m];
    cout << "****************************************************************" << endl;
    menu1(A, B, n, m);
    cout << "****************************************************************" << endl;
    DisplayMatrix(A, B, n, m);
    cout << "****************************************************************" << endl;
    Gauss(A, B, n, m);
    system("pause");
    return 0;
}
загрузка матрицы из файла: base.txt


Вопрос остался тем же.
Я не совсем понимаю, как мне сделать более подробный вывод на экран каждых действий.
Если вставляю функцию вывода, то выводится много действий и не все помещаются на экране.

А ГЛАВНЕЙШИЙ ВОПРОС!


Как мне сделать все по шагам???
Объясняю:
1) Пользователь выбирает свое действие. Матрица заполняется и выводится.
2) Далее пользователю говорится, нажмите кнопку ">" - вперед "<" - назад "e" - выход.
3) Нажал пользователь ">" произвелось действие над матрицей. (т.е. счетчик увеличился на единицу)
Т.е. строки поменялись, что то умножилось или поделилось. Не важно, 1 действие и показывается на экран, что произошло (предварительно подсвечиваем элемент, который изменился, чтобы пользователь понял это).
4) Соответственно все то же самое что и в 3 шаге, только наоборот (счетчик минус).


Я думаю, подсветить эти манипуляции так :
C++
1
2
3
4
5
6
7
8
9
#include <windows.h>
void SetHighlightedText()
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_GREEN | FOREGROUND_INTENSITY);
}
void SetNormalText()
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
}
среда программирования: VS2013
Очень нужна помощь!!!!!
Огромная спасибо всем, кто помогает.
И просто, хорошего настроения всем заглядывающим! ))))

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