Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.10.2016, 16:38   #1
Meror
 
Регистрация: 02.10.2016
Сообщений: 6
По умолчанию Решение СЛАУ методом Крамера (C++)

Вот начал писать программу для решения СЛАУ методом Крамера (она должна решать до 4-х систем за раз).

Код:
#include<iostream>
#include<conio.h>
#include<stdlib.h>
using namespace std;
 
 
 
int main()
{
system("cls");
    float *A, *X;
    int k, i, j, n;
    cout << "Vvedite kolichestvo sistem uravneniy" << endl;
    cin >> n;
 
    A = new float[n * 3 * 4];
    X = new float[n*4];
    for (k = 0; k < n; k++)
    {
        cout << "Vedite koeffitsienti i svobodnie chleni sistemi nomer " << k + 1 << endl;
        for (i = 0; i < 3; i++)
            for (j = 0; j < 4; j++)
            {
            
            
                if (j != (3))
                {
                    cout << "\nVvedite x[" << i + 1 << "] [" << j + 1 << "] ";
                }
                else
                {
                    cout << "\nVvedite svobodniy chlen ";
                }
                cin >> *(A + k * 3 + i * 4 + j);
            }
        
    
    
        *(X + k * 4 + 0) = *(A + k * 3 + 0 * 4 + 0) * *(A + k * 3 + 1 * 4 + 1) * *(A + k * 3 + 2 * 4 + 2) + *(A + k * 3 + 0 * 4 + 1) * *(A + k * 3 + 1 * 4 + 2) * *(A + k * 3 + 2 * 4 + 0) + *(A + k * 3 + 0 * 4 + 2) * *(A + k * 3 + 1 * 4 + 0) * *(A + k * 3 + 2 * 4 + 1) - *(A + k * 3 + 0 * 4 + 0) * *(A + k * 3 + 1 * 4 + 2) * *(A + k * 2 + 2 * 4 + 1) - *(A + k * 3 + 0 * 4 + 1) * *(A + k * 3 + 1 * 4 + 0) * *(A + k * 3 + 2 * 4 + 2) - *(A + k * 3 + 0 * 4 + 2) * *(A + k * 3 + 1 * 4 + 1) * *(A + k * 3 + 2 * 4 + 0);
 
        *(X + k * 4 + 1) = *(A + k * 3 + 0 * 4 + 3) * *(A + k * 3 + 1 * 4 + 1) * *(A + k * 3 + 2 * 4 + 2) + *(A + k * 3 + 0 * 4 + 1) * *(A + k * 3 + 1 * 4 + 2) * *(A + k * 3 + 2 * 4 + 3) + *(A + k * 3 + 0 * 4 + 2) * *(A + k * 3 + 1 * 4 + 3) * *(A + k * 3 + 2 * 4 + 1) - *(A + k * 3 + 0 * 4 + 3) * *(A + k * 3 + 1 * 4 + 2) * *(A + k * 2 + 2 * 4 + 1) - *(A + k * 3 + 0 * 4 + 1) * *(A + k * 3 + 1 * 4 + 3) * *(A + k * 3 + 2 * 4 + 2) - *(A + k * 3 + 0 * 4 + 2) * *(A + k * 3 + 1 * 4 + 1) * *(A + k * 3 + 2 * 4 + 3);
 
        *(X + k * 4 + 2) = *(A + k * 3 + 0 * 4 + 0) * *(A + k * 3 + 1 * 4 + 3) * *(A + k * 3 + 2 * 4 + 2) + *(A + k * 3 + 0 * 4 + 3) * *(A + k * 3 + 1 * 4 + 2) * *(A + k * 3 + 2 * 4 + 0) + *(A + k * 3 + 0 * 4 + 2) * *(A + k * 3 + 1 * 4 + 0) * *(A + k * 3 + 2 * 4 + 3) - *(A + k * 3 + 0 * 4 + 0) * *(A + k * 3 + 1 * 4 + 2) * *(A + k * 2 + 2 * 4 + 3) - *(A + k * 3 + 0 * 4 + 3) * *(A + k * 3 + 1 * 4 + 0) * *(A + k * 3 + 2 * 4 + 2) - *(A + k * 3 + 0 * 4 + 2) * *(A + k * 3 + 1 * 4 + 3) * *(A + k * 3 + 2 * 4 + 0);
 
        *(X + k * 4 + 3) = *(A + k * 3 + 0 * 4 + 0) * *(A + k * 3 + 1 * 4 + 1) * *(A + k * 3 + 2 * 4 + 3) + *(A + k * 3 + 0 * 4 + 1) * *(A + k * 3 + 1 * 4 + 3) * *(A + k * 3 + 2 * 4 + 0) + *(A + k * 3 + 0 * 4 + 3) * *(A + k * 3 + 1 * 4 + 0) * *(A + k * 3 + 2 * 4 + 1) - *(A + k * 3 + 0 * 4 + 0) * *(A + k * 3 + 1 * 4 + 3) * *(A + k * 2 + 2 * 4 + 1) - *(A + k * 3 + 0 * 4 + 1) * *(A + k * 3 + 1 * 4 + 0) * *(A + k * 3 + 2 * 4 + 3) - *(A + k * 3 + 0 * 4 + 3) * *(A + k * 3 + 1 * 4 + 1) * *(A + k * 3 + 2 * 4 + 0);
 
}
 
        for (k = 0; k < n; k++)
        {
            cout<<"\nSistema "<<k+1<<endl;
            for (j = 0; j <4;j++)
                cout << *(X + k * 4 + j) << "   ";
            cout << endl;
        }  
 
 
    delete A;
    delete X;
    getch();
    return 0;
}
Но при вводе больше одной системы определители считаются правильно только для первой.Пожалуйста, помогите понять в чём причина!
Meror вне форума Ответить с цитированием
Старый 02.10.2016, 22:01   #2
GreenWizard
мальчик-помогай =)
Форумчанин
 
Регистрация: 16.09.2010
Сообщений: 522
По умолчанию

ну ок, форматирование кода ты типа освоил, а теперь используй массивы и дай норм имена переменным, чтоб у людей в глазах не темнело от твоего кода))) это прекрасно, если код понятен тебе, но ни один нормальный программист не станет вникать в простыню всяких +*.... а там, может быть, и сам заметишь где-то опечатку)
GreenWizard вне форума Ответить с цитированием
Старый 03.10.2016, 12:34   #3
Meror
 
Регистрация: 02.10.2016
Сообщений: 6
По умолчанию

Понял,только что значит :"используй массивы"?
Это типа *(A + k * 3 + i * 4 + j) заменить на A[k][i][j]?
Meror вне форума Ответить с цитированием
Старый 03.10.2016, 13:18   #4
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Попробуй это решение:

http://function-x.ru/cpp_metod_kramera.html

правда там для системы 3-х переменных сделано. Но тебе, я надеюсь, не составит труда её немного поправить: поправить расчет определителей, добавить ещё одно уравнение....
ura_111 вне форума Ответить с цитированием
Старый 03.10.2016, 13:35   #5
Meror
 
Регистрация: 02.10.2016
Сообщений: 6
По умолчанию

Дело не в этом,мне нужно рассчитать именно несколько систем за раз
Meror вне форума Ответить с цитированием
Старый 03.10.2016, 13:42   #6
Meror
 
Регистрация: 02.10.2016
Сообщений: 6
По умолчанию

Но всё-равно спасибо,может получится переделать и так)
Meror вне форума Ответить с цитированием
Старый 03.10.2016, 15:16   #7
ura_111
Участник клуба
 
Регистрация: 14.05.2016
Сообщений: 1,793
По умолчанию

Я не понимаю, что значит "несколько систем за раз". Как можно рассчитать несколько систем за раз? Всё объединить в одну МЕГО-систему уравнений, или как?

p.s.1: уточни у преподавателя задание. Возможно имелось ввиду: чтобы программа могла считать системы до 4-х уравнений (можно и систему 3-х, и 2-х уравнений подсчитать). Но не одновременно!

p.s.2: когда я слышу: "несколько систем за раз", я представляю себе "параллельное программирование" - это когда одновременно запускаются несколько "потоков" и каждый "поток" решает свою систему уравнений... Вот посмотри пример; когда-то писал (в самый низ смотри 1 страницы, Решение №2 - по тексту поймёшь что это такое):

http://www.programmersforum.ru/showthread.php?t=294386

Обрати внимание на ключевую строчку:

Код:
#include <thread>
thread по-английски "поток". В предоставленной программе (смотри что вывело в консоль) создаются два "потока", и независимо друг от друга что-то рассчитывают... Также выводятся их id (идентификаторы)...

Но ты ведь не знаешь что такое матрицы, а значит врятли тебе б задали бы такое...

Последний раз редактировалось ura_111; 03.10.2016 в 15:27.
ura_111 вне форума Ответить с цитированием
Старый 03.10.2016, 15:55   #8
Meror
 
Регистрация: 02.10.2016
Сообщений: 6
По умолчанию

Вот как дословно выглядит задание

Вид данных : система уравнений с тремя неизвестными (задаются коэффициенты).
Операции : ввод, хранение уравнений в памяти (до 4 систем), вычисление неизвестных.

Да и с чего вы взяли,что не знаю,что такое матрицы?

Последний раз редактировалось Meror; 03.10.2016 в 15:58.
Meror вне форума Ответить с цитированием
Старый 03.10.2016, 15:59   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,833
По умолчанию

Тогда у вас подход неправильный. Заведите класс SLAU. В нем реализуйте метод для нахождения неизвестных. В мейне заведите массив SLAU из 4 элементов. Никто у вас не просит одновременного решения и т.д.
p51x вне форума Ответить с цитированием
Старый 03.10.2016, 16:13   #10
Meror
 
Регистрация: 02.10.2016
Сообщений: 6
По умолчанию

А почему только из четырёх?
и что в него будет записываться?

Последний раз редактировалось Meror; 03.10.2016 в 16:18.
Meror вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
срочно написать программу в паскале. Решение уравнений методом Крамера 201kir Паскаль, Turbo Pascal, PascalABC.NET 0 21.04.2016 16:34
Решение СЛАУ методом Гаусса Stacy McKritsky Помощь студентам 1 08.06.2015 19:24
программа на си шарп: калькулятор СЛАУ методом Крамера макс34455 Помощь студентам 0 28.02.2015 16:29
Решение СЛАУ методом Крамера (Delphi) Denis0993 Помощь студентам 1 02.06.2013 14:01
Решение СЛАУ методом Гаусса и методом Крамера. R1k1 Помощь студентам 0 24.03.2012 19:17