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

Сравнение двумерных матриц - разобрать код - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Определить загруженность ядер процессора http://www.cyberforum.ru/cpp-beginners/thread1244562.html
Помогите определить загруженность ядер процессора (может как-нибудь получить эти данные из системы).
C++ Стабильный код и xor Доброго времени! Есть такой код:double azim = degrees( atan( s/c )); Проблема в том что c может быть нулём, поэтому вышележащий код быстро превратился в: const double eps = 1e-10; double azim; if( fabs(c) < eps ) { if(( s < 0.0 )^^( c < 0.0 )) http://www.cyberforum.ru/cpp-beginners/thread1244551.html
C++ Нужен справочник по заголовкам и их функциям
Всем привет. Недавно решил научиться программировать на с++ , ранее писал небольшие плагины для игр на pawn. Вроде бы разобрался с синтаксисом и основными моментами, но как написать реальную программу(например, лаунчер) без понятия. У заголовков, как и у функций, названия такие, будто по клаве ударили. Описание на мсдн такое, что поймет только Страуструп. Есть ли какой-то справочник по заголовкам...
C++ Путаница с sftream и операторами << и >>
Значит так, иду спокойно по книжке по темам "Открытие и закрытие текстовых файлов", а также "Чтение и запись текстовых файлов" и тут я немного запутался. Для того чтобы считать информацию из файла, мы используем ifstream, но я ведь привык, что оператор >> используется для ввода информации. То же самое и с помещением информации через объект класса ostream, и опять же я привык, что <<...
C++ Работа с классами и пересечение их между собой (задача о городах и поездах) http://www.cyberforum.ru/cpp-beginners/thread1244503.html
Здравствуйте. Тут попалась в руки задачка, вкратце суть: Есть города, в каждом городе есть станция, на станции пассажиры, у пасажира есть цель поездки(N - ый город). Между городами ездят поезда, в поезде N вагонов, в вагоне N мест. Написать грубо говоря всю эту систему (без графики), поезд прибыл-погрузился-отбыл, ну и естественно не телепортировался, а где-то там медленно двигается по...
C++ Чем отличаются по функционалу Kbhit() и _kbhit() Всем привет. Утолите нубское любопытство. Везде (на msdn, как минимум) пишут пользовать _kbhit() и что при этом происходит. Все просто и понятно. Про kbhit() пишут только, что устарел еще во времена vs2005. И все. А функционально чем они отличаются? подробнее

Показать сообщение отдельно
gru74ik
Модератор
Эксперт CЭксперт С++
3924 / 1682 / 189
Регистрация: 20.02.2013
Сообщений: 4,741
Записей в блоге: 21
20.08.2014, 14:36     Сравнение двумерных матриц - разобрать код

Не по теме:

Цитата Сообщение от SatanaXIII Посмотреть сообщение
gru74ik, а так круто, вам бы методички писать. ))
На самом деле мой труд тут достаточно скромен - оформил код в читаемом виде и написал несколько комментариев. Где чего не знал - тупо гуглил и передирал текст с сайтов типа такого и вот такого. За подсказки, поправки и уточнения покорнейше благодарю!



Добавлено через 2 часа 19 минут
Объяснения по 1-й, 2-й и 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
//===================================  4  ======================================
// Определение функции find_max_min(). Назначение функции - искать минимальные и
// максимальные значения в матрице. Функция принимает три аргумента - 
// указатель на массив указателей на тип int и две целочисленные переменные,
// задающие размерность матрицы. Возвращаемое значение - указатель на тип int.
int* find_max_min(int** matrix, int n, int m)
{
// Если память под матрицу не выделена или если матрица не заполнена значениями:
    if ((matrix==NULL)||(n==0)||(m==0))
    {   // Вывести на экран сообщение "сначала создайте матрицу":
        printf("First_create_a_matrix");
            
// В завсисмости от реализации компилятора вернуть 0, либо вернуть "мусор":            
        return NULL;    // Плохой стиль программирования! Лучше так не делать!
    }
    
    else    // иначе
    {
        // Присвоить переменной max значение, хранящееся в первом элементе
        // массива matrix:
        int max = matrix[0][0];
        
        // Создать две целочисленные перменные для максимальных значений
        // и пока что присвоить им нулевые значения:
        int max_k_n = 0, max_k_m = 0;
        
        // Присвоить переменной min значение, хранящееся в первом элементе
        // массива matrix:
        int min = matrix[0][0];
        
        // Создать две целочисленные перменные для минимальных значений
        // и пока что присвоить им нулевые значения:
        int min_k_n = 0, min_k_m = 0;
        
        // ЦИкл пошагово проверяет все элементы матрицы:
        for (int i=0; i<n; i++)
            for (int j=0; j<m; j++)
                
// Если значение, хранящееся в текущем элементе массива больше, чем то, которое
// на данный момент хранится в переменной max, то
                if (matrix[i][j]>max) 
                {
                    max = matrix[i][j]; // присвоить переменной max это значение
                    
// "Запомнить" в какой ячейке массива найдено максимальное значение (в отдельные
// переменные сохраняются индексы ячейки):                 
                    max_k_n = i;
                    max_k_m = j;
                }
 
 // Если значение, хранящееся в текущем элементе массива меньше, чем то, которое
// на данный момент хранится в переменной min, то               
                if (matrix[i][j]<min)
                {
                    min = matrix[i][j]; // присвоить переменной min это значение
                    
// "Запомнить" в какой ячейке массива найдено миниимальное значение (в отдельные
// переменные сохраняются индексы ячейки): 
                    min_k_n = i;
                    min_k_m = j;
                }
            }
        }
// Создание массива int return_matrix[4]. Выделение памяти для 4 интов:
        int *return_matrix = (int*)malloc(sizeof(int)*4);
        
// Инициализация элементов массива значениями:
        return_matrix[0] = max_k_n;
        return_matrix[1] = max_k_m;
        return_matrix[2] = min_k_n;
        return_matrix[3] = min_k_m;
 
// Вернуть в вызывающую функцию указатель на массив return_matrix:    
        return return_matrix;
    }
}
P.S. Что такое NULL и почему его не стоит использовать в современных C++ программах.

P.P.S. Поморока с параметром функции в виде указателя на указатель на тип int - это попросту трик (хитрость), с помощью которого функции в качестве параметра можно передать двумерный массив (матрицу). То же самое с возвращаемым значением (указатель на int). В языке программирования C++ нельзя передать в функцию массив или вернуть массив из функции, зато можно передать указатель (ну или, при надобности - вернуть в качестве возращаемого значения указатель).
Так что если массив одномерный, то работаете с указателем первого уровня (с одной звёздочкой который).
Если же массив двумерный (матрица), то работаете с указателем второго уровня (с двумя звёздочками).
 
Текущее время: 05:38. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru