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

Метод Гаусса - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Площадь прямоугольной трапеции http://www.cyberforum.ru/cpp-beginners/thread659292.html
#include <iostream> #include <cmath> using namespace std; int main() { double a,b,alpha,S; cout << "Hello world!" << endl; cout << "Vvedite a,b,c (a,b - osnovaniya (a>b), c - ugol v radianah)"; cin >> a>>b >>alpha;
C++ Модули. Ассоциативный массив. (DLL, EXE) Добрый день, нужна помощь в следующем задании: написать программу. программа состоит из двух модулей (не понимаю, как они организовываются): модуль 1) DLL - функции для выполнения операций с ассоциативным (вроде это что-то связанное с парами, не понимаю ,как должно это быть) массивом. модуль 2) EXE - динамически загружает модуль 1) DLL и использует его функции для операций над ассоциативным... http://www.cyberforum.ru/cpp-beginners/thread659291.html
C++ Попадание точки в закрашенную область
Помогите решить пожалуйста, очень надо. Файл с заданием прикреплен ниже.Заранее спасибо. Для действительных х и у, определяющих координату точки A(x,y) в декартовых координатах, определить значение SPO.
C++ Изучение с++
Знаю основной синтаксис + ООП. Что посоветуете почитать актуального на сегодняшний день?
C++ Как увеличить элемент массива на единицу? http://www.cyberforum.ru/cpp-beginners/thread659286.html
Задача такова, программа выводит сообщение, нужно подсчитать количество этих сообщений, занисти в определенный элемент массива, как это сделать? Примерно так: const a: array of string=('петух','залушка'); var ko: array of integer; riteln ('Не ездок, а со шпорами, Не будильник, а всех будит.'); readln (s); while (s<>a) do
C++ Вычесление значений функциии на интервале Помогите с задачей. Вычислить и вывести в виде таблице значения ф-и f на интервале от x1(нач. значение) до x2 с шагом dx. Обязательной частью написания программы явл использование побитовых лог. операций f = { a - x / (10 + b), при x<0 и b != 0 { (x - a) / (x -c) при x>0 и b=0 { 3*x + 2/c в противном случае Написал эту программу, но работает некорректно, точнее при 2 и 3 - м... подробнее

Показать сообщение отдельно
С@talina
0 / 0 / 0
Регистрация: 27.09.2012
Сообщений: 5

Метод Гаусса - C++

27.09.2012, 19:56. Просмотров 1094. Ответов 3
Метки (Все метки)

Здравствуйте, у меня такая проблема. Мне нужно написать программу, которая решает СЛАУ методом Гаусса. Программа у меня работает,но когда программа скомпилировалась, она дает ввести только сколько уранений в системе и саму системы, и она показывает какая матрица будет, и все потом она ничего не делает. Я не знаю, что там надо дописать. Программа должна работать по прямому ходу (приведение расширенной матрицы до треугольного вида) и по обратному ходу (нахождение неизвестных). Помогите, пожалуйста.
Текст программы:
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
#include <stdio.h>
#include <conio.h>
#include <math.h>
#define N 50
 
void glavelem(int k, double mas[][N + 1], int n, int otv[]);
 
int main(void)
{
    double mas[N][N + 1];
    double x[N];                //корни системы
    int otv[N];                 //отвечает за порядок корней
    int i, j, k, n;
    //ввод данных
    //clrscr();
    do {
        printf("введите число уравнений сисемы: ");
        scanf("%d", &n);
        if (N < n)
            printf("слишком большое число уравнений, повторите ввод\n");
    }
    while (N < n);
    printf("введите систему:n");
    for (i = 0; i < n; i++)
        for (j = 0; j < n + 1; j++)
            scanf("%lf", &mas[i][j]);
    //вывод введенной системы
    //clrscr();
    printf("система:n");
    for (i = 0; i < n; i++) {
        for (j = 0; j < n + 1; j++)
            printf("%7.2f ", mas[i][j]);
        printf("n");
    }
    //сначало все корни по порядку
    for (i = 0; i < n + 1; i++)
        otv[i] = i;
    //прямой ход метода Гаусса
    for (k = 0; k < n; k++) {
        glavelem(k, mas, n, otv);
        if (fabs(mas[k][k]) < 0.0001) {
            printf("система не имеет единственного решения");
            return (0);
        }
        for (j = n; j >= k; j--)
            mas[k][j] /= mas[k][k];
        for (i = k + 1; i < n; i++)
            for (j = n; j >= k; j--)
                mas[i][j] -= mas[k][j] * mas[i][k];
    }
    //обратных ход
    for (i = 0; i < n; i++)
        x[i] = mas[i][n];
    for (i = n - 2; i >= 0; i--)
        for (j = i + 1; j < n; j++)
            x[i] -= x[j] * mas[i][j];
    //вывод результата
    printf("ГЋГІГўГҐГІ:n");
    for (i = 0; i < n; i++)
        for (j = 0; j < n; j++)
            if (i == otv[j]) {        //расставляем корни по порядку
                printf("%fn", x[j]);
                break;
            }
    return (0);
}
 
//----------------------------------------------
// описание функции
//----------------------------------------------
void glavelem(int k, double mas[][N + 1], int n, int otv[])
{
    int i, j, i_max = k, j_max = k;
    double temp;
    //ищем максимальный по модулю элемент
    for (i = k; i < n; i++)
        for (j = k; j < n; j++)
            if (fabs(mas[i_max][j_max]) < fabs(mas[i][j])) {
                i_max = i;
                j_max = j;
            }
    //переставляем строки
    for (j = k; j < n + 1; j++) {
        temp = mas[k][j];
        mas[k][j] = mas[i_max][j];
        mas[i_max][j] = temp;
    }
    //переставляем столбцы
    for (i = 0; i < n; i++) {
        temp = mas[i][k];
        mas[i][k] = mas[i][j_max];
        mas[i][j_max] = temp;
    }
    //учитываем изменение порядка корней
    i = otv[k];
    otv[k] = otv[j_max];
    otv[j_max] = i;
    getch();
}
Когда программа скомпилировалась, он дает ввести только сколько уранений в системе и саму системы, и он показывает какая матрица будет, и все потом он ничего не делает
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 21:31. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru