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

Для матрицы размером NxM вывести на экран все седловые точки. - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Несколько new [] подряд http://www.cyberforum.ru/cpp-beginners/thread401715.html
Доброго времени суток!!! Вообщем есть такой кусок кода: if (fn!=NULL) { memcpy(buf, fn, sizeof(buf)); NormalizeFileName(buf); f = fopen(buf, "r"); d = new int; Pixels =...
C++ В каждой строке матрицы элемент, лежащий на главной диагонали заменить суммой ранее расположенных Обработка двумерных массивов. Элементы исходной матрицы выводятся из текстового файла.Результаты выводить на экран и в результатирующий текстовый файл.Матрицу выводить до и после преобразований. ... http://www.cyberforum.ru/cpp-beginners/thread401710.html
Считать текст из файла и вывести на экран все слова текста, начинающиеся с гласной буквы C++
Напиcать программу, которая считывает текст из файла и выводит на экран все слова текста, начинающиеся с гласной буквы, меняя ее на прописную букву. Добавлено через 7 минут #include <iostream.h> ...
C++ передать массив в функцию по значению
Подскажите,пожалуйста. Нужно с клавиатуры ввести число строк-столбцов ( т е они меняются в зависимости от условия) и передать массив в функцию. Сам массив не меняется в функции. Как его объявить в...
C++ Считывание и запись в файл http://www.cyberforum.ru/cpp-beginners/thread401689.html
Доброго времен суток всем экпспертам в области С++ Имеется задания нужно записать числа(псевдослучайные) в текстовый файл "vvod" и отрицательные числа заменить на ноль и вывести в следующий файл...
C++ подскажите как правильно записать Суть в чем, нужно текст последовательно циклически сдвинуть на m / 2 позиций, и построить новые m / 2 − 1 строк. Например в С++ это просто реализовать через append: for (int i=1; i<10; i++){ ... подробнее

Показать сообщение отдельно
alkagolik
Заблокирован
11.12.2011, 05:03
смотрю так и приутих энтузиазм. Жаль. Функции find_min, find_max далеки от совершенства, можно доработать
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
140
141
142
143
144
145
146
147
148
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int *create ( size_t num, size_t size )
{
    int *t;
    if ( ( t = malloc(num * size) ) == NULL )
        exit ( EXIT_FAILURE );
    else
        return t;
}
 
void print_matrix ( int **matr, size_t row, size_t coll )
{
    for ( int i = 0; i < row; ++i )
    {
        for ( int j = 0; j < coll; ++j )
            printf( "%2i ", matr[ i ][ j ] );
        puts("");
    }
}
 
void init_matrix ( int **matr, size_t row, size_t coll )
{
    for ( int i = 0; i < row; ++i )
        for ( int j = 0; j < coll; ++j )
            matr[ i ][ j ] = j - i;
}
 
int find_min ( int **arr, size_t i, size_t j, size_t row, size_t coll, _Bool flag )
//flag = 1 - ищем СТРОГИЙ минимум строки, иначе столбца
{
    int min = arr[ i ][ j ];
    int tmp, iter = 0;
    if ( flag )
    {
        while ( iter < coll ){
            if ( arr[ i ][ iter ] <= min ){
                min = arr[ i ][ iter ];
                tmp = iter;
            }
            ++iter;
        }
        iter = 0;
        while ( iter < coll ){
            if ( arr[ i ][ iter ] == min && iter != tmp )
                return -1;
            ++iter;
        }
    }
    else
    {
        while ( iter < row ){
            if ( arr[ iter ][ j ] <= min ){
                min = arr[ iter ][ j ];
                tmp = iter;
            }
            ++iter;
        }
        iter = 0;
        while ( iter < row ){
            if ( arr[ iter ][ j ] == min && iter != tmp )
                return -1;
            ++iter;
        }
    }
    return tmp;
}
 
int find_max ( int **arr, size_t i, size_t j, size_t row, size_t coll, _Bool flag )
//flag = 1 - ищем СТРОГИЙ максимум строки, иначе столбца
{
    int max = arr[ i ][ j ];
    int tmp, iter = 0;
    if ( flag )
    {
        while ( iter < coll ){
            if ( arr[ i ][ iter ] >= max ){
                max = arr[ i ][ iter ];
                tmp = iter;
            }
            ++iter;
        }
        iter = 0;
        while ( iter < coll ){
            if ( arr[ i ][ iter ] == max && iter != tmp )
                return -1;
            ++iter;
        }
    }
    else
    {
        while ( iter < row ){
            if ( arr[ iter ][ j ] >= max ){
                max = arr[ iter ][ j ];
                tmp = iter;
            }
            ++iter;
        }
        iter = 0;
        while ( iter < row ){
            if ( arr[ iter ][ j ] == max && iter != tmp )
                return -1;
            ++iter;
        }
    }
    return tmp;
}
 
void find_num_points ( int **matr, size_t row, size_t coll )
{
    int min, max;
    int i, j;
 
    for ( i = 0; i < row; ++i )
    {
        if( ( min = find_min(matr, i, 0, row, coll, 1) ) >= 0 )
            if ( ( max =  find_max(matr, 0, min, row, coll, 0) ) >= 0 )
                if ( max == i )
                    printf ("строка %i, столбец %i число = %2i\n", i, min,  matr[ i ][ min ] );
 
        if( ( max = find_max(matr, i, 0, row, coll, 1) ) >= 0 )
            if ( ( min =  find_min(matr, 0, max, row, coll, 0) ) >= 0 )
                if ( min == i )
                    printf ("строка %i, столбец %i число = %2i\n", i, min,  matr[ i ][ min ] );
    }
}
 
int main ( void )
{
    size_t size = 10;
    int **matrix;
 
    matrix = (int **) create( size, sizeof(int*) );
    for (int i = 0; i < size; ++i)
        matrix[ i ] = (int *)create( size, sizeof(int) );
 
    init_matrix( matrix, size, size );
    print_matrix( matrix, size, size );
    find_num_points( matrix, size, size );
 
    for ( int i = 0; i < size; ++i )
        free( matrix[ i ] );
    free( matrix );
 
    return EXIT_SUCCESS;
}
пример
Код
 0  1  2  3  4  5  6  7  8  9 
-1  0  1  2  3  4  5  6  7  8 
-2 -1  0  1  2  3  4  5  6  7 
-3 -2 -1  0  1  2  3  4  5  6 
-4 -3 -2 -1  0  1  2  3  4  5 
-5 -4 -3 -2 -1  0  1  2  3  4 
-6 -5 -4 -3 -2 -1  0  1  2  3 
-7 -6 -5 -4 -3 -2 -1  0  1  2 
-8 -7 -6 -5 -4 -3 -2 -1  0  1 
-9 -8 -7 -6 -5 -4 -3 -2 -1  0 
строка 0, столбец 0 число =  0
строка 9, столбец 9 число =  0
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru