Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Wrigley
0 / 0 / 0
Регистрация: 21.05.2018
Сообщений: 36
1

Как считать данные с файла и записать результат в файл?

22.05.2018, 18:06. Просмотров 298. Ответов 7
Метки нет (Все метки)

Как считать данные с файла и записать результат в файл?

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
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
using namespace std;
template < typename T > using matrix_t = std::vector< std::vector<T> > ;
 
template < typename T > matrix_t<T>& transpose_square_matrix( matrix_t<T>& mtx )
{
    const std::size_t n = mtx.size() ;
 
    using std::swap ;
    for( std::size_t i = 0 ; i < (n-1) ; ++i )
        for( std::size_t j = i+1 ; j < n ; ++j )
            swap( mtx[i][j], mtx[j][i] ) ;
 
    return mtx ;
}
 
template < typename T > matrix_t<T>& reverse_rows( matrix_t<T>& mtx )
{
    for( auto& row : mtx ) std::reverse( std::begin(row), std::end(row) ) ;
    return mtx ;
}
 
template < typename T > matrix_t<T>& rotate_square_matrix_right( matrix_t<T>& mtx )
{ return reverse_rows( transpose_square_matrix(mtx) ) ; }
 
template < typename T > matrix_t<T>& rotate_square_matrix_left( matrix_t<T>& mtx )
{ return transpose_square_matrix( reverse_rows(mtx) ) ; }
 
template < typename T > void print( const matrix_t<T>& mtx, int width = 4 )
{
    for( const auto& row : mtx )
    {
        for( int v : row ) std::cout << std::setw(width) << v ;
        std::cout << '\n' ;
    }
    std::cout << "\n\n" ;
}
 
int main()
{
    int NROTATIONS;
    cin>>NROTATIONS;
    std::vector< std::vector<int> > mtx { { 10, 11, 12, 13 }, { 14, 15, 16, 17 },
                                          { 18, 19, 20, 21 }, { 22, 23, 24, 25 } } ;
    print(mtx) ;
 
    for( int i = 0 ; i < NROTATIONS ; ++i ) print( rotate_square_matrix_right(mtx) ) ;
}
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.05.2018, 18:06
Ответы с готовыми решениями:

Считать данные из текстового файла по условию и записать их в другой текстовый файл (файловый ввод/вывод)
Здравствуйте! Очень прошу о помощи! Суть задания - дан текстовый файл, нужно...

Как считать данные с файла и записать в массив?
В файле данные расположены следующим образом : Radius: 1 Coord point:...

Как считать данные из файла и вывести в файл
Я сегодня написал 2 программы: Моё решение: #include &lt;iostream&gt; #include...

Класс "Комплексное число". Как считать и записать данные в файл?
Надо переделать код программы, чтобы данные шли из входного файла и...

Как из файла записать данные в другой файл?
странная задача, но все же надо открыть файл, прочитать и переписать их в...

7
Cortas
128 / 104 / 64
Регистрация: 14.03.2016
Сообщений: 353
Завершенные тесты: 5
22.05.2018, 19:06 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
24
25
26
27
28
template <typename T>
std::ostream& operator<<(std::ostream& out, matrix_t<T>& mtx)//запись (fout << mtx)
{
    for(const auto& row : mtx)
    {
        for(auto v : row) out << v << ' ';
        out << '\n';
    }
    out << "\n\n";
 
    return out;
}
 
template <typename T>
std::istream& operator>>(std::istream& in, matrix_t<T>& mtx)//чтение (fin >> mtx)
{
    int row, col;
    in >> row >> col;
    
    mtx.assign(row, vector<T>());
    for(int i = 0; i < row; i++)
        mtx[i].assign(col, 0);
 
    for(int i = 0; i < row; i++)
        for(int j = 0; j < col; j++)
            in >> mtx[i][j];
    return in;
}
Структура файла:
2 4
1 2 3 4
2 3 4 5

Добавлено через 2 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int main()
{
    //something
    
    ifstream fin("input.txt");//файл для чтения
    fin >> mtx;
    fin.close();
 
    //something else
    
    ofstream fout("output.txt");//файл для записи
    fout << mtx;
    fout.close();
    
    //smth
 
    return 0;
}
0
Wrigley
0 / 0 / 0
Регистрация: 21.05.2018
Сообщений: 36
22.05.2018, 19:59  [ТС] 3
Cortas, Я что то пропустил? Возможно не так функцию поворота вызываю..

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
#include <iostream>
#include <vector>
#include <algorithm>
#include <iomanip>
#include <fstream>
using namespace std;
template < typename T > using matrix_t = std::vector< std::vector<T> > ;
 
template <typename T>
std::ostream& operator<<(std::ostream& out, matrix_t<T>& mtx)//запись (fout << mtx)
{
    for(const auto& row : mtx)
    {
        for(auto v : row) out << v << ' ';
        out << '\n';
    }
    out << "\n\n";
 
    return out;
}
 
template <typename T>
std::istream& operator>>(std::istream& in, matrix_t<T>& mtx)//чтение (fin >> mtx)
{
    int row, col;
    in >> row >> col;
 
    mtx.assign(row, vector<T>());
    for(int i = 0; i < row; i++)
        mtx[i].assign(col, 0);
 
    for(int i = 0; i < row; i++)
        for(int j = 0; j < col; j++)
            in >> mtx[i][j];
    return in;
}
 
template < typename T > matrix_t<T>& transpose_square_matrix( matrix_t<T>& mtx )
{
    const std::size_t n = mtx.size() ;
 
    using std::swap ;
    for( std::size_t i = 0 ; i < (n-1) ; ++i )
        for( std::size_t j = i+1 ; j < n ; ++j )
            swap( mtx[i][j], mtx[j][i] ) ;
 
    return mtx ;
}
 
template < typename T > matrix_t<T>& reverse_rows( matrix_t<T>& mtx )
{
    for( auto& row : mtx ) std::reverse( std::begin(row), std::end(row) ) ;
    return mtx ;
}
 
template < typename T > matrix_t<T>& rotate_square_matrix_right( matrix_t<T>& mtx )
{ return reverse_rows( transpose_square_matrix(mtx) ) ; }
 
template < typename T > matrix_t<T>& rotate_square_matrix_left( matrix_t<T>& mtx )
{ return transpose_square_matrix( reverse_rows(mtx) ) ; }
 
template < typename T > void print( const matrix_t<T>& mtx, int width = 4 )
{
    for( const auto& row : mtx )
    {
        for( int v : row ) std::cout << std::setw(width) << v ;
        std::cout << '\n' ;
    }
    std::cout << "\n\n" ;
}
 
int main()
{
    int NROTATIONS;
    int mtx;
    cin>>NROTATIONS;
 
    ifstream fin("input.txt");//файл для чтения
    fin >> mtx;
    fin.close();
    rotate_square_matrix_right(mtx)
    for( int i = 0 ; i < NROTATIONS ; ++i ) //print( rotate_square_matrix_right(mtx) ){
    ofstream fout("output.txt");//файл для записи
    fout << mtx;
    fout.close();}
    return 0;
}
0
Cortas
128 / 104 / 64
Регистрация: 14.03.2016
Сообщений: 353
Завершенные тесты: 5
22.05.2018, 20:20 4
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
int main()
{
    int NROTATIONS;
    //int mtx;[fix]просто переменная типа int
    matrix_t<int> mtx;
    cin>>NROTATIONS;
 
    ifstream fin("input.txt");//файл для чтения
    fin >> mtx;
    fin.close();
    //rotate_square_matrix_right(mtx)[fix]вращаете её только один раз, + ; забыли
    //for( int i = 0 ; i < NROTATIONS ; ++i ) //print( rotate_square_matrix_right(mtx) ){[fix] создаете объект fout n раз!
    ofstream fout("output.txt");//файл для записи
    for( int i = 0 ; i < NROTATIONS ; ++i )
    {
        rotate_square_matrix_right(mtx);
        fout << mtx;
        cout << mtx;//[advice] можно и на экран.
    }
    fout.close();
    return 0;
}
0
Wrigley
0 / 0 / 0
Регистрация: 21.05.2018
Сообщений: 36
22.05.2018, 21:04  [ТС] 5
Cortas, Еще один вопросик.. Тут входном файле квадратная матрица, и первое число обозначает размер row x col, второе - NROTATIONS (вместо cin). Как это можно исправить?
0
Cortas
128 / 104 / 64
Регистрация: 14.03.2016
Сообщений: 353
Завершенные тесты: 5
22.05.2018, 23:30 6
Wrigley, Не совсем я вас понял, однако могу предположить, что вы хотите вводить кол-во поворотов тоже из файла. Можно сделать так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
int main()
{
    int NROTATIONS;
    //int mtx;[fix]просто переменная типа int
    matrix_t<int> mtx;
    
 
    ifstream fin("input.txt");//файл для чтения
    cin>>NROTATIONS;
    fin >> mtx;    
    fin.close();
    //rotate_square_matrix_right(mtx)[fix]вращаете её только один раз, + ; забыли
    //for( int i = 0 ; i < NROTATIONS ; ++i ) //print( rotate_square_matrix_right(mtx) ){[fix] создаете объект fout n раз!
    ofstream fout("output.txt");//файл для записи
    for( int i = 0 ; i < NROTATIONS ; ++i )
    {
        rotate_square_matrix_right(mtx);
        fout << mtx;
        cout << mtx;//[advice] можно и на экран.
    }
    fout.close();
    return 0;
}
структура файла тогда будет след.:
3 <- кол-во поворотов
3 3 <- размер
1 2 3 <-матрица
4 5 6
7 8 9
1
Wrigley
0 / 0 / 0
Регистрация: 21.05.2018
Сообщений: 36
22.05.2018, 23:36  [ТС] 7
Cortas, большое спасибо!
0
Cortas
128 / 104 / 64
Регистрация: 14.03.2016
Сообщений: 353
Завершенные тесты: 5
22.05.2018, 23:39 8
Wrigley, забыл поменять строчку:
замените
C++
1
cin>>NROTATIONS;
на
C++
1
fin>>NROTATIONS;
если этого ещё не сделали, конечно.
0
22.05.2018, 23:39
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2018, 23:39

Считать данные из файла и записать в переменные соответствующего типа
Имеется файл file.txt такого содержания(тип char*, int, float, разделенные...

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

Считать данные из текстового файла и записать их в массив float-ов
Помогите пожалуйста!!!Очень нужно! как считать данные из txt файла и записать...


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

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

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