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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.71
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
#1

Матрицы в файлах - C++

28.05.2010, 16:03. Просмотров 1788. Ответов 30
Метки нет (Все метки)

Добрый день! Изучаю дальше файлы, и есть парочка задач, но в них уже идёт работа с матрицей внутри файла:

Задача 1. Даны два целых числа I, J и файл вещественных чисел, содержащий элементы прямоугольной матрицы (по строкам), причем первый элемент файла содержит количество столбцов матрицы. Вывести элемент матрицы, расположенный в I-й строке и J-м столбце (строки и столбцы нумеруются от 1). Если требуемый элемент отсутствует, то вывести 0.

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

Задача 3. Даны два файла вещественных чисел с именами SA и SB, содержащие элементы прямоугольных матриц A и B (по строкам), причем первый элемент каждого файла содержит количество столбцов соответствующей матрицы. Создать файл той же структуры с именем SC, содержащий элементы произведения A•B. Если матрицы A и B нельзя перемножать, то оставить файл SC пустым.

Пожалуйста, если кто-то может, объясните хотя бы смысл задачи, и как они выглядят, просто я совершенно ничего не могу представить. Вроде бы на форуме есть и как транспонировать, в общем весь материал, а про то как сделать это в файле, и как должен выглядеть начальный файл я не знаю.

Спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.05.2010, 16:03     Матрицы в файлах
Посмотрите здесь:

Строки в файлах - C++
Здравствуйте. Такой вопрос. Как мне из файла считывать каждую 3 строку, преобразовывать ее в тип int и запоминать. Заранее известно, что...

Задача по файлах - C++
Створіть текстовий файл, що містить номери рейсів літаків і дні тижня, в які виконуються дані рейси (числа від 1 до 7). Напишіть програму,...

Вопрос по файлах в С++ - C++
Возник вопрос по файлах. Эсть масив float B={0}; заполнений елементами, необходимо значения перенести в файл, которий потом...

gotoxy в файлах - C++
Подскажите вот на экране можно gotoxy переместить курсор куда захочешь, а в файлах так можно, если можно то как???? Файлах .txt

Реверс в файлах - C++
Дан файл целых чисел. Создать новый файл, содержащий те же элементы, что и исходный файл, но в обратном порядке (Сделать реверс). ...

Мусор в файлах - C++
В файлы попадает какой-то мусор, в чём ошибка? #include <iostream.h> #include <fstream.h> #include <string.h> #include...

Массивы в заголовочных файлах - C++
в заголовочном файле в описании класса пишу: int _const_iMas = {0x63,0x7c,0x78,0x79}; В итоге компилятор подчёркивает знак '='...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
28.05.2010, 17:38     Матрицы в файлах #2
А никто и не говорит о том, что это нужно делать в файле))) Надо считывать данные из файла в память, в памяти выполнять все необходимые преобразования, а дальше как по условию, либо выводить на экран, либо в тот же файл (тогда создастся иллюзия, будто всё это происходило прямо внутри файла), либо в новый файл.
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
28.05.2010, 18:08  [ТС]     Матрицы в файлах #3
Не могли бы вы показать на примере одной из задачек? с вашим исходным файлом. Я просто не знаю что и как мне записать в него даже. -(
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
28.05.2010, 19:23     Матрицы в файлах #4
Задача 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
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
#include <stdio.h>
 
void transpose(double **mas, int *rows, int *cols)
{
    double temp;
    int i, j;
    
    for (i = 0; i < *rows; i++)
        for (j = 0; j < *cols; j++)
        {
            temp = mas[i][j];
            mas[i][j] = mas[j][i];
            mas[j][i] = temp;
        }
    
    *rows = *rows + *cols;
    *cols = *rows - *cols;
    *rows = *rows - *cols;
}
 
int main()
{
    double **mas;
    char buff;
    int n = 0, m;
    int res;
    int i, j;
    
    FILE *in;
    
    if ((in = fopen("in.txt", "r")) == NULL)
        return -1;
    
    while ((buff = fgetc(in)) != EOF)
        if (buff == '\n')
            n++;
    
    fseek(in, 0, SEEK_SET);
    fscanf(in, "%d", &m);
    
    res = (m > n) ? m : n;
    
    mas = (double **)malloc(res * sizeof(double *));
    
    for (i = 0; i < res; i++)
        mas[i] = (double *)malloc(res * sizeof(double));
    
    for (i = 0; i < n; i++)
        for (j = 0; j < m; j++)
            fscanf(in, "%lf", &mas[i][j]);
    
    transpose(mas, &n, &m);
    
    FILE *out;
    
    if ((out = fopen("out.txt", "w")) == NULL)
        return -1;
    
    for (i = 0; i < n; i++)
    {
        for (j = 0; j < m; j++)
            fprintf(out, "%lf ", mas[i][j]);
        
        fprintf(out, "\n");
    }
    
    fclose(in);
    fclose(out);
    
    for (i = 0; i < res; i++)
        free(mas[i]);
    
    free(mas);
    
    return 0;
}
Входной файл

Код
4
1 2 3 4
2 3 4 5
3 4 5 6
4 5 6 7
5 6 7 8
6 7 8 9
7 8 9 0
Выходной файл

Код
1.000000 2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 
2.000000 3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 
3.000000 4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 
4.000000 5.000000 6.000000 7.000000 8.000000 9.000000 0.000000
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
28.05.2010, 19:36  [ТС]     Матрицы в файлах #5
Спасибо! теперь буду пробовать сделать первую и третью. Если что-то не будет получатся, или запутаюсь, буду надеятся на вашу помощь.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
28.05.2010, 19:38     Матрицы в файлах #6
Разумеется))
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
29.05.2010, 13:55  [ТС]     Матрицы в файлах #7
Помогите пожалуйста, пытаюсь скомпилировать и появляются вот такие ошибки:
Код
P:\1AiP\Task 5\13\Text1.c(55) : error C2275: 'FILE' : illegal use of this type as an expression
        d:\program files\microsoft visual studio\vc98\include\stdio.h(156) : see declaration of 'FILE'
P:\1AiP\Task 5\13\Text1.c(55) : error C2065: 'out' : undeclared identifier
P:\1AiP\Task 5\13\Text1.c(57) : warning C4047: '=' : 'int ' differs in levels of indirection from 'struct _iobuf *'
P:\1AiP\Task 5\13\Text1.c(57) : warning C4047: '==' : 'int ' differs in levels of indirection from 'void *'
P:\1AiP\Task 5\13\Text1.c(63) : warning C4047: 'function' : 'struct _iobuf *' differs in levels of indirection from 'int '
P:\1AiP\Task 5\13\Text1.c(63) : warning C4024: 'fprintf' : different types for formal and actual parameter 1
P:\1AiP\Task 5\13\Text1.c(65) : warning C4047: 'function' : 'struct _iobuf *' differs in levels of indirection from 'int '
P:\1AiP\Task 5\13\Text1.c(65) : warning C4024: 'fprintf' : different types for formal and actual parameter 1
P:\1AiP\Task 5\13\Text1.c(69) : warning C4047: 'function' : 'struct _iobuf *' differs in levels of indirection from 'int '
P:\1AiP\Task 5\13\Text1.c(69) : warning C4024: 'fclose' : different types for formal and actual parameter 1
Error executing cl.exe.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
29.05.2010, 14:01     Матрицы в файлах #8
К сожалению, я со студией не работал... Поэтому не знаю, чего она орёт... Один выход - ждать кого-нибудь, кто работает в студии, пусть он на ошибки покажет...
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.05.2010, 14:42     Матрицы в файлах #9
надо подключить
C
1
#include <stdlib.h>
а warning здесь, потому что функции а-ля fopen считаются небезопасными. надо либо пользоваться безопасными аналогами, либо отключить подобные предупреждения прописав в начале проекта до всех include
C
1
#define _CRT_SECURE_NO_DEPRECATE
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
29.05.2010, 15:07  [ТС]     Матрицы в файлах #10
#include <stdlib.h> я сразу подключил, а прописывая строчку отключения предупреждений, всё остаётся так же. Проблема не здесь, но я не могу её найти.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
29.05.2010, 15:10     Матрицы в файлах #11
Почему-то ругается на FILE, причём только на второе объявление (т.е. на FILE *out; )... Может попробовать объявить FILE *out; там же, где объявлен FILE *in;, т.е. до первого исполняемого оператора, а то всё-таки в чистом Си все объявления должны делаться в самом начале, до каких-либо операторов, в отличие от Си++...
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
29.05.2010, 20:04  [ТС]     Матрицы в файлах #12
всё заработало)) Спасибо)

Помогите ещё пожалуйста со второй. У меня есть функция поиска элемента в матрице, но я не знаю как её использовать, и как сосканить номера столбов и строк для поиска.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
int elem(FILE *file, int i, int j)
{
   int buf, k;
 
   fseek(file, 0, SEEK_SET);
   clearerr(file);
   fscanf(file, "%i", buf);
   if (buf < j)
      return 0;  /* заданный столбец превышает количество
                    столбцов объявленных в файле*/
   for (k = 0; k < i*j; k++)
   {
      if (fscanf(file, "%i", buf) == EOF)
         return 0; /* конец файла, а нужного числа так и не нашли*/
      else if (k == (i*(j-1)+j-1))
         return buf;
   }
}
Добавлено через 4 часа 46 минут
Пожалуста подскажите как єто сделать!
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
29.05.2010, 20:16     Матрицы в файлах #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
#include <stdio.h>
 
int main()
{
    double **mas;
    char buff;
    int n = 0, m;
    int I, J;
    int i, j;
    
    FILE *in;
    
    if ((in = fopen("in.txt", "r")) == NULL)
        return -1;
    
    while ((buff = fgetc(in)) != EOF)
        if (buff == '\n')
            n++;
    
    fseek(in, 0, SEEK_SET);
    fscanf(in, "%d", &m);
    
    mas = (double **)malloc(n * sizeof(double *));
    
    for (i = 0; i < n; i++)
        mas[i] = (double *)malloc(m * sizeof(double));
    
    for (i = 0; i < n; i++)
        for (j = 0; j < m; j++)
            fscanf(in, "%lf", &mas[i][j]);
    
    fclose(in);
    
    printf("Input I: ");
    scanf("%d", &I);
    
    printf("Input J: ");
    scanf("%d", &J);
    
    if (I > n || J > m)
        printf("NULL\n");
    else
        printf("%lf\n", mas[I - 1][J - 1]);
    
    for (i = 0; i < n; i++)
        free(mas[i]);
    
    free(mas);
    
    getch();
    return 0;
}
Добавлено через 2 минуты
По сути изменил несколько строк. Программа намного проще, чем транспонирование, хотя каркас у них безусловно один. Конечно, рациональнее сразу считать из файла нужный элемент, но мне неохота особо с этим заморачиваться, поэтому тупо читаю всю матрицу в память и уже там ищу нужный элемент.
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
29.05.2010, 20:23  [ТС]     Матрицы в файлах #14
Спасибо большое! Теперь осталась только третья задачка. Скажите пожалуйста, какой алгоритм можно использовать при перемножении матриц? (Ни разу их не перемножал и не сталкивался с этим).
Вот этот подойдёт? Если его перевести на Си
http://www.cyberforum.ru/cpp-beginners/thread53080.html
fasked
Эксперт С++
4933 / 2513 / 180
Регистрация: 07.10.2009
Сообщений: 4,311
Записей в блоге: 1
29.05.2010, 20:26     Матрицы в файлах #15
Цитата Сообщение от Bloodykeeper Посмотреть сообщение
Спасибо большое! Теперь осталась только третья задачка. Скажите пожалуйста, какой алгоритм можно использовать при перемножении матриц? (Ни разу их не перемножал и не сталкивался с этим).

Не по теме:

а если взять учебник по математике, почитать, подумать и попробовать самому решить задачку? в ней же ничего сложного. а то вечно будут проблемы а-ля "ни разу не сталкивался с этим".


а вообще подойдет конечно...
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
29.05.2010, 23:54  [ТС]     Матрицы в файлах #16
А кто может какой-нить другой алгоритм подсказать, или функцию? А то тчо-то с той не выходит у меня....=(
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
29.05.2010, 23:55     Матрицы в файлах #17
Ну ведь это простой алгоритм! Не уж то нет ни малейшего желания самому попробовать написать его? Это ведь даже не программирование - это кодинг, думать особо не надо, за вас уже подумали... Если вы не поняли алгоритм - спрашивайте - объясним.
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
30.05.2010, 00:00  [ТС]     Матрицы в файлах #18
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 else if (c == STRINGS-1)
                        cout << '\x5c';
                  else
                        cout << '\x7c';
 
                  for (int d = 0; d < COLUMNS; d++)
                        cout << " " << MATRIX[c][d];
                  
                  if (c == 0) 
                        cout << " " << '\x5c';
                  else if (c == STRINGS-1)
                        cout << " " << '\x2f';
                  else
                        cout << " " << '\x7c';
Это не понятно. И как оно на Си- тоже не понятно. Быть может всё просто и я туплю...ну, не знаю.
silent_1991
Эксперт С++
4958 / 3034 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
30.05.2010, 00:01     Матрицы в файлах #19
А вы описание алгоритма русским языком видели? Или пытаетесь понять его по чьему-то коду?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.05.2010, 00:04     Матрицы в файлах
Еще ссылки по теме:

fstream в файлах классов - C++
Решил поработать с классами и столкнулся со следующей проблемой: Сразу выложу код: TUchenik.h #pragma once class TUchenik { ...

О стандартных заголовочных файлах - C++
Не знаю в какую категорию отнести данное нубство, но все же: Часто использую некоторые возможности/функции для которых не делал...

Действия со строками в файлах - C++
В проге надо: считывать строки с файла, копируя в другой файл не пустые и строки без директив препроцесора (тоесть не те в которых 1й...

Объявление типов в h.-файлах - C++
Нужно объвить несколько переменных нестандартного типа (этот тип объявлен в библиотеке DirectX), компилятор ругается! Получается только с...

Ошибка в двух файлах - C++
Доброго времени суток Возникла довольно-таки странная проблема: Создаю консольное приложение, и в нем 2 файла (main.cpp и...


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

Или воспользуйтесь поиском по форуму:
Bloodykeeper
This party getting crazy!
78 / 74 / 1
Регистрация: 22.09.2009
Сообщений: 427
30.05.2010, 00:04  [ТС]     Матрицы в файлах #20
Не-а. Не видел. Я только вышку закончил делать, голова кругом, так что ни читать, ни что либо ещё я не пытался.... Можно ссылочку, если не трудно? Надо решить всё таки эту задачу)) Она ведь последняя за будущие 3 года. что мне задал препод)) Дальше по книжке буду учится. Курс заканчивается программирования. Хотя какой тут курс - конспект 20летней давности начитали, и разбирайтесь 6 месяцев.
Yandex
Объявления
30.05.2010, 00:04     Матрицы в файлах
Ответ Создать тему
Опции темы

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