Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 5.00
xtotdam
 Аватар для xtotdam
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 8
05.12.2011, 19:03     Считать размерность матрицы из файла #1
Есть файл, в нем лежат две матрицы, не обязательно квадратные. Надо считать эти две матрицы, а потом их сложить.Файл типизирован, то есть матрицы одинаковы, идут через пустую строку, без пропусков, числа разделены пробелами.
Если можно, алгоритм в пределах stdio.h, спасибо
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
05.12.2011, 19:03     Считать размерность матрицы из файла
Посмотрите здесь:

C++ Размер vs. размерность матрицы
Размерность матрицы C++
Размерность матрицы в файле C++
Размерность матрицы C++
C++ Как из файла прочитать размерность матрицы и её содержимое?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
05.12.2011, 19:21     Считать размерность матрицы из файла #2
Цитата Сообщение от xtotdam Посмотреть сообщение
Файл типизирован
Т.е. бинарный?

Цитата Сообщение от xtotdam Посмотреть сообщение
идут через пустую строку
???
xtotdam
 Аватар для xtotdam
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 8
05.12.2011, 20:33  [ТС]     Считать размерность матрицы из файла #3
Нет, файл обычный, текстовой.
А выглядит так:
---------
матрица А 1 строка
матрица А 2 строка
матрица А 3 строка
...

матрица Б 1 строка
матрица Б 2 строка
матрица Б 3 строка
...
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
05.12.2011, 20:42     Считать размерность матрицы из файла #4
Тогда читайте с помощью fscanf http://www.cplusplus.com/reference/c...cstdio/fscanf/
xtotdam
 Аватар для xtotdam
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 8
05.12.2011, 20:46  [ТС]     Считать размерность матрицы из файла #5
и тогда такой вопрос: как посчитать в строке пробелы?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
05.12.2011, 21:29     Считать размерность матрицы из файла #6
xtotdam,
C
1
2
3
4
5
6
int i;
int count = 0;
 
for (i = 0; i < strlen (str); i++)
     if ( str[i] == ' ' )
        count++;
xtotdam
 Аватар для xtotdam
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 8
05.12.2011, 21:31  [ТС]     Считать размерность матрицы из файла #7
а если считать строки, то вместо пробела в кавычки надо вставить \n?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
05.12.2011, 21:53     Считать размерность матрицы из файла #8
xtotdam, да, но не так все просто. Нужно организовать правильно чтение из файла для этого
xtotdam
 Аватар для xtotdam
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 8
05.12.2011, 22:03  [ТС]     Считать размерность матрицы из файла #9
правильно, это как?
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
05.12.2011, 22:05     Считать размерность матрицы из файла #10
xtotdam, например читать посимвольно, тогда - да
xtotdam
 Аватар для xtotdam
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 8
05.12.2011, 22:15  [ТС]     Считать размерность матрицы из файла #11
и еще такой вопрос: из какой библиотеки getline? на cplusplus написано слегка неотчетливо(
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
05.12.2011, 22:23     Считать размерность матрицы из файла #12
xtotdam, это С++
Подключаете заголовочный файл и пространство имен
C++
1
2
3
4
#include <iostream>
#include <string>
 
using namespace std;
xtotdam
 Аватар для xtotdam
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 8
05.12.2011, 22:28  [ТС]     Считать размерность матрицы из файла #13
огромное спасибо, но все равно не работает(
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
#include <stdio.h>
#include <string.h>
#include <istream>
using namespace std;
void main(void)
{
    int N=3,M=0; 
    int a[50][50],b[50][50]; //исходные матрицы
    int c[50][50],d[50][50],e[50][50]; //результат
    FILE *in=fopen("file.txt", "r");
    FILE *out=fopen("out.txt", "w");
    char str[100],str2[100];
    fgets(str,100,in);
    for (int i = 0; i < strlen (str); i++) //алгоритм подсчета ширины
    {
        if ( str[i] == ' ' )
        {
            M++;
        }
    }
    M++;
    printf("Hor: %d\n",M);
    delete (str);
    rewind(in);
 
    while (str!=NULL) //алгоритм подсчета высоты - не пашет
    {
        //fgets (str2,100,in);
        getline(in,str2,'\n');
        N++;
        printf("!");
    }
    N++;
    printf("Vert: %d\n",N);
    delete (str2);
    rewind(in);     //написано по подобию этого кода:
    
                                      ////        int i=0;
                                      ////        ifstream base("name.txt");
                                      ////        while (!base.eof())
                                      ////        {
                                      ////                base.getline(str, 1024, '\n');
                                      ////                i++;
                                      ////        }
                                      ////        base.close();
                                      ////        delete str;
                                      ////        cout << i << '\n';
                                      ////        system ("pause");
                                      ////}                                 
    //fscanf(in,"%d",&N);//vert
    //fscanf(in,"%d",&M);//hor
    for(int i=0;i<N;i++) //считывание матриц уже известных размеров
    {
        for(int j=0;j<M;j++)
        {
            fscanf(in,"%d",&a[i][j]);
        }
    }
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<M;j++)
        {
            fscanf(in,"%d",&b[i][j]);
            c[i][j]=a[i][j]+b[i][j]; //действия над ними, дальше вывод результатов
            d[i][j]=a[i][j]-b[i][j];
            e[i][j]=b[i][j]-a[i][j];
        }
    }
    fprintf(out,"\na+b\n\n");
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<M;j++)
        {
            fprintf(out,"%d ",c[i][j]);
        }
        fprintf(out,"\n");
    }
    fprintf(out,"\na-b\n\n");
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<M;j++)
        {
            fprintf(out,"%d ",d[i][j]);
        }
        fprintf(out,"\n");
    }
    fprintf(out,"\nb-a\n\n");
    for(int i=0;i<N;i++)
    {
        for(int j=0;j<M;j++)
        {
            fprintf(out,"%d ",e[i][j]);
        }
        fprintf(out,"\n");
    }
}
go
Эксперт C++
3582 / 1362 / 128
Регистрация: 16.04.2009
Сообщений: 4,528
05.12.2011, 22:36     Считать размерность матрицы из файла #14
xtotdam,
C
1
2
3
4
while ( ! feof (in_file) )
{
 
}
Не забудте про проверку на ошибке, и если пишете на Си, незачем использовать С++

Добавлено через 1 минуту
Кстати, не забудте, чтобы маркер файла указывал на начало.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.12.2011, 22:39     Считать размерность матрицы из файла
Еще ссылки по теме:

C++ Как считать матрицы из файла, если их несколько и они разного размера?
C++ Написать программу: считать две матрицы из файла и записать их в другой файл
Считать с файла две матрицы и перемножить их C++

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

Или воспользуйтесь поиском по форуму:
xtotdam
 Аватар для xtotdam
0 / 0 / 0
Регистрация: 05.12.2011
Сообщений: 8
05.12.2011, 22:39  [ТС]     Считать размерность матрицы из файла #15
да, но гетлайн все равно не работает(

у меня после каждого "обмера" rewind

и еще, гетлайн - уже С++? Если да, то как это сделать на Си?
Yandex
Объявления
05.12.2011, 22:39     Считать размерность матрицы из файла
Ответ Создать тему
Опции темы

Текущее время: 02:37. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru