Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
crazymadman18
0 / 0 / 2
Регистрация: 04.12.2016
Сообщений: 73
1

Считывание матрицы из текстового файла

16.09.2018, 14:00. Просмотров 917. Ответов 10
Метки нет (Все метки)

Для решения задачи, требуется считывать матрицу, состоящую из элементов типа double, из текстового файла, при этом также в процессе чтения узнать ее размерность.

Может у кого-нибудь есть похожая программа? Просто я находил только очень простые версии, где в основном известная размерность и элементы - целые
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2018, 14:00
Ответы с готовыми решениями:

Считывание двумерной матрицы из текстового файла
Здравствуйте. Есть задача: из входного текстового файла считать и вывести на экран вещественную...

Считывание матрицы вещественных чисел из текстового файла
#include <iostream> #include <fstream> using namespace std; int main () { ifstream...

Считывание из текстового файла
Нужно модифицировать программу. Чтобы пользователь вводил текст НЕ в диалоговом окне, а текст был...

Считывание текстового файла
Помогите, пожалуйста, разобраться. При считывании текстового файла, последние несколько символов...

Считывание текстового файла
Вот сам файл Я считываю символ в отдельное поле класса, потом 2 цифры после символа в отдельные 2...

10
zss
Модератор
Эксперт С++
8108 / 7242 / 4508
Регистрация: 18.12.2011
Сообщений: 19,154
Завершенные тесты: 1
16.09.2018, 17:02 2
А вот это смотрели:
Образцы (шаблоны) программ для типовых задач
Поменяйте только поток cin на поток из файла
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//
//---- ввод матрицы--------------------------------------
//
void Input( int ** M, size_t n, size_t m ) {
    std::ifstream fin("file.txt");
    if(fin)
    {
       for ( size_t i = 0; i < n; ++i ) {
          for ( size_t j = 0; j < m; ++j ) {
            //std::cout << "M[" << i << "][" << j << "] = ";
            fin >> M[i][j];
          }
       }
       fin.close();
    }
}
Доработайте самостоятельно программу на случай, когда n и m тоже записаны в файле.
0
Manowar
Отава Ё.
2004 / 553 / 182
Регистрация: 12.03.2016
Сообщений: 2,095
Завершенные тесты: 1
16.09.2018, 17:36 3
Цитата Сообщение от zss Посмотреть сообщение
на случай, когда n и m тоже записаны в файле.
По ходу n и m не известно.
Цитата Сообщение от crazymadman18 Посмотреть сообщение
при этом также в процессе чтения узнать ее размерность.
0
crazymadman18
0 / 0 / 2
Регистрация: 04.12.2016
Сообщений: 73
16.09.2018, 17:45  [ТС] 4
zss, Отличная программа, но проблема, что не считывается больше 5-ти знаков после запятой. У меня задача численных методов, по этому тут нужна грандиозная точность. Я могу только предположить, что единственное, где знаки не потеряются, это переводить файл по строкам в программу и от туда уже считывать, хотя я, честно говоря, не понимаю, почему тут знаки теряются.
0
Миниатюры
Считывание матрицы из текстового файла  
16.09.2018, 17:45
crazymadman18
0 / 0 / 2
Регистрация: 04.12.2016
Сообщений: 73
16.09.2018, 17:48  [ТС] 5
Manowar, да, n и m не известны, если есть идеи на счет того, как с этим условием сделать, буду очень благодарен
0
Yetty
1874 / 1340 / 957
Регистрация: 18.12.2017
Сообщений: 4,520
16.09.2018, 19:06 6
Цитата Сообщение от crazymadman18 Посмотреть сообщение
но проблема, что не считывается больше 5-ти знаков после запятой
всё там считывается. просто не распечатывается. если нужно на них смотреть применяйте
C++
1
cout <<setprecision(20)<<fixed<<M[i][j]<<endl;
аргумент setprecision выставляйте такой, как Вам нужно

Добавлено через 27 минут
потребуется подключить #include <iomanip>
1
crazymadman18
0 / 0 / 2
Регистрация: 04.12.2016
Сообщений: 73
16.09.2018, 19:26  [ТС] 7
zss, так почему же... Я сказал, что
Цитата Сообщение от crazymadman18 Посмотреть сообщение
я находил только очень простые версии, где в основном известная размерность и элементы - целые
Ну в вашем коде я, само собой, поменял int на double
0
Manowar
Отава Ё.
2004 / 553 / 182
Регистрация: 12.03.2016
Сообщений: 2,095
Завершенные тесты: 1
16.09.2018, 19:27 8
Лучший ответ Сообщение было отмечено crazymadman18 как решение

Решение

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
#include <iostream>
#include <vector>
#include <fstream>
#include <iomanip>
#include <string>
#include <sstream>
 
int main()
{
    std::size_t col = 0;
    std::string str;
 
    std::vector<std::vector<double>> v2;;
 
    std::ifstream ifs("in.txt");
 
    if (!ifs.is_open())
    {
        std::cerr << "No open file\n";
        return 1;
    }
 
    std::getline(ifs, str);
 
    std::istringstream ist(str);
 
    while (ist >> str)
        ++col;
 
    std::cout << " col = " << col << std::endl;
 
    ifs.close();
 
    std::vector<double> v(col);
 
    std::ifstream ifs1("in.txt");
 
    if (!ifs1.is_open())
    {
        std::cerr << "No open file\n";
        return 1;
    }
 
    while (true)
    {
        for (auto& val : v)
        {
            ifs1 >> val;
        }
        if (!ifs1)
        {
            break;
        }
        v2.push_back(v);
    }
 
    for (auto const& el2 : v2)
    {
        for (auto const& val : el2)
        {
            std::cout << std::setprecision(12) << val << "  ";
        }
        std::cout << std::endl;
    }
 
    ifs1.close();
    
    std::cout << " row = " << size(v2) << '\n';
}
1
crazymadman18
0 / 0 / 2
Регистрация: 04.12.2016
Сообщений: 73
17.09.2018, 17:51  [ТС] 9
Manowar, Спасибо большое, я почти все понял в вашем коде, кроме циклов for, никода раньше не видел конструкцию for(auto& a : b)
C++
1
2
3
4
5
6
7
8
9
10
11
12
while (true)
    {
        for (auto& val : v)
        {
            ifs1 >> val;
        }
        if (!ifs1)
        {
            break;
        }
        v2.push_back(v);
    }
Можете, пожалуйста, объяснить или хотя бы скинуть, где про это можно прочитать?

Добавлено через 8 минут
И еще почему-то не получается организовать вывод в матрицу, а не просто вывод на экран
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
tMatrix MX = CreateMatrix(size(v2), col);
    int i = 0, j = 0;
    for (auto const& el2 : v2)
    {
        i++;
        for (auto const& val : el2)
        {
            j++;
            // cout << setprecision(12) << val << "  ";
             MX[i][j] = val;
 
 
        }
        cout << endl;
    }
Вот так не работает
0
Manowar
Отава Ё.
2004 / 553 / 182
Регистрация: 12.03.2016
Сообщений: 2,095
Завершенные тесты: 1
17.09.2018, 18:04 10
Далеко ходить не надо
Новый цикл for в C++11
разберешься с этим, другой вопрос
Цитата Сообщение от crazymadman18 Посмотреть сообщение
Вот так не работает
сам собой отпадет.
0
crazymadman18
0 / 0 / 2
Регистрация: 04.12.2016
Сообщений: 73
25.09.2018, 16:16  [ТС] 11
Я всё-таки по-другому написал

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
double** MatrixInput(const char name[50], size_t& rows, size_t& columns)
{
    columns = 0;
    rows = 0;
    double val;
    string str;
 
    ifstream ifs(name);
 
    if (!ifs.is_open())
    {
        std::cerr << "Файл не открыт... ";
    };
 
    getline(ifs, str);
    istringstream inf(str);
 
    while (inf >> str)
        columns++;
 
    ifstream ifs1(name);
 
    while (true)
    {
        for (int i = 0; i < columns; i++)
        {
            ifs1 >> val;
        }
        if (!ifs1)
        {
            break;
        }
        rows++;
    }
 
double** A = new double*[rows];   
    for (int i = 0; i < rows; i++)
    {
        A[i] = new double[columns];  
    }
 
 
    ifstream ifs2(name);
 
    for (int i = 0; i < rows; i++)
    {
        for (int j = 0; j < columns; j++)
                ifs2 >> A[i][j];
    }
 
    columns;
    return(A);
}
0
25.09.2018, 16:16
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.09.2018, 16:16

Считывание из текстового файла
Получил заданий от преподавателя: &quot;Сделать программу, желательно на C++, которая позволит считывать...

Считывание из текстового файла
Всем привет. У меня есть текстовый файл в котором, к примеру записана информация:&quot;Фамилия Имя&quot;....

Считывание double из текстового файла
Ковырялся тут в коде и заметил интересную фишку. Считываем значения double из текстового файла. ...


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

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

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