Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
#1

Стопариться программа - C++

19.07.2011, 11:23. Просмотров 345. Ответов 8
Метки нет (Все метки)

Задача - решить систему линейных уравнений. Мне дана матрица коэффициентов.
Дана она мне в необычном виде.
Исходная СЛУ
4x1 + 2x2 + 9x3 = 1
x2 + 6x3 = 7
4x1 + 2x3 = 0
коэффициенты исходной СЛУ
(1;4)(2;2)(3;9)
(2;1)(3;6)
(1;4)(3;2)
Каждая строка файла содержит информацию о ненулевых коэффициентах одного уравнения СЛУ.
Количество строк в файле соответствует количеству уравнений СЛУ.
Порядковый номер строки в файле соответствует номеру уравнения i.

Каждая строка файла состоит из групп чисел (j ; k(i;j))
• Первое число в группе – это значение номера j коэффициента k(i;j) при неизвестном x(j) в уравнении i
• Второе число в группе – это значение коэффициента k(i;j)

Количество таких групп в строке файла (т.е. количество ненулевых коэффициентов в уравнении) может быть любое – от 1 до n, где n – количество неизвестных в СЛУ.

Но это все го лишь пример. У меня же матрица 3638 порядка. Написал рабочий код(тестил его на матрицах 3 и 4 порядков). Запускаю его на выполнение (для матрицы 3638 порядка) - стопариться программа. Стопарится она, даже если порядок систему 300. Как исправить, чтобы программа полностью решала задачу(для порядка 3638 например, хотя надо и больше)
Не знаю что и делать. Программа прилагается.
0
Вложения
Тип файла: rar 3.rar (5.25 Мб, 10 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2011, 11:23
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Стопариться программа (C++):

Программа , которая выводит время, за которое программа работает - C++
Вообщем, нужно что бы считалось время от начала работы программы, и выводилось на экран.

Первая программа. Код не компилируется и не запускается программа. - C++
Первая программа, первая ошибка Здравствуйте! Решил учить С++. Скачал книгу Programming: Principles and Practice Using C++, Бьерн...

Программа не может быть запущена, т.к. на Вашем компьютере установлена программа-эмулятор - Игры
При запуске лицензионной детской игровой программы выскакивает сообщение: Программа не может быть запущена, т.к. на Вашем компьютере...

Программа подсчета числа неуспевающих и программа поиска владельца автомобиля... - Pascal
Помогите пожалуйста решить 2 задачи: Составьте программу подсчета числа неуспевающих по информатике школьников в классе, и выводящую...

Квин-программа, или программа, печатающая свой исходный текст - Visual Basic
Задаю этот вопрос под влиянием этой темы и предлагаю решение: Sub Kvin() Dim A(1 To 13) As String X = Chr$(65) + Chr$(40) ...

Программа с метками и оператором перехода GOTO. Программа с циклом полусловия - Pascal
Задача №9. Прошу вас, помогите. Не знаю как решать вообще.

8
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.07.2011, 11:49 #2
(34;22995,59)
вообще-то числа дожны быть через точку, а не запятую

Добавлено через 14 минут
вот этот кусок не имеет смысла
C++
1
2
3
4
5
6
7
for ( int i = 0; i < range; i++)
    {
            for ( int j = 0; j < range; j++)
            {
                matrix[i][j] = 0;           
            }
    }
достаточно объявить массив вот так
C++
1
double matrix[range][range] = { 0 };
считывать посимвольно из одного файла, убирать скобочки, записывать потом опять считывать тожене айс
1
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
19.07.2011, 11:51  [ТС] #3
Не имеет? Как раз наоборот. Это пока что матриц, полностью состоящая из нулей. Но, в последствии, она заполниться коэффициентами системы.
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.07.2011, 11:52 #4
при таком объявленни массива
C++
1
double matrix[range][range] = { 0 };
он уже заполнен нулями
1
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
19.07.2011, 11:54  [ТС] #5
Исправил предыдущую ошибку - заменил запятые на точки. Вот только теперь программа округляет
Вместо 22995,56 пишет 22995,6. Как заставить её забыть про округление?

И Вы сказали, что запись.считывание из файла "не айсово". А как по другому? Да и потом, даже если это и исправлю, то, мне кажется, программа будет по прежнему стопариться.
Вообще складывается такое ощущение, что просто очень большой массив чисел. Но ведь так не должно быть... Это ведь зависит лишь от ресурса памяти.
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.07.2011, 12:09 #6
а свободные члены СЛАУ откуда считываються?
1
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
19.07.2011, 12:15  [ТС] #7
Пока что неоткуда. Просто эта часть программы делает из данной матрицы коэффициентов нормальную ( квадратного вида). Пока что не писал код для решения системы.
Вылезает непонятная ошибка, которая прекращает работу программы. Не знаете, что с ней делать?
Вылезает окно, предлагающее "debug" или "close programm". Не пойму что делать. На маленьких системах все работает. А поставишь порядок - 400, так все перестает работать
0
Jupiter
Каратель
Эксперт С++
6561 / 3982 / 227
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.07.2011, 12:41 #8
как-то так, с 1.txt работает нормально
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
#include <algorithm>
#include <fstream>
#include <sstream>
#include <vector>
 
int main()
{
    // Удаление ненужных разделителей  "(", ")", ";"
    // Добавление последним элементом строки - "0"
    std::vector<std::string> vec;
    std::string tmp;
    std::ifstream fin1 ("1.txt");
    while (!fin1.eof())
    {
        std::getline(fin1, tmp, '\n');
        std::replace(tmp.begin(), tmp.end(), '(', ' ');
        std::replace(tmp.begin(), tmp.end(), ')', ' ');
        std::replace(tmp.begin(), tmp.end(), ';', ' ');
        vec.push_back(tmp);
    }
    fin1.close(); 
    
    // Построение нулевой матрицы
    const int range = 100;
    double matrix[range][range] = { 0 };
        
    for(int i = 0, size = vec.size(); i < size; ++i)
    {
        int tmp_index;
        std::stringstream ss(vec[i]);
        while(ss >> tmp_index)
        {
            double val;
            ss >> val;
            matrix[i][tmp_index] = val;
        }
    }
    std::ofstream ofs("2.txt");
    for (int i = 0; i < range; ++i)
    {
    for (int j = 0; j < range; ++j)
    {
        ofs << matrix[i][j] << " ";
               if (j == range - 1) 
                ofs << std::endl; 
    }
    }
}
Добавлено через 7 минут
с 4.txt и матрицой на 4000 элементов уже идет переполнение стека, для таких систем, тем более разреженых нужно использовать адаптивные методы, а вместо матрицы использовать связный список, чтоб не хранить ноли, но я пока еще на практике таких задач не решал
1
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
19.07.2011, 12:45  [ТС] #9
Просто передо мной стоит задача - решить систему, порядок матрицы которой - около 100 000
А пока что мне дали одну из самых маленьких матриц - порядок лишь 3500.
Спасибо за помощь!
0
19.07.2011, 12:45
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.07.2011, 12:45
Привет! Вот еще темы с ответами:

Программа циков с неизвестным число повторений и программа с внутренним ветвлением - Pascal
1.Дано натуральное число n. Получить наименьшее натуральное число вида m в степени 2, превосходящее n. 2.Дан числовой массив А, состоящий...

Программа для трёх маршрутов. Правильно ли написана программа? - PascalABC.NET
Всем здрасьте! Программа для трёх маршрутов. Кому не сложно подскажите правильно ли я написал?var a, b, c, d, e, f, g : boolean; s...

не пойму в чем дело, программа должна работать, но она черт побери не работает :( (программа по работе с реестром) - Delphi
Программа предназначена для поиска какого-нить слова по реестру и удаления ключа или раздела если в нем встречается искомое слово. С...

Что такое программа-сервер, программа-клиент - Базы данных
Учусь заочно и надо контрольную сделать вкратце я и сам объясню, но надо хотя бы листов на 10 Помогите плиз. Уже весь инет облазил....


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

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