Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Перегрузка функций http://www.cyberforum.ru/cpp-beginners/thread406439.html
Помогите пж с задачкой на С++: Определить функцию Search(), осуществляющую поиск в массиве максимального элемента. . Перегрузить функцию Search() для поиска n-ого максимального элемента.
C++ Работа с массивами Помогите плиз написать программу на С Задача: Задан двухмерный массив действительных чисел (квадратная матрица А размером NxN (6<=N<=10)), который содержит в себе действительные элементы. Входные... http://www.cyberforum.ru/cpp-beginners/thread406428.html
C++ Сравнение строк (с игнорированием множественных пробелов)
Помогите плиз написать функцию и саму программу на С Задание: Функция WordCmp(s1,s2) Назначение: сравнение строк (с игнорированием множественных пробелов).
C++ коротчайший путь
задается массив NxN нужно найти коротчайший путь от позиции 1х1 до NxN и обозначить путь символом # а все остальное символов - .коротчайший путь считается тот ,сумма чисел которых минимальна и...
C++ В массиве A=(a1, а2, ..., аn) удалить последнюю группу положительных элементов. http://www.cyberforum.ru/cpp-beginners/thread406405.html
В массиве A=(a1, а2, ..., аn) удалить последнюю группу положительных элементов. Группой называется подряд идущие элементы одного знака, число которых больше или равно 2.Создавайте темы с...
C++ Из класса в класс-шаблон Здравствуйте. Есть класс: class Bit_Indic { char indic; public: Bit_Indic (char _one, char _two, char _three, char _four, char _five, char _six, char _seven, char _eight) { ... подробнее

Показать сообщение отдельно
6blgJlo'KOgeP
0 / 0 / 0
Регистрация: 13.12.2011
Сообщений: 21
14.12.2011, 15:53  [ТС]
Пардон, я забыл сказать что у меня задание именно на чистом Си а не на плюсах
вот мой брутальный код, что скажите?
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
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
#include <malloc.h>
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
 
void* allocateMatrixMemory(unsigned int n,unsigned int m,unsigned int typeSize){
    unsigned char** bytes = (unsigned char**)malloc(sizeof(unsigned char*)*n);
    if(!bytes)
        return 0;
    for(unsigned int i = 0; i < n; i++){
        bytes[i] = (unsigned char*)malloc(typeSize*m);
        if(!bytes[i])
            return 0;
    }
    return bytes;
}
 
void freeMatrixMemory(void* matrix,unsigned int n){
    for(unsigned int i = 0; i < n; i++){
        unsigned char* data = ((unsigned char**)matrix)[i];
        free(data);
    }
    free(matrix);
}
 
void fillMatrixWithRandomNumbers(int** matrix,unsigned int n,unsigned int m,int first,int second){
 
    for(unsigned int i = 0; i<n; i++){
        for(unsigned int j = 0; j<m; j++){
            int r = rand()%(second - first) + first;
            matrix[i][j] = r;
        }
    }
}
 
int** getRandomMatrix(unsigned int n,unsigned int m,int start,int end){
    int** matrix = (int**)allocateMatrixMemory(n,m,sizeof(int));
    fillMatrixWithRandomNumbers(matrix,n,m,start,end);
    return matrix;
}
 
int getMaxLocalMatrixMinimum(int** matrix,unsigned int n,unsigned int m){
 
    int max = 0;
    for(unsigned int i = 1; i < n-1; i++){
        for(unsigned int j = 1; j < m-1; j++){
            if(matrix[i][j] <= max)
                continue;
            char check = (matrix[i][j] < matrix[i+1][j-1]) &&
                (matrix[i][j] < matrix[i-1][j-1]) &&
                (matrix[i][j] < matrix[i+1][j+1]) &&
                (matrix[i][j] < matrix[i][j-1]) &&
                (matrix[i][j] < matrix[i-1][j]) &&
                (matrix[i][j] < matrix[i+1][j]) &&
                (matrix[i][j] < matrix[i][j+1]) &&
                (matrix[i][j] < matrix[i-1][j+1]);
            if(check)
                max = matrix[i][j];
        }
    }
 
    if(matrix[0][0] > max){
        char check = matrix[0][0] < matrix[1][1] &&
                matrix[0][0] < matrix[0][1] &&
                matrix[0][0] < matrix[1][0];
        if(check)
            max = matrix[0][0];
    }
 
 
    if(matrix[n-1][m-1] > max){
        char check = matrix[n-1][m-1] < matrix[n-2][m-2] &&
                matrix[n-1][m-1] < matrix[n-1][m-2] &&
                matrix[n-1][m-1] < matrix[n-2][m-1];
        if(check)
            max = matrix[0][0];
    }
 
    if(matrix[0][m-1] > max){
        char check = matrix[0][m-1] < matrix[1][m-2] &&
                matrix[0][m-1] < matrix[0][m-2] &&
                matrix[0][m-1] < matrix[1][m-1];
        if(check)
            max = matrix[0][0];
    }
 
    if(matrix[n-1][0] > max){
        char check = matrix[n-1][0] < matrix[n-2][1] &&
                matrix[n-1][0] < matrix[n-1][1] &&
                matrix[n-1][0] < matrix[n-2][0];
        if(check)
            max = matrix[0][0];
    }
 
    for(unsigned int i = 1; i<m-1; i++){
        if(matrix[0][i] <= max)
            continue;
        char check = matrix[0][i] < matrix[0][i-1] &&
        matrix[0][i] < matrix[1][i-1] &&
        matrix[0][i] < matrix[0][i+1] &&
        matrix[0][i] < matrix[1][i+1] &&
        matrix[0][i] < matrix[1][i];
        if(check)
            max = matrix[0][i];
    }
 
//    for(unsigned int i = 1; i<n-1; i++){
//        if(matrix[0][i] <= max)
//            continue;
//       char check = matrix[i][0] < matrix[i-1][0] &&
//        matrix[i][0] < matrix[i-1][1] &&
//        matrix[i][0] < matrix[i+1][0] &&
//        matrix[i][0] < matrix[i+1][1] &&
//        matrix[i][0] < matrix[i][1];
//        if(check)
//            max = matrix[i][0];
//    }
 
    return max;
}
 
void printMatrix( int** matrix,unsigned n,unsigned int m){
    for(unsigned int i = 0; i<n; i++){
        for(unsigned int j = 0; j<m; j++)
            printf("%d ",matrix[i][j]);
        puts("");
    }
}
 
int main(){
 
    srand(time(0));
    const int n = 5;
    const int m = 5;
    int** matrix = getRandomMatrix(n,m,10,100);
    printMatrix(matrix,n,m);
    freeMatrixMemory(matrix,n);
    printf("\n%d",getMaxLocalMatrixMinimum(matrix,n,m));
    return 0;
0
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru