Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.62/29: Рейтинг темы: голосов - 29, средняя оценка - 4.62
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 27

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

23.03.2019, 09:55. Показов 5672. Ответов 22

Студворк — интернет-сервис помощи студентам
Необходимо считать из файла размерность. Саму матрицу считываю, но сказали, что нужно, чтобы была ещё размерность
C++
1
2
3
4
5
6
7
8
9
10
void zap(int **A, int N, fstream &f)
{
for (int i=0; i<N;i++)
 {
 for(int j=0;j<N;j++)
  {
  f>>A[i][j];
  }
 }
}
Вот заполнение массива из файла, но размерность не знаю как сделать.
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
23.03.2019, 09:55
Ответы с готовыми решениями:

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

Как из файла прочитать размерность матрицы и её содержимое?
Помогите пожалуйста, ничего не нашёл! Как из файла прочитать размерность матрицы и её содержимое?

Необходимо убрать размерность матрицы из файла и сделать её в коде
Вот этот кусок кода необходимо переделать чтобы размерность можно было устанавливать в программе как константой,а не указывать её в INPUT ...

22
Нарушитель
10225 / 5655 / 1257
Регистрация: 12.03.2015
Сообщений: 26,180
23.03.2019, 10:29
Имеется в виду, имхо, что размеры матрицы хранятся в том же файле. Их надо оттуда прочитать в первую очередь, затем выделить память под данные и только после этого прочитать из файла эти данные.
0
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 27
23.03.2019, 10:34  [ТС]
А как это сделать, можете написать, пожалуйста?
0
Нарушитель
10225 / 5655 / 1257
Регистрация: 12.03.2015
Сообщений: 26,180
23.03.2019, 10:39
Цитата Сообщение от Kazuki11 Посмотреть сообщение
А как это сделать, можете написать, пожалуйста?
Дай файл.
0
0 / 0 / 0
Регистрация: 23.03.2019
Сообщений: 4
23.03.2019, 10:45
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void zap(int **A, int & N, fstream &f){
 f >> N; // Считываем размерность
 
// Выделяем память для матрицы
 A = new int*[N];
 for(int i = 0; i < N; i++)
  A[i] = new int[N];
 
// Заполняем матрицу
 for(int i = 0; i < N; i++)
  for(int j = 0; j < N; j++)
   f >> A[i][j];
}
 
----------------------
// Чистим память
 for(int i = 0; i < N; i++)
  delete[] A[i];
delete[] A;
Внутри файла размерность должна лежать вначале. Пример:
2
1 0
0 1
0
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 27
24.03.2019, 12:42  [ТС]
Ох, поздно я спрашиваю, но извиняюсь за это. Получается, что матрица в ткст файле должна быть уже там, её не надо рандомом заполнять? То есть я имею в виду, что нужно за ранее в ручную написать в ткст матрицу.

Добавлено через 13 минут
Где-то ошибка, но не могу понять как исправить. Пишет, что "идентификатор "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
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
 
using namespace std;
 
void zap(int **A, int &N, fstream &f) 
{
    f >> N;
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            f >> A[i][j];
        }
        cout << endl;
    }
    cout << endl;
}
void Change(int **A, int &N)
{
    {
        for (int i = 1; i < N; i++)
        {
            for (int k = 0; k < N - i; k++)
            {
                if (A[k][0] < A[k + 1][0])
                        swap(A[k], A[k + 1]);
            }
        }
    }
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout << A[i][j] << "\t";
        }
        cout << endl;
    }
    cout << endl;
}
void Obn(int **A, int &N)
{
    for (int j = 0; j < N; j++)
    {
        if (A[N - 1 - j][j] < 0)
        {
            for (int i = 0; i < N; i++)
            {
                if (A[i][j] % 2 == 0)
                    A[i][j] = 0;
            }
        }
    }
    
    for (int i=0;i<N;i++)
    {
        for (int j=0;j<N;j++)
        {
            cout<<A[i][j]<<"\t";
        }
        cout<<endl;
    }
}
 
int main()
{
    setlocale (0,"Rus");
    int **A = new int*[N]; //Вот тут пишет
    for (int i = 0; i < N; i++)
    {
        A[i] = new int[N];
    }
    fstream f;
    f.open("F:\\text.txt", ios::in | ios::out | ios::trunc);
    f<<endl;
    f.seekg(0, ios_base::beg);
    zap(A, N, f);
    f.seekg(0, ios_base::end);
    Change(A, N);
    Obn(A, N);
    system("pause");
    return 0;
}
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
24.03.2019, 12:43
Цитата Сообщение от Kazuki11 Посмотреть сообщение
Пишет, что "идентификатор "N" не определен"
объявить N, например в начале, или в функции main, а потом передавать как аргумент
0
0 / 0 / 0
Регистрация: 23.03.2019
Сообщений: 4
24.03.2019, 13:27
Для того, чтобы выделить память, тебе нужно знать 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
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
 
using namespace std;
 
void zap(int **A, int &N, fstream &f) 
{ 
    for (int i = 0; i < N; i++)
    {
        A[i] = new int[N];
    }
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            f >> A[i][j];
        }
        cout << endl;
    }
    cout << endl;
}
void Change(int **A, int &N)
{
    {
        for (int i = 1; i < N; i++)
        {
            for (int k = 0; k < N - i; k++)
            {
                if (A[k][0] < A[k + 1][0])
                        swap(A[k], A[k + 1]);
            }
        }
    }
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout << A[i][j] << "\t";
        }
        cout << endl;
    }
    cout << endl;
}
void Obn(int **A, int &N)
{
    for (int j = 0; j < N; j++)
    {
        if (A[N - 1 - j][j] < 0)
        {
            for (int i = 0; i < N; i++)
            {
                if (A[i][j] % 2 == 0)
                    A[i][j] = 0;
            }
        }
    }
    
    for (int i=0;i<N;i++)
    {
        for (int j=0;j<N;j++)
        {
            cout<<A[i][j]<<"\t";
        }
        cout<<endl;
    }
}
 
int main()
{
    setlocale (0,"Rus");
    int **A = new int*[N]; //Вот тут пишет
 
    fstream f;
    f.open("F:\\text.txt", ios::in | ios::out | ios::trunc);
    int N;
    f.seekg(0, ios_base::beg);
    zap(A, N, f);
    f.seekg(0, ios_base::end);
    Change(A, N);
    Obn(A, N);
    system("pause");
    return 0;
}
Добавлено через 1 минуту
Матрица может как загружаться из файла, так и генерироваться рандомно. Я показал в примере, как она должна выглядеть в файле, если ты её загружаешь оттуда.
0
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 27
24.03.2019, 13:36  [ТС]
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
#include "stdafx.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
 
using namespace std;
 
void zap(int **A, int &N, fstream &f)
{
    f >> N;
    for (int i=0;i<N;i++)
    {
        for (int j=0;j<N;j++)
        {
            f>>A[i][j];
            cout<<A[i][j]<<'\t';
        }
        cout<<endl;
    }
    cout<<endl;
}
void Change(int **A, int &N)
{
    {
        for (int i = 1; i < N; i++)
        {
            for (int k = 0; k < N - i; k++)
            {
                if (A[k][0] < A[k + 1][0])
                        swap(A[k], A[k + 1]);
            }
        }
    }
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout << A[i][j] << "\t";
        }
        cout << endl;
    }
    cout << endl;
}
void Obn(int **A, int &N)
{
    for (int j = 0; j < N; j++)
    {
        if (A[N - 1 - j][j] < 0)
        {
            for (int i = 0; i < N; i++)
            {
                if (A[i][j] % 2 == 0)
                    A[i][j] = 0;
            }
        }
    }
    
    for (int i=0;i<N;i++)
    {
        for (int j=0;j<N;j++)
        {
            cout<<A[i][j]<<"\t";
        }
        cout<<endl;
    }
}
 
int main()
{
    int N;
    setlocale (0,"Rus");
    int **A = new int*[N];
    for(int i=0;i<N;i++)
    {
        A[i]= new int[N];
    }
    fstream f;
    f.open("F:\\text.txt", ios::in | ios::out | ios::trunc);
    f.seekg(0, ios_base::beg);
    zap(A, N, f);
    f.seekg(0, ios_base::end);
    Change(A, N);
    Obn(A, N);
    system("pause");
    return 0;
}
Вот такая проблема теперь. Я наверно очень туплю, но не пойму ситуации. Я же вроде как инициализировал N. Но что-то все-равно не так.
Миниатюры
Считать из файла размерность матрицы  
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
24.03.2019, 13:43
Цитата Сообщение от Kazuki11 Посмотреть сообщение
Я же вроде как инициализировал N
нет там никакой инициализации, о чем и говорит студия
0
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 27
24.03.2019, 14:12  [ТС]
Но как тогда надо сделать?
0
447 / 333 / 172
Регистрация: 01.07.2015
Сообщений: 1,161
24.03.2019, 15:55
Kazuki11, открыть файл, прочитать размерность, создать матрицу
0
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 27
24.03.2019, 17:45  [ТС]
Ну, я открыл файл, записал туда размерность, матрица сама уже и так там. А дальше идет ошибка. И я все-равно не понимаю, что нужно сделать, чтобы исправить. Вот полный код, ошибка с инициализацией 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
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 "stdafx.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
 
using namespace std;
 
void zap(int **A, int &N, fstream &f)
{
    f >> N;
    for (int i=0;i<N;i++)
    {
        for (int j=0;j<N;j++)
        {
            f>>A[i][j];
            cout<<A[i][j]<<'\t';
        }
        cout<<endl;
    }
    cout<<endl;
}
void Change(int **A, int &N)
{
    {
        for (int i = 1; i < N; i++)
        {
            for (int k = 0; k < N - i; k++)
            {
                if (A[k][0] < A[k + 1][0])
                        swap(A[k], A[k + 1]);
            }
        }
    }
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout << A[i][j] << "\t";
        }
        cout << endl;
    }
    cout << endl;
}
void Obn(int **A, int &N)
{
    for (int j = 0; j < N; j++)
    {
        if (A[N - 1 - j][j] < 0)
        {
            for (int i = 0; i < N; i++)
            {
                if (A[i][j] % 2 == 0)
                    A[i][j] = 0;
            }
        }
    }
    
    for (int i=0;i<N;i++)
    {
        for (int j=0;j<N;j++)
        {
            cout<<A[i][j]<<"\t";
        }
        cout<<endl;
    }
}
 
int main()
{   int N;
    setlocale (0,"Rus");
    int **A = new int*[N];
    for (int i = 0; i < N; i++)
    {
        A[i] = new int[N];
    }
    fstream f;
    f.open("F:\\text.txt", ios::out);
    f.seekg(0, ios_base::beg);
    zap(A, N, f);
    f.seekg(0, ios_base::end);
    Change(A, N);
    Obn(A, N);
    system("pause");
    return 0;
}
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
24.03.2019, 18:06
Цитата Сообщение от Kazuki11 Посмотреть сообщение
Ну, я открыл файл, записал туда размерность, матрица сама уже и так там.
Зачем записал? Она же (размерность) в первой строке записана.
0
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 27
24.03.2019, 18:15  [ТС]
То есть 5-ка лишняя? Но я ее убрал и все-равно ошибка, что N не инициализирована.
Миниатюры
Считать из файла размерность матрицы  
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
24.03.2019, 18:18
Цитата Сообщение от Kazuki11 Посмотреть сообщение
То есть 5-ка лишняя?
что значит лишняя? это и есть размерность, не надо её убирать, я думал вы там еще что-то где-то записали

Добавлено через 1 минуту
Ваша проблема в том, что вы выделяете память до того как считали размерность
0
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 27
24.03.2019, 18:42  [ТС]
Ох, исправьте пожалуйста, если Вам не трудно. Я уже пробовал сам исправлять, но ещё хуже делаю.
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
24.03.2019, 18:54
Уберите выделение памяти из main()
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void zap(int **A, int &N, fstream &f)
{
    f >> N;
 
    A = new int*[N];
 
    for (int i = 0; i < N; i++)
    {
        A[i] = new int[N];
        for (int j = 0; j < N; j++)
        {
            f >> A[i][j];
        }
    }
}
В конце программы добавьте:
C++
1
2
3
    for (int i = 0; i < N; i++)
        delete[] A[i];
    delete[] A;
0
0 / 0 / 0
Регистрация: 18.12.2018
Сообщений: 27
24.03.2019, 19:14  [ТС]
Так же ругается на N, теперь еще и на A ругаться начал. Где теперь ошибка? До завтра надо успеть сделать, а я с этим чтением размерности мучаюсь... :С А, мне нужна квадратная матрица, ведь этот способ подходит для квадратной матрицы?
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 "stdafx.h"
#include <iostream>
#include <fstream>
#include <iomanip>
#include <cstdlib>
 
using namespace std;
 
void zap(int **A, int &N, fstream &f)
{
    f >> N;
    A = new int*[N];
    for (int i = 0; i < N; i++)
    {
        A[i] = new int[N];
        for (int j = 0; j < N; j++)
        {
            f >> A[i][j];
        }
        cout << endl;
    }
    cout << endl;
}
void Change(int **A, int &N)
{
    {
        for (int i = 1; i < N; i++)
        {
            for (int k = 0; k < N - i; k++)
            {
                if (A[k][0] < A[k + 1][0])
                        swap(A[k], A[k + 1]);
            }
        }
    }
 
    for (int i = 0; i < N; i++)
    {
        for (int j = 0; j < N; j++)
        {
            cout << A[i][j] << "\t";
        }
        cout << endl;
    }
    cout << endl;
}
void Obn(int **A, int &N)
{
    for (int j = 0; j < N; j++)
    {
        if (A[N - 1 - j][j] < 0)
        {
            for (int i = 0; i < N; i++)
            {
                if (A[i][j] % 2 == 0)
                    A[i][j] = 0;
            }
        }
    }
    
    for (int i=0;i<N;i++)
    {
        for (int j=0;j<N;j++)
        {
            cout<<A[i][j]<<"\t";
        }
        cout<<endl;
    }
}
 
int main()
{
    int N;
    setlocale (0,"Rus");
    fstream f;
    f.open("F:\\text.txt", ios::out);
    f.seekg(0, ios_base::beg);
    zap(A, N, f);
    f.seekg(0, ios_base::end);  
    Change(A, N);
    Obn(A, N);
    for (int i = 0; i < N; i++)
        delete[] A[i];
    delete[] A;
    system("pause");
    return 0;
}
0
 Аватар для zayats80888
6352 / 3523 / 1428
Регистрация: 07.02.2019
Сообщений: 8,995
24.03.2019, 19:18
Kazuki11,
C++
1
2
    int N = 0;
    int** A = 0;
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.03.2019, 19:18
Помогаю со студенческими работами здесь

Нужно считать размер квадратной матрицы из файла.Размер заранне считать не известным
КУ всем.Нужна помощь,как считать из условного файла file.txt, где есть матрица, её размер, назовём его x.Так вот,нужно считать размер...

Считать массив из одного файла, а из другого - его размерность
нужно считать из файла in1.txt размерность массива, а из файла in2.txt сами элементы массива вот моя попытка { FILE...

Как определить размерность матрицы, заданной из файла?
Как определить размерность матрицы, заданной из файла? Дана матрица в файле txt, нужно определить ее размерность(кол-во столбцов и строк).

Считать 3 матрицы из файла
Добрый вечер, не могу понять как считать из файла 3 матрицы вида(всегда квадратные): 135 984 724; 1234 5678 9012 3456; 12 ...

Считать матрицы из файла и сложить их
Основная задача сложить матрицы.Но это не проблема. Числа для них нужно взять из файла и если количество чисел больше чем размеры вывести...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru