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

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

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

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

19.07.2011, 11:23. Просмотров 336. Ответов 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 например, хотя надо и больше)
Не знаю что и делать. Программа прилагается.
Вложения
Тип файла: 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. Прошу вас, помогите. Не знаю как решать вообще.

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

И Вы сказали, что запись.считывание из файла "не айсово". А как по другому? Да и потом, даже если это и исправлю, то, мне кажется, программа будет по прежнему стопариться.
Вообще складывается такое ощущение, что просто очень большой массив чисел. Но ведь так не должно быть... Это ведь зависит лишь от ресурса памяти.
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
19.07.2011, 12:09 #6
а свободные члены СЛАУ откуда считываються?
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
19.07.2011, 12:15  [ТС] #7
Пока что неоткуда. Просто эта часть программы делает из данной матрицы коэффициентов нормальную ( квадратного вида). Пока что не писал код для решения системы.
Вылезает непонятная ошибка, которая прекращает работу программы. Не знаете, что с ней делать?
Вылезает окно, предлагающее "debug" или "close programm". Не пойму что делать. На маленьких системах все работает. А поставишь порядок - 400, так все перестает работать
Jupiter
Каратель
Эксперт С++
6553 / 3973 / 226
Регистрация: 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 элементов уже идет переполнение стека, для таких систем, тем более разреженых нужно использовать адаптивные методы, а вместо матрицы использовать связный список, чтоб не хранить ноли, но я пока еще на практике таких задач не решал
Stas0n
3 / 4 / 0
Регистрация: 13.07.2011
Сообщений: 313
19.07.2011, 12:45  [ТС] #9
Просто передо мной стоит задача - решить систему, порядок матрицы которой - около 100 000
А пока что мне дали одну из самых маленьких матриц - порядок лишь 3500.
Спасибо за помощь!
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 Помогите плиз. Уже весь инет облазил....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
19.07.2011, 12:45
Ответ Создать тему
Опции темы

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