С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
0 / 0 / 0
Регистрация: 13.12.2021
Сообщений: 6
1

Записать матрицы в файл и вывести на экран

13.06.2022, 14:55. Показов 559. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте. Имеется задание: "В файле хранится k матриц размерности n × n . Для каждой матрицы из файла вычислить произведение ее диагональных элементов. Все матрицы с нечетными произведениями записать в другой файл, удалив их из первого файла. Вывести на экран содержимое первого и второго файлов."

Попытался написать, но дальше записи нескольких матриц в файл не смог уйти. Помогите пожалуйста.
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
#include <iostream>
#include <locale.h>
#include <fstream>
#include <iomanip>
#include <stdlib.h>
#include <string>
 
int main()
{
    using namespace std;
    int i, p, k, b, j, N, matr[20][20]{};
    ofstream file;
    string getcontent;
    setlocale(LC_ALL, "Russian");
    file.open("clesson.txt");
 
    cout << "Введите количество квадратных матриц ";
    cin >> k;
    cout << "Введите размерность квадратных матриц ";
    cin >> N;
    for (b = 0; b < k; b++)
    {
        cout << "Введите элементы матрицы номер " << b + 1 << endl;
        for (i = 0; i < N; i++)
            for (j = 0; j < N; j++)
                cin >> matr[i][j];
 
        cout << b + 1 << " Матрица номер" << " \n";
        for (i = 0; i < N; i++)
        {
            for (j = 0; j < N; j++)
            {
                cout << setw(4) << matr[i][j];
                file << setw(4) << matr[i][j];
            }
            file << endl;
            cout << endl;
        }
        file << endl;
    }
    file.close();
    
    ifstream openfile("clesson.txt");
    if (openfile.is_open())
    {
        while (getline(openfile, getcontent))
        {
            cout << getcontent << endl;
        }
    }
    openfile.close();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.06.2022, 14:55
Ответы с готовыми решениями:

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

В двоичный файл записать Фамилию, Имя, Занимаемое место, упорядоченные по убыванию и вывести этот файл на экран
// Sportsmens.cpp: определяет точку входа для консольного приложения. //даны количество...

Создать файл из N чисел. Вывести содержимое на экран. Заменить отрицательные элементы на 5 остальные на 0. Записать в новый файл
1. Создать файл, состоящий из N целых чисел. Вывести содержимое этого файла на экран. 2. Заменить...

Файл A2.dat содержит действительные числа. Прочитать файл, найти минимальное и максимальное числа, вывести их на экран и записать в текстовый файл.
помогите....очень надо...а то зачёт не поставят((

Создать файл, содержащий не более 50 случайных целых чисел. Записать в новый файл и вывести на экран максимальное и минимальное числа
Создать файл, содержащий не более 50 случайных целых чисел. Записать в новый файл и вывести на...

7
3718 / 2647 / 761
Регистрация: 29.06.2020
Сообщений: 9,800
13.06.2022, 15:02 2
Цитата Сообщение от Bladerog Посмотреть сообщение
Попытался написать, но дальше записи нескольких матриц в файл не смог уйти
Формат записи в файл свободный? По заданию не вижу что бы были какие то рамки.
Самый элементарный способ записи, текстовый. записываtм одно число (N) - размер, дальше N строк по N элементов.
И так далее.

Цитата Сообщение от Bladerog Посмотреть сообщение
Для каждой матрицы из файла вычислить произведение ее диагональных элементов
Этого тут навалом. Поищите по форуму.

Цитата Сообщение от Bladerog Посмотреть сообщение
Все матрицы с нечетными произведениями записать в другой файл
См. выше.
Цитата Сообщение от Bladerog Посмотреть сообщение
удалив их из первого файла
Грубо говоря, перезаписать файл. Как записывать матрицы - см. выше.

Напишу простенький пример...
0
0 / 0 / 0
Регистрация: 13.12.2021
Сообщений: 6
13.06.2022, 15:07  [ТС] 3
Цитата Сообщение от SmallEvil Посмотреть сообщение
Грубо говоря, перезаписать файл. Как записывать матрицы - см. выше.
Напишу простенький пример...
Это всё понимаю, но как реализовать это на моём коде? Если писать кратко, то хотелось бы чтобы мою программу дописали.
Пока что не могу понять как будет работать код с несколькими матрицами.
0
3718 / 2647 / 761
Регистрация: 29.06.2020
Сообщений: 9,800
13.06.2022, 15:33 4
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
#include <iostream>
#include <fstream>
using std::size_t;
using elem = int;
using ostream_t = std::basic_ostream<char>;
using istream_t = std::basic_istream<char>;
ostream_t& save(ostream_t& oso, elem** m, size_t n ){
    for(size_t i=0; i<n; ++i){
        for(size_t j=0; j<n; ++j)
            oso << m[i][j] << '\t';
        oso << std::endl;
    }
    return oso;
}
istream_t& load(istream_t& iso, elem** &m, size_t& n){
    iso >> n;
    m = new elem*[n];
    for(size_t i=0; i<n; ++i)
       m[i] = new elem[n];
    if (m){
        for(size_t i=0; i<n; ++i)
            for(size_t j=0; j<n; ++j)
                iso >> m[i][j];
    }
    return iso;
}
int main()
{
    elem*** matrix_storage{nullptr};
    size_t* m_sizes{nullptr};
    size_t  ms_size{};
    {
        std::ifstream input("matrix_db.txt");
        if (input){
            input >> ms_size;
            m_sizes = new size_t[ms_size]{};
            matrix_storage = new elem**[ms_size]{nullptr};
            size_t i{ms_size};
            while(i--){
               load(input, matrix_storage[i], m_sizes[i]);
               std::cout << m_sizes[i] << std::endl;
               save(std::cout, matrix_storage[i], m_sizes[i]);
               std::cout << std::endl;
            }
            input.close();
            
            // 
               // работаем с матрицами ТУТ --->>>
            //
            
            // освобождение памяти
            delete [] m_sizes;
            i = ms_size;
            while(i--){
                for(size_t j=0; j<m_sizes[i]; ++j)
                    delete [] matrix_storage[i][j];
                delete [] matrix_storage[i];
            }
            delete [] matrix_storage;
        }
    }
    return 0;
}
Добавлено через 1 минуту
Цитата Сообщение от Bladerog Посмотреть сообщение
Если писать кратко, то хотелось бы чтобы мою программу дописали
Уж извольте.

Добавлено через 55 секунд
Не отлаживал, возможны баги, лаги, UB и прочие инопланетяне.

Добавлено через 40 секунд
"matrix_db.txt"
Код
2
3
11 12 13
21 22 23
31 32 33
4
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
0
0 / 0 / 0
Регистрация: 13.12.2021
Сообщений: 6
13.06.2022, 15:42  [ТС] 5
Цитата Сообщение от SmallEvil Посмотреть сообщение
Не отлаживал, возможны баги, лаги, UB и прочие инопланетяне.
Большое спасибо. Но я кажется слишком тупой, чтобы понять это. Не могу даже запустить этот в VS. Можно самую пошаговую из всех пошаговых инструкций пожалуйста? В коде не нашел оператора ввода (cin), для ввода размерности и количества матриц. Заранее спасибо
0
3718 / 2647 / 761
Регистрация: 29.06.2020
Сообщений: 9,800
13.06.2022, 15:52 6
Цитата Сообщение от Bladerog Посмотреть сообщение
В коде не нашел оператора ввода (cin), для ввода размерности и количества матриц. Заранее спасибо
Матрицы читаются из файла.
Первое число в файле - количество матриц.
Дальше размер матрицы. После сами элементы.
И так для каждой матрицы.

На счет VS, могу проверить на 2015-ой.

Добавлено через 1 минуту
C++
29
30
31
    elem*** matrix_storage{nullptr}; // массив матриц
    size_t* m_sizes{nullptr}; // массив размеров для каждой матрицы
    size_t  ms_size{}; // количество матриц хранимых  в matrix_storage
0
0 / 0 / 0
Регистрация: 13.12.2021
Сообщений: 6
13.06.2022, 15:57  [ТС] 7
SmallEvil, можно ли с вами связаться где-нибудь? Для более подробной помощи?
0
3718 / 2647 / 761
Регистрация: 29.06.2020
Сообщений: 9,800
13.06.2022, 18:51 8
Цитата Сообщение от SmallEvil Посмотреть сообщение
На счет VS, могу проверить на 2015-ой.
========== Build: 1 succeeded, 0 failed, 0 up-to-date, 0 skipped ==========
Ничего не правил.
Но после отработки - вылетает. Видимо где-то с динамической памятью намудрил.

Добавлено через 6 минут
Цитата Сообщение от SmallEvil Посмотреть сообщение
Видимо где-то с динамической памятью намудрил.
Да есть такое.
Рано удалил размеры массивов.
C++
52
    delete[] m_sizes;
вставить после 59 строки :
C++
59
60
            delete [] matrix_storage;
            delete [] m_sizes;
Добавлено через 2 часа 44 минуты
Bladerog, пользуйся,
Если нужно что то еще, уже как то сам.
Ну и не помешает протестировать на других входных матрицах.
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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
#include <iostream>
#include <fstream>
#include <string>
using std::size_t;
using elem = int;
using ostream_t = std::basic_ostream<char>;
using istream_t = std::basic_istream<char>;
elem product(elem** m, size_t n);
std::ifstream& print_file(std::ifstream& file);
ostream_t& save(ostream_t& oso, elem** m, size_t n);
istream_t& load(istream_t& iso, elem** &m, size_t& n);
 
int main()
{
    elem*** matrix_storage{ nullptr };
    size_t* m_sizes{ nullptr };
    size_t  ms_size{};
    size_t* matrix_with_odd_product{};
    size_t  modd_size{};
    {
        {
            std::ifstream input("matrix_db.txt");
            if (input) {
                if (input >> ms_size) {
                    m_sizes = new size_t[ms_size]{};
                    matrix_storage = new elem**[ms_size] {nullptr};
                    size_t i{ ms_size };
                    while (i--)
                        load(input, matrix_storage[i], m_sizes[i]);
                }
        }
            
            if (ms_size) {
                matrix_with_odd_product = new size_t[ms_size]{std::string::npos};
                size_t i{ ms_size };
                while (i--)
                    if (product(matrix_storage[i], m_sizes[i]) % 2 != 0)
                        matrix_with_odd_product[modd_size++] = i;
                {
                    std::ofstream out("odd_matrix_db.txt");
                    if (out.is_open()) {
                        if (modd_size) {
                            out << modd_size << std::endl;
                            for (size_t i = 0; i < modd_size; ++i) {
                                size_t size = m_sizes[matrix_with_odd_product[i]];
                                save(out, matrix_storage[matrix_with_odd_product[i]], size);
                            }
                        }
                    }
                }
                {
                    std::ofstream out("matrix_db.txt");
                    if (out.is_open()) {
                        if (ms_size - modd_size) {
                            out << ms_size - modd_size << std::endl;
                            size_t i = ms_size, odd_i = 0;
                            while(i--){
                                size_t size = m_sizes[i];
                                if (i == matrix_with_odd_product[odd_i])
                                    ++odd_i;
                                else
                                    save(out, matrix_storage[i], size);
                            }
                        }
                    }
                }
            }
            delete[] matrix_with_odd_product;
            
            // освобождение памяти
            size_t i{ ms_size };
            while (i--) {
                for (size_t j = 0; j<m_sizes[i]; ++j)
                    delete[] matrix_storage[i][j];
                delete[] matrix_storage[i];
            }
            delete[] matrix_storage;
            delete[] m_sizes;
            {
                std::ifstream file("matrix_db.txt");
                std::cout << "\"matrix_db.txt\" : " << std::endl;
                if (file.is_open())
                    print_file(file);
 
            }
            {
                std::ifstream file("odd_matrix_db.txt");
                std::cout << "\"odd_matrix_db.txt\" : " << std::endl;
                if (file.is_open())
                    print_file(file);
            }
        }
    }
    return 0;
}
 
elem product(elem** m, size_t n) {
    elem res{ 1 };
    for (size_t i = 0, j = n - 1; i<n; ++i, --j)
        res *= m[i][i] * m[i][j];
    return res;
}
std::ifstream& print_file(std::ifstream& file) {
    std::string line;
    while (std::getline(file, line))
        std::cout << line << std::endl;
    return file;
}
ostream_t& save(ostream_t& oso, elem** m, size_t n) {
    oso << n << std::endl;
    for (size_t i = 0; i<n; ++i) {
        for (size_t j = 0; j<n; ++j)
            oso << m[i][j] << '\t';
        oso << std::endl;
    }
    return oso;
}
istream_t& load(istream_t& iso, elem** &m, size_t& n) {
    iso >> n;
    m = new elem*[n];
    for (size_t i = 0; i<n; ++i)
        m[i] = new elem[n];
    if (m) {
        for (size_t i = 0; i<n; ++i)
            for (size_t j = 0; j<n; ++j)
                iso >> m[i][j];
    }
    return iso;
}
Тестовый файл matrix_db.txt :
Код
3
3
11	12	13	
21	22	23	
31	32	33	
4
1	2	3	4	
1	2	3	4	
1	2	3	4	
1	2	3	4	
3
3 1 3
1 1 1
1 1 1
0
13.06.2022, 18:51
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
13.06.2022, 18:51
Помогаю со студенческими работами здесь

Ввести матрицу в консоле и записать в файл, считать файл вывести сумму строк матрицы
Нужна помощь, очень. Нуб еще тот :-| Вобщем задача поставлена преподом так: в консоле: 1) Ввести...

Записать данные в файл и вывести на экран
Добрый вечер! Здравствуйте! Задание по теме: файлы. (на языке C ) Составить алгоритм,...

Записать в файл численный массив и вывести на экран
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; void...

Записать все положительные числа в файл и вывести на экран
program _17; uses crt; var _file:file of real; varfile:real; i,a,c:byte; begin...

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

Записать на место отрицательных элементов матрицы нули и вывести ее на экран
Записать на место отрицательных элементов нули и вывести ее на экран. Исходную матрицу вывести на...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru