Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.61/18: Рейтинг темы: голосов - 18, средняя оценка - 4.61
13 / 13 / 1
Регистрация: 06.06.2011
Сообщений: 157

Чтение из файла в Матрицу

05.04.2014, 20:59. Показов 4372. Ответов 45
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый Ночи! Всем классного настроения!

Ищу совета от более опытных пользователей.

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

Матрица готова, посчиталась и сохранилась в файл. Теперь нужно взять загрузить из файла на экран по очереди каждую строчку, и при желании крутить туда сюда.

Кликните здесь для просмотра всего текста
3 2 -5 -1 2 -1 3 13 1 2 -1 9
1 2 -1 9 2 -1 3 13 3 2 -5 -1
1 2 -1 9 2 -1 3 -5 3 2 -5 -1
1 2 -1 9 0 -1 3 -5 3 2 -5 -1
1 2 -1 9 0 -5 3 -5 3 2 -5 -1
1 2 -1 9 0 -5 5 -5 3 2 -5 -1
1 2 -1 9 0 -5 5 -5 3 2 -5 -1
1 2 -1 9 0 -5 5 -5 3 2 -5 -28
1 2 -1 9 0 -5 5 -5 0 2 -5 -28
1 2 -1 9 0 -5 5 -5 0 -4 -5 -28
1 2 -1 9 0 -5 5 -5 0 -4 -2 -28
1 2 -1 9 0 -5 5 -5 0 -4 -2 -28
1 2 -1 9 0 -5 5 -5 0 -4 -2 -24
1 2 -1 9 0 -5 5 -5 0 0 -2 -24
1 2 -1 9 0 -5 5 -5 0 0 -6 -24

Конечно, сохранение можно как угодно подправить.

т.е. пример матрицы имеет вид:
3x+2y-5z=-1
2x-y+3z=13
x+2y-z=9

Я читаю к примеру так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    std::ifstream in("out.txt"); 
    if (!in.is_open())
    {
        std::cout << " Файл " << "out.txt" << " не был открыт для чтения. ";
        return;
    }
    double **A2 = new double *[n], *B2 = new double[n]; //инициализация динамических массивов
    for (int i = 0; i < n; i++)
    A2[i] = new double[m];
        for (int i = 0; i < n; i++)
    {
        for (int j = 0; j < m; j++)
        {
            in >> A[i][j]; // матрица А
 
        }
        in >> B[i];  // матрица B
 
    }
    in.close();
Если я прочитаю 2 раза:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
 
                in >> A2[i][j];
            }
            in >> B2[i];
 
        }
        DisplayMatrix(A2, B2, n, m);
 
        for (int i = 0; i < n; i++)
        {
            for (int j = 0; j < m; j++)
            {
 
                in >> A2[i][j];
            }
            in >> B2[i];
 
        }
        DisplayMatrix(A2, B2, n, m);
Соответственно, он читает 1 строку, а потом и вторую. Но таких строк более 10, и как мне их потом обратно крутить?
Никак не могу придумать решение.




Буду Очень благодарен за совет.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.04.2014, 20:59
Ответы с готовыми решениями:

Изменить данную программу организовав чтение исходных данных из текстового файла изменить размерность массива на квадратную матрицу 5х5
Изменить данную программу организовав чтение исходных данных из текстового файла изменить размерность массива на квадратную матрицу 5х5.(В...

Как заменить чтение строки из консоли на чтение текстового файла?
основное задание: найти частоту суффикса (например, &quot;ing&quot;) в текстовом документе. в прикреплённом коде текст вводится прямо в консоль,...

Чтение чисел из файла. Чтение после конца потока невозможно
Товарищи, помогите. В Pascal'e я не силен, так что не бейте меня ногами, но есть задача: написать обычную программу для расчета некоторых...

45
13 / 13 / 1
Регистрация: 06.06.2011
Сообщений: 157
06.04.2014, 20:59  [ТС]
Студворк — интернет-сервис помощи студентам
alsav22, Четно говоря, не задавался вопросом, делаю по примеру курсовую работу.

Думаю, можно и пропустить 3 шаг, прыгнуть сразу на 4.

По словам препода, нужно крутить программу, вперед назад, с любого момента. (соответственно кроме начала, где еще некуда возвращаться и конца, где некуда уже идти вперед). Типо пользователь будет смотреть что и где изменилось в данных, понимая что происходит и как вообще решается задача.
Я это же буду показывать и защищать перед комиссией. (ужас какой на первом курсе). Если подумать об этом, то повтор шага, будет плюсом мне - Демонстрировать программу, т.е. в строка N изменилась в шаге два, если вдруг упустили что-то, вернулись еще раз показали.... Уже сам запутался во всем этом.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
06.04.2014, 23:30
Чтобы в файле свободно перемещаться по данным, эти данные, в виде структур, нужно записать в бинарном виде. Тогда с передвижением проблем не будет. Вот пример реализации:
Кликните здесь для просмотра всего текста
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
100
#include <iostream>
#include <fstream>
using namespace std;
 
const int N = 5;
 
struct data
{
    int arr[N];
};
 
void show(data d) // вывод структуры
{
    for (int i = 0; i < N; ++i)
        cout << d.arr[i];
    cout << endl;
}
 
void read(ifstream& fin) // чтение и вывод структуры из файла
{
    data temp;
    if (fin.read((char*)&temp, sizeof(temp)))
    {
        show(temp);
    }
    else
    {
        cout << "The end of the file!" << endl;
        return;
    }
}
 
void step(ifstream& fin, char ch) // передвижение по структурам в файле
{
    if (ch == '1') // чтение и вывод очередной структуры
    {
        read(fin); 
    }
    else if (ch == '2') // чтение и вывод предыдущей структуры
    {
        int offset;
        if (fin.eof()) // если курсор в конце файла
        {
            offset = sizeof(data); // то размер смещения равен структуре (на последнюю в файле)
            fin.clear();
        }
        else
            offset = sizeof(data) * 2; // если курсор не в конце файла, то размер смещения равен двум структурам
        
        fin.seekg(-offset, ios::cur); // переход по смещению
        if (fin) // если не вышли за начало файла
        {
           read(fin);
        }
        else 
        {
            cout << "The beginning of the file!" << endl;
            // выводится первая структура в файле
            fin.clear();
            fin.seekg(0); 
            read(fin);
        }
    }
}
 
int main()
{
   const int M = 9; 
   data d[M];
   for (int i = 0; i < 9; ++i)
       for (int j = 0; j < 5; ++j)
          d[i].arr[j] = i + 1;
 
   ofstream fout("1.data", ios::binary);
   fout.write((const char*)d, sizeof(d[0]) * M);
   fout.close();
 
   // в файла, в бинарном виде, массив структур. В каждом массиве по N целых чисел
   // Величина числа соответствует номеру записи струкруры в файле (нумерация с 1).
 
   ifstream fin("1.data", ios::binary);
   if (!fin)
       cout << "Error!" << endl;
   else
   {
        char ch;
        do
        {
            cin >> ch; // 1 - шаг вперёд, 2 - шаг назад, 0 - выход
            if (ch == '0')
                break;
 
            step(fin, ch);
            
        } while (true);
   }
   
   system("pause");
   return 0;
}
1
13 / 13 / 1
Регистрация: 06.06.2011
Сообщений: 157
06.04.2014, 23:44  [ТС]
alsav22, Благодарю за хороший пример! Завтра после работы попробую реализовать!
0
13 / 13 / 1
Регистрация: 06.06.2011
Сообщений: 157
09.04.2014, 22:56  [ТС]
alsav22, Добрый день! Извиняюсь за беспокойство. Хорошего Вам настроения!

Вот, нашел время для учебы. Все вроде понял, но появился новый вопрос.

Я никак, получается, не могу задать размер массива в структуре во время программы?
т.е. он уже определен: const int N = 5;
C++
1
2
3
4
5
6
const int N = 5;
 
struct data
{
    int arr[N];
};
т.е. получается,
C++
1
const int N = 5;
грубо говоря, строка в 5 цифр.
C++
1
2
const int M = 9; 
   data d[M];
const int M = 9; кол-во строчек.

Я не владею такой информацией, почитал немного, ничего не нашел. (буду рад советам что читать).

Или в моем случае нужно обращать взор на классы?
Просто, для конкретного примера выставлю размерность, а если будет размер другой, то вывод будет иной....
Спасибо!
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
10.04.2014, 00:38
Цитата Сообщение от о_О_Кто_здесь Посмотреть сообщение
Просто, для конкретного примера выставлю размерность, а если будет размер другой, то вывод будет иной....
Я выложил работающий пример передвижения по структурам в файле, если структруры записаны в бинарном режиме. Информацию к размышлению. Какая структура нужна для вашей задачи (один массив или не один массив), какая размерность массива там нужна (пять или не пять), и т.д. - это вам решать. Сколько структур в файл записывать (девять или не девять) - это тоже вам решать.

Добавлено через 26 минут
Цитата Сообщение от о_О_Кто_здесь Посмотреть сообщение
Или в моем случае нужно обращать взор на классы?
Класс или структура - разница небольшая, но структура (объект с фиксированным размером) под вашу матрицу (или отдельно, под вот это: 3x+2y-5z=-1 (может быть нужна структура, в которой будут три такие структуры)) - напрашивается.

Добавлено через 3 минуты
О "Решениях СЛАУ методом Гаусса" понятия не имею, поэтому подсказать что-то конкретное, по организации данных для этой задачи, не смогу.
1
13 / 13 / 1
Регистрация: 06.06.2011
Сообщений: 157
10.04.2014, 00:42  [ТС]
alsav22, Понял! Благодарю.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
10.04.2014, 00:42

Чтение файла, чтение названия папки где находится файл, запись данных на PHP
Допустим у нас есть структура с папками типа Large -&gt; Vehicles -&gt; Firetruck_0 В этой папке лежит файл формата .dat Что нужно сделать? ...

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

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

Чтение бинарного файла - чтение первых 9 байт
Есть код, который читает первые 9 байт бинарного файла(заголовок записи) void ATS44Encoder::FileEncode() { QFile* file = new...

Чтение файла CSV и чтение из Table View
Здравствуйте, задача считать столбцы и строки excel в TextEdit. Прошу помощи в реализиции. Вручную сохраняю xls файл в csv. Потом надо...


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

Или воспользуйтесь поиском по форуму:
46
Ответ Создать тему
Новые блоги и статьи
FPS контроллер с анимированными Y-Bot и 3D-звуком miniaudio (Box3D, Recast, BehaviorTree.CPP, ozz-animation, ImGui, OpenGL и SDL3)
8Observer8 18.10.2026
Содержание блога | English Version Полное мультиплатформенное руководство по стартовому проекту с FPS-контроллером игрока, анимированными роботами Y-Bot с 4-слойным блендингом, 3D-физикой Box3D,. . .
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru