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

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

Войти
Регистрация
Восстановить пароль
 
piople1994
0 / 0 / 0
Регистрация: 12.04.2013
Сообщений: 9
#1

Сформировать массив из номеров строк матрицы A не содержащих нулевых элементов - C++

01.07.2015, 21:40. Просмотров 242. Ответов 3
Метки нет (Все метки)

привет всем) Помогите пожалуйста решить задачу!
Дана матрица A[MxN], записанная в бинарный файл в виде: сначала записаны M и N, а затем матрица A. Сформировать новый массив из номеров строк матрицы A, не содержащих нулевых элементов, и дописать его в этот же файл.
Содержимое файла вывести на экран. Создать функции для записи данных в файл и вывода содержимого файла на экран.
Заранее спасибо) Всем мир)
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.07.2015, 21:40     Сформировать массив из номеров строк матрицы A не содержащих нулевых элементов
Посмотрите здесь:

C++ Создать массив из номеров нулевых элементов исходного массива
Сформировать из столбцов матрицы В, не содержащих равных элементов, матрицу С C++
C++ Сформировать одномерный массив из максимальных элементов строк матрицы
Сформировать одномерный массив из номеров первых отрицательных элементов каждой строки матрицы C++
C++ Сформировать одномерный массив, содержащий количество нулевых элементов каждой строки матрицы
Сформировать массив К из номеров столбцов матрицы, в которых есть хотя бы один ноль C++
Сформировать одномерный массив из наименьших элементов строк матрицы C++
Сформировать массив, каждый элемент которого является суммой отрицательных элементов строк матрицы C++
Сформировать одномерный массив, состоящий из произведений отрицательных элементов четных строк матрицы C++
Сформировать одномерный массив как сумму отрицательных элементов строк матрицы C++
C++ Сформировать массив, элементами которого являются суммы элементов соответствующих строк матрицы
C++ Для матрицы А[4][4], состоящей из не нулевых элементов, сформировать массив В[4] из количеств перемен знака в

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
FraidZZ
Модератор
 Аватар для FraidZZ
3892 / 1518 / 229
Регистрация: 06.01.2013
Сообщений: 4,044
Завершенные тесты: 1
01.07.2015, 21:46     Сформировать массив из номеров строк матрицы A не содержащих нулевых элементов #2
Цитата Сообщение от piople1994 Посмотреть сообщение
записанная в бинарный файл в виде: сначала записаны M и N
Какой тип? char / short / int / long / long long ?
piople1994
0 / 0 / 0
Регистрация: 12.04.2013
Сообщений: 9
01.07.2015, 22:46  [ТС]     Сформировать массив из номеров строк матрицы A не содержащих нулевых элементов #3
Цитата Сообщение от FraidZZ Посмотреть сообщение
Какой тип? char / short / int / long / long long ?
int
FraidZZ
Модератор
 Аватар для FraidZZ
3892 / 1518 / 229
Регистрация: 06.01.2013
Сообщений: 4,044
Завершенные тесты: 1
01.07.2015, 22:56     Сформировать массив из номеров строк матрицы A не содержащих нулевых элементов #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
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
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
 
class matrix {
public:
    int M, N;
    int **data;
    
    void swap(matrix& ref) {
        std::swap(M, ref.M);
        std::swap(N, ref.N);
        std::swap(data, ref.data);
    }
 
    matrix( ) : M(0), N(0) { }
    matrix(std::istream& inp) { read(inp); }
    matrix(const matrix& ref) : M(ref.M), N(ref.N) {
        data = new int* [M];
        for (int i = 0; i < M; ++i){
            data[i] = new int[N];
            for (int j = 0; j < N; ++j)
                data[i][j] = ref.data[i][j];
        }
    }
    ~matrix( ) {
        if (!M || !N) return;
        for (int i = 0; i < M; ++i)
            delete[] data[i];
        delete[] data;
    }
    matrix& operator = (const matrix& ref){
        if (&ref == this) return *this;
        
        matrix tmp(ref);
        tmp.swap(*this);
        return *this;
    }
    
    void read(std::istream& in) {
        in.read(reinterpret_cast<char *>(&M), sizeof(int));
        in.read(reinterpret_cast<char *>(&N), sizeof(int));
        
        data = new int* [M];
        for (int i = 0; i < M; ++i){
            data[i] = new int[N];
            for (int j = 0; j < N; ++j)
                in.read(reinterpret_cast<char *>(data[i] + j), sizeof(int));
        }
    }
};
 
class push_to_file {
    std::ostream* ofs;
public:
    push_to_file(std::ofstream& ofs): ofs(&ofs) { }
    void operator ( ) (int i) { 
        i += 1;
        ofs->write(reinterpret_cast<char *>(&i), sizeof(int));
    }
};
 
void print_file(std::istream& in) {
    int buf;
    while (true) {
        in.read(reinterpret_cast<char *>(&buf), sizeof(int));
        if (!in) break;
        std::cout << buf << " ";
    }
}
 
int main ( ) {
    char file[] = "data.bin";   
    std::ifstream data(file, std::ios::binary);
    
    matrix m(data);
    std::vector<int> non_zero;
    for (int i = 0; i < m.M; ++i)
        if (std::count(m.data[i], m.data[i] + m.N, 0) == 0)
            non_zero.push_back(i);
    data.close();
    
    std::ofstream data2(file, std::ios::binary | std::ios::app);
    std::for_each(non_zero.begin(), non_zero.end(), push_to_file(data2));
    data2.close();
    
    data.open(file, std::ios::binary);
    print_file(data);
    
    return 0;
}
Тестовый файл создавался таким кодом:
C++
1
2
3
4
5
int my[] = {5, 3, 1, 2, 3, 4, 0, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15 };
std::ofstream d(file, std::ios::binary | std::ios::trunc);
for (int i = 0; i < 17; ++i)
    d.write(reinterpret_cast<char *>(my + i), sizeof(int));
d.close();
Yandex
Объявления
01.07.2015, 22:56     Сформировать массив из номеров строк матрицы A не содержащих нулевых элементов
Ответ Создать тему
Опции темы

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