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

Заменить все локальные минимумы данной матрицы на нули - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.70
Ra1ko
1 / 1 / 0
Регистрация: 21.09.2011
Сообщений: 16
25.11.2011, 00:15     Заменить все локальные минимумы данной матрицы на нули #1
Matrix74. Дана матрица размера M × N. Элемент матрицы называется ее ло-кальным минимумом, если он меньше всех окружающих его элементов. Заменить все локальные минимумы данной матрицы на нули. При реше-нии допускается использовать вспомогательную матрицу.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
25.11.2011, 00:15     Заменить все локальные минимумы данной матрицы на нули
Посмотрите здесь:

Локальные минимумы матрицы C++
C++ Заменить все локальные минимумы данной матрицы M × N на нули.
Матрицы: все локальные минимумы заменить на 0, матрицу читать с файла C++
Заменить все локальные максимумы на 0 C++
Найти все локальные минимумы и максимумы в заданном массиве C++
Заменить все локальные минимумы и максимумы данной матрицы на 0 C++
Найти все локальные минимумы массива A[1…20] C++
C++ Возвести в квадрат все локальные минимумы заданного массива

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
KeyGen
 Аватар для KeyGen
333 / 289 / 6
Регистрация: 07.08.2011
Сообщений: 789
Записей в блоге: 1
25.11.2011, 00:47     Заменить все локальные минимумы данной матрицы на нули #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
#include <iostream>
 
using namespace std;
 
int main()
{
    setlocale (LC_ALL, "RUS");
    
    cout << "Enter M: ";
    int m;
    cin >> m;
    
    cout << "Enter N: ";
    int n;
    cin >> n;
    
    int **p;
    
    *p = new int[m];
    
    for(int i=0; i<m; i++) p[i] = new int[n];
    
    int temp=1;
    for(int i=0; i<m; i++)                 //Устанавлисваем значения в массив
            for(int j=0; j<n; j++,temp++){
           if(temp==10)
            temp=1;
           p[i][j]=temp;
            }
             
    for(int i=0; i<m; i++){                //Вывод массива на экран
            for(int j=0; j<n; j++)
            cout << p[i][j];
            cout << endl;     
            }
            
    temp=99999999;
    for(int i=0; i<m; i++){                 //Ищем наименьшее значение
            for(int j=0; j<n; j++)
            if(temp>p[i][j])
            temp=p[i][j];
            }
            
    for(int i=0; i<m; i++){                 //Устанавлисваем 0 место минимума
            for(int j=0; j<n; j++)
            if(p[i][j]==temp)
            p[i][j]=0;
            }
            
            cout << endl;
 
    for(int i=0; i<m; i++){                //Вывод массива на экран
            for(int j=0; j<n; j++)
            cout << p[i][j];
            cout << endl;     
            }
            
            
            system("pause");
            return 0;
            }
Миниатюры
Заменить все локальные минимумы данной матрицы на нули  
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
25.11.2011, 02:14     Заменить все локальные минимумы данной матрицы на нули #3
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
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
const size_t N = 10, M = 11;
 
void mem_error(int **value)
{
    if (!value)
        exit( -1 );
}
 
int **create()
{
    int **arr;
 
    arr = (int**)malloc(N * sizeof(int));
    mem_error(arr);
 
    for (int i = 0; i < N; ++i)
    {
        arr[ i ] = (int*) malloc(M * sizeof (int));
        mem_error(&arr[ i ]);
    }
    return arr;
}
 
_Bool is_local_min(int **arr, int row, int coll)
{
    int min = arr[ row ][ coll ];
    int i_min = ( row ) ? row - 1 : row;
    int i_max = ( row == (N - 1) ) ? row : row + 1;
    int j_min = ( coll ) ? coll - 1 : coll;
    int j_max = ( coll == (M - 1) ) ? coll : coll + 1;
    int j = j_min;
 
    while ( i_min <= i_max )
    {
        j = j_min;
 
        while ( j <= j_max )
        {
            if (arr[ i_min ] [ j ] < min )
                return 0;
            ++j;
        }
        ++i_min;
    }
    return 1;
}
 
int main()
{
    int **matrix;
    srand(time(0));
 
    matrix = create();
    /***печать исходной матрицы***/
    for (int i = 0; i < N; ++i)
    {
        puts("");
        for (int j = 0; j < M; ++j)
        {
            matrix[ i ][ j ] = rand() % (N * M) + 1;
            printf("%4d", matrix[ i ][ j ]);
        }
    }
    /***поиск и замена нулем локального минимума***/
    for (int i = 0; i < N; ++i)
        for (int j = 0; j < M; ++j)
            if ( is_local_min( matrix, i, j ) )
                matrix[ i ][ j ] = 0;
 
    /***печать преобразованной матрицы***/
    puts("");
    for (int i = 0; i < N; ++i)
    {
        puts("");
        for (int j = 0; j < M; ++j)
            printf("%4d", matrix[ i ][ j ]);
    }
    puts("");
 
    for (int i = 0; i < N; ++i)
        free(matrix[ i ]);
    free(matrix);
 
    return 0;
}
Добавлено через 26 минут
даже с учетом того что локальный минимум должен быть строго меньше окружающих его элементов, то функция проверки немного меняется и будет такой
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
_Bool is_local_min(int **arr, int row, int coll)
{
    int min = arr[ row ][ coll ];
    int i_min = ( row ) ? row - 1 : row;
    int i_max = ( row == (N - 1) ) ? row : row + 1;
    int j_min = ( coll ) ? coll - 1 : coll;
    int j_max = ( coll == (M - 1) ) ? coll : coll + 1;
    int j = j_min;
 
    while ( i_min <= i_max )
    {
        j = j_min;
 
        while ( j <= j_max )
        {
            if (arr[ i_min ] [ j ] < min && ( (i_min == row) ? (j == coll) ? 0 : 1 : 1))
                return 0;
            ++j;
        }
        ++i_min;
    }
    return 1;
}
Yandex
Объявления
25.11.2011, 02:14     Заменить все локальные минимумы данной матрицы на нули
Ответ Создать тему
Опции темы

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