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

Массив - разбиение, сравнение, сохранение - C++

Восстановить пароль Регистрация
 
Mari-mari
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 36
22.04.2012, 20:08     Массив - разбиение, сравнение, сохранение #1
Привет всем, ребят помогите написать программу, дан массив m[100][100], заполняющейся случайными элементами, необходимо разбить его на 4 равных части, в каждой части сравнить каждый элемент с его 8 соседями, ту часть в которой таких элементов больше всего скопировать в новый массив, распечатать его и сохранить в текстовый файл.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.04.2012, 20:08     Массив - разбиение, сравнение, сохранение
Посмотрите здесь:

C++ Массив стуктур - загрузка/сохранение в файл
разбиение на подмножества C++
Массив структур, сохранение начала каждой из структур C++
сохранение строки массива в отдельный массив C++
C++ QR -разбиение
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
22.04.2012, 20:15     Массив - разбиение, сравнение, сохранение #2
Не понял. Разбили мы массив на 4 части, дальше сравнили с соедями. Каких элементов должно быть больше всего?
Mari-mari
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 36
22.04.2012, 20:22  [ТС]     Массив - разбиение, сравнение, сохранение #3
Цитата Сообщение от MrGluck Посмотреть сообщение
Не понял. Разбили мы массив на 4 части, дальше сравнили с соедями. Каких элементов должно быть больше всего?
Ой, не так написала, мы сравниваем каждый элемент с 8 соседями на предмет максимума, т.е. если он больше, то его нужно как бы запомнить, и в какой части таких элементов больше, то ту часть скопировать в новый массив(чтобы потом к этому массиву можно было обращаться) ну соответственно распечатать его и сохранить в текстовый файл.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
22.04.2012, 20:34     Массив - разбиение, сравнение, сохранение #4
Цитата Сообщение от Mari-mari Посмотреть сообщение
Ой, не так написала, мы сравниваем каждый элемент с 8 соседями на предмет максимума, т.е. если он больше, то его нужно как бы запомнить, и в какой части таких элементов больше, то ту часть скопировать в новый массив(чтобы потом к этому массиву можно было обращаться) ну соответственно распечатать его и сохранить в текстовый файл.
Ок, а если у него не 8 соседей, а например только 5 или 4?
Mari-mari
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 36
22.04.2012, 20:42  [ТС]     Массив - разбиение, сравнение, сохранение #5
Цитата Сообщение от MrGluck Посмотреть сообщение
Ок, а если у него не 8 соседей, а например только 5 или 4?
Ну да, краевыми элементами нужно принебречь, ну вот я схемотично изобразила:
2 3 4 5 6 1 2 4 5 6 1 2 3 4 5 6 6 1 2 8 0 1 0 3 4
2 3 4 5 6 1 2 4 5 6 1 2 3 4 5 6 6 1 2 8 0 1 0 3 4
2 3 4 5 6 1 2 4 5 6 1 2 3 4 5 6 6 1 2 8 0 1 0 3 4
2 3 4 5 6 1 2 4 5 6 1 2 3 4 5 6 6 1 2 8 0 1 0 3 4
2 3 4 5 6 1 2 4 5 6 1 2 3 4 5 6 6 1 2 8 0 1 0 3 4
2 3 4 5 6 1 2 4 5 6 1 2 3 4 5 6 6 1 2 8 0 1 0 3 4
2 3 4 5 6 1 2 4 5 6 1 2 3 4 5 6 6 1 2 8 0 1 0 3 4
2 3 4 5 6 1 2 4 5 6 1 2 3 4 5 6 6 1 2 8 0 1 0 3 4
2 3 4 5 6 1 2 4 5 6 1 2 3 4 5 6 6 1 2 8 0 1 0 3 4
2 3 4 5 6 1 2 4 5 6 1 2 3 4 5 6 6 1 2 8 0 1 0 3 4
2 3 4 5 6 1 2 4 5 6 1 2 3 4 5 6 6 1 2 8 0 1 0 3 4
В сравнении участвуют элементы только те, которые имеют 8 соседей.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
22.04.2012, 21:16     Массив - разбиение, сравнение, сохранение #6
Вот, накатал. То что закомментировано можешь убрать, чтобы убедиться, что все верно работает
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
#include <iostream>
#include <ctime>
#include <fstream>
 
int main()
{
    const int M = 10; // чтобы было видно, как работает, поменяй потом на 100
    int arr[M][M], part[4][M/2][M/2], max[4]={0};
    srand( time(NULL) );
    for (int i = 0; i < M; i++)
    {
        for (int j = 0; j < M; j++)
        {
            arr[i][j] = rand()%10;
            //std::cout<< arr[i][j]<< " ";
        }
        //std::cout<< std::endl;
    }
    //std::cout<< std::endl;
    for (int i = 0; i < M/2; i++)
        for (int j = 0; j < M/2; j++)
        {
            part[0][i][j] = arr[i][j];
            part[1][i][j] = arr[i + M/2][j];
            part[2][i][j] = arr[i][j + M/2];
            part[3][i][j] = arr[i + M/2][j + M/2];
        }
    for (int i = 0; i < 4; i++)
        for (int j = 1; j < M/2 - 1; j++)
            for (int k = 1; k < M/2 - 1; k++)
                if (part[i][j][k] >= part[i][j-1][k-1] && part[i][j][k] >= part[i][j][k-1] &&
                    part[i][j][k] >= part[i][j+1][k-1] && part[i][j][k] >= part[i][j-1][k] &&
                    part[i][j][k] >= part[i][j+1][k] && part[i][j][k] >= part[i][j-1][k+1] &&
                    part[i][j][k] >= part[i][j][k+1] && part[i][j][k] >= part[i][j+1][k+1])
                    max[i]++;
    int maxIndex = 0, m = 0;
    for (int i = 0; i < 4; i++)
        if (max[i] > m) maxIndex = i;
    //std::cout<< max[0]<< " "<< max[1]<< " "<< max[2]<< " "<< max[3]<< std::endl<< std::endl;
    std::ofstream o("result.txt");
    if (o.bad())
    {
        std::cerr<< "Error";
        return 1;
    }
    for (int j = 0; j < M/2; j++)
    {
        for (int k = 0; k < M/2; k++)
        {
            std::cout<< part[maxIndex][j][k]<< " ";
            o<< part[maxIndex][j][k]<< " ";
        }
        std::cout<< std::endl;
        o<< std::endl;
    }
    o.close();
    return 0;
}
Mari-mari
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 36
22.04.2012, 21:41  [ТС]     Массив - разбиение, сравнение, сохранение #7
Цитата Сообщение от MrGluck Посмотреть сообщение
Вот, накатал. То что закомментировано можешь убрать, чтобы убедиться, что все верно работает
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
#include <iostream>
#include <ctime>
#include <fstream>
 
int main()
{
    const int M = 10; // чтобы было видно, как работает, поменяй потом на 100
    int arr[M][M], part[4][M/2][M/2], max[4]={0};
    srand( time(NULL) );
    for (int i = 0; i < M; i++)
    {
        for (int j = 0; j < M; j++)
        {
            arr[i][j] = rand()%10;
            //std::cout<< arr[i][j]<< " ";
        }
        //std::cout<< std::endl;
    }
    //std::cout<< std::endl;
    for (int i = 0; i < M/2; i++)
        for (int j = 0; j < M/2; j++)
        {
            part[0][i][j] = arr[i][j];
            part[1][i][j] = arr[i + M/2][j];
            part[2][i][j] = arr[i][j + M/2];
            part[3][i][j] = arr[i + M/2][j + M/2];
        }
    for (int i = 0; i < 4; i++)
        for (int j = 1; j < M/2 - 1; j++)
            for (int k = 1; k < M/2 - 1; k++)
                if (part[i][j][k] >= part[i][j-1][k-1] && part[i][j][k] >= part[i][j][k-1] &&
                    part[i][j][k] >= part[i][j+1][k-1] && part[i][j][k] >= part[i][j-1][k] &&
                    part[i][j][k] >= part[i][j+1][k] && part[i][j][k] >= part[i][j-1][k+1] &&
                    part[i][j][k] >= part[i][j][k+1] && part[i][j][k] >= part[i][j+1][k+1])
                    max[i]++;
    int maxIndex = 0, m = 0;
    for (int i = 0; i < 4; i++)
        if (max[i] > m) maxIndex = i;
    //std::cout<< max[0]<< " "<< max[1]<< " "<< max[2]<< " "<< max[3]<< std::endl<< std::endl;
    std::ofstream o("result.txt");
    if (o.bad())
    {
        std::cerr<< "Error";
        return 1;
    }
    for (int j = 0; j < M/2; j++)
    {
        for (int k = 0; k < M/2; k++)
        {
            std::cout<< part[maxIndex][j][k]<< " ";
            o<< part[maxIndex][j][k]<< " ";
        }
        std::cout<< std::endl;
        o<< std::endl;
    }
    o.close();
    return 0;
}
Спасибо огромнейшее я вот только не совсем поняла где результирующий массив? ну тоесть нужно ту часть, которая прошла по условию скопировать в новый массив...
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
22.04.2012, 21:55     Массив - разбиение, сравнение, сохранение #8
Цитата Сообщение от Mari-mari Посмотреть сообщение
Спасибо огромнейшее я вот только не совсем поняла где результирующий массив? ну тоесть нужно ту часть, которая прошла по условию скопировать в новый массив...
он находится в part[maxIndex].

Можете, в принципе, объявить массив B[M/2][M/2], прогнать
C++
1
2
3
for(int i = 0; i < M/2; i++)
    for(int j = 0; j < M/2; j++)
        B[i][j] = part[maxIndex][i][j];
Но оно вобще надо?
Mari-mari
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 36
22.04.2012, 21:58  [ТС]     Массив - разбиение, сравнение, сохранение #9
Цитата Сообщение от MrGluck Посмотреть сообщение
он находится в part[maxIndex].

Можете, в принципе, объявить массив B[M/2][M/2], прогнать
C++
1
2
3
for(int i = 0; i < M/2; i++)
    for(int j = 0; j < M/2; j++)
        B[i][j] = part[maxIndex][i][j];
Но оно вобще надо?
Да вроде нужно, куда это именно вставить?
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
22.04.2012, 22:01     Массив - разбиение, сравнение, сохранение #10
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
#include <iostream>
#include <ctime>
#include <fstream>
 
int main()
{
    const int M = 10; // ÷òîáû áûëî ГўГЁГ¤Г*Г®, ГЄГ*ГЄ Г°Г*áîòГ*ГҐГІ, ïîìåГ*ГїГ© ïîòîì Г*Г* 100
    int arr[M][M], part[4][M/2][M/2], max[4]={0}, B[M/2][M/2];
    srand( time(NULL) );
    for (int i = 0; i < M; i++)
    {
        for (int j = 0; j < M; j++)
        {
            arr[i][j] = rand()%10;
            //std::cout<< arr[i][j]<< " ";
        }
        //std::cout<< std::endl;
    }
    //std::cout<< std::endl;
    for (int i = 0; i < M/2; i++)
        for (int j = 0; j < M/2; j++)
        {
            part[0][i][j] = arr[i][j];
            part[1][i][j] = arr[i + M/2][j];
            part[2][i][j] = arr[i][j + M/2];
            part[3][i][j] = arr[i + M/2][j + M/2];
        }
    for (int i = 0; i < 4; i++)
        for (int j = 1; j < M/2 - 1; j++)
            for (int k = 1; k < M/2 - 1; k++)
                if (part[i][j][k] >= part[i][j-1][k-1] && part[i][j][k] >= part[i][j][k-1] &&
                    part[i][j][k] >= part[i][j+1][k-1] && part[i][j][k] >= part[i][j-1][k] &&
                    part[i][j][k] >= part[i][j+1][k] && part[i][j][k] >= part[i][j-1][k+1] &&
                    part[i][j][k] >= part[i][j][k+1] && part[i][j][k] >= part[i][j+1][k+1])
                    max[i]++;
    int maxIndex = 0, m = 0;
    for (int i = 0; i < 4; i++)
        if (max[i] > m) maxIndex = i;
    for(int i = 0; i < M/2; i++)
        for(int j = 0; j < M/2; j++)
            B[i][j] = part[maxIndex][i][j];
    std::ofstream o("result.txt");
    if (o.bad())
    {
        std::cerr<< "Error";
        return 1;
    }
    for (int j = 0; j < M/2; j++)
    {
        for (int k = 0; k < M/2; k++)
        {
            std::cout<< B[j][k]<< " ";
            o<< B[j][k]<< " ";
        }
        std::cout<< std::endl;
        o<< std::endl;
    }
    o.close();
    return 0;
}
Уж это, думаю вы могли бы сообразить. Вам же программирование проходить надо, не мне)
Mari-mari
0 / 0 / 0
Регистрация: 22.04.2012
Сообщений: 36
22.04.2012, 22:06  [ТС]     Массив - разбиение, сравнение, сохранение #11
Спасибо еще раз, хорошо что мир не без добрых людей Вот еще хотела спросить, не могли бы вы книгу посоветовать где про массивы хорошо написано? извините если я совсем наглею...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.04.2012, 22:09     Массив - разбиение, сравнение, сохранение
Еще ссылки по теме:

Массив(сумма, макс. число), ввод текста с клавиатуры и сохранение в *.txt C++
Двумерный массив, сравнение, поиск максимального, замена C++
C++ Сохранение строки в массив и удаление повторяющихся элементов массива

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

Или воспользуйтесь поиском по форуму:
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4920 / 2663 / 243
Регистрация: 29.11.2010
Сообщений: 7,416
22.04.2012, 22:09     Массив - разбиение, сравнение, сохранение #12
Цитата Сообщение от Mari-mari Посмотреть сообщение
Спасибо еще раз, хорошо что мир не без добрых людей Вот еще хотела спросить, не могли бы вы книгу посоветовать где про массивы хорошо написано? извините если я совсем наглею...
«Как программировать на С++» Х. Дейтел, П. Дейтел - книга №1 для новичков
также можно почитать
Программирование. Принципы и практика использования C++ Б. Страуструп
там все основы языка описаны в удобоваримой форме и с примерами
Yandex
Объявления
22.04.2012, 22:09     Массив - разбиение, сравнение, сохранение
Ответ Создать тему
Опции темы

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