Форум программистов, компьютерный форум 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
Модератор
 Аватар для gru74ik
3114 / 1340 / 166
Регистрация: 20.02.2013
Сообщений: 3,805
Записей в блоге: 17
20.08.2014, 10:32     Сравнение двумерных матриц - разобрать код
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
//===================================  1  =====================================
// Определение функции create_matrix(). Функция принимает три аргумента
// целочисленного типа и возвращает указатель на указатель на тип int.
// Переменные int n и int m задают размерность матрицы.
int** create_matrix(int n, int m, int tip)
{
    int**variable = NULL;   // создаётся указатель на указатель на int с именем
                            // variable и ему присваивается значение NULL
                            
// Функция malloc() возвращает указатель на первый байт области памяти размером
// size, которая была выделена из динамически распределяемой области памяти.
// Для определения размера используется sizeof - унарный оператор, возвращающий
// длину в байтах переменной или типа, помещенных в скобки (результат приводится
// к типу указатель на указатель на int). Как написал выше Algoritmer,
// двумерный массив - это одномерный массив одномерных массивов. Если
// рассматривать двумерный массив как таблицу, то можно представить, что сначала
// мы создаем массив строк (рядов) - у нас количество строк это значение переменной
// int n, а потом создаем в цикле массив ячеек (колонок) - за количество колонок 
// у нас отвечает переменная int m:                          
    variable = (int**)malloc(sizeof(int*)*n); // для variable выделяется память
 
// Выделение памяти для всех элементов матрицы пошагово - элемент за элементом
// при помощи цикла for, функции malloc() и унарного оператора sizeof:
    for (int i=0; i<n; i++)
        variable[i]=(int*)malloc(sizeof(int)*m);
        
// Вывод в поток (чаще всего - на экран монитора) строкового литерала
// "Matrix_successfully_created" при помощи функции printf(); в конце строкового
// литерала имеется управляющая последовательность \n - эти два символа
// трактуются как один символ и обозначают перевод строки:
    printf("Matrix_successfully_created\n", n, m);  // матрица успешно создана
    
// Вызов функции rand_value(), генерирующей случайное значение:
    rand_value(variable, n, m);     // рандомное значение
 
// Функция create_matrix() заканчивает все вычисления, возвращая в вызвавшую её
// функцию (например, в функцию main) значение variable при помощи оператора
// return:
    return variable;
}
Добавлено через 39 минут

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
//===================================  2  ======================================
// Определение (иногда вместо термина "определение" используют термин
// "реализация") функции free_memory(). Функция принимает два аргумента.
// В качестве первого аргумента - указатель третьего уровня (указатель на
// указатель на указатель) на тип int, в качестве второго - целочисленную
// переменную. Функция не возвращает никаких значений в вызывающую функцию,
// о чём свидетельствует тип возвращаемого значения void (от англ. "void" -
// пустой).
void free_memory(int*** matrix, int n)
{
// Функция выполняет проверку матрицы на предмет занимаемой ею памяти.
    if ((*matrix==NULL) || (matrix == NULL)) // если матрица не занимает памяти
        printf("memory_deleted");   // вывести сообщение "память очищена"
        
    else    // иначе
    {
        for (int i=0; i<n; i++) // элемент за элементом удалить из памяти
            free(matrix[i]);    // вызов функции free(), освобождающей память
            
// Функция free() возвращает память, на которую указывает параметр ptr (в нашем
// случае, в качестве такого параметра выступает указатель matrix[i] записанный в
// нотации массивов - то есть, синтаксис как у массивов, а на самом деле это
// указатель на первый элемент массива), назад в кучу (heap).
// В результате эта память может выделяться снова.
// Обязательным условием использования функции free() является то, что
// освобождаемая память должна была быть предварительно выделена с использованием
// одной из следующих функций: malloc(), realloc() или calloc().
// Прототип функции free() находится в заголовочном файле <stdlib.h>
                    
        free(*matrix);  // освободить память, на которую указывает matrix
        *matrix = NULL; // присвоить указателю matrix значение NULL
    }
}
Добавлено через 1 час 19 минут
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
//===================================  3  ======================================
// Определение функции rand_value(). Функция принимает три аргумента - 
// указатель на указатель на тип int и две переменных типа int. Функция
// возвращает указатель на указатель на тип int.
 
// Функция srand выполняет инициализацию генератора случайных чисел rand.
// Генератор псевдо-случайных чисел инициализируется с помощью аргумента seed, 
// который играет роль зерна. В нашем случаем таким аргументом выступает
// значение, возвращаемое функцией time().
// Для того, чтобы генерировать случайные числа, функция srand обычно
// инициализируется некоторыми различными значения, например, такие значения
// генерируются функцией time. Значение, возвращенное функцией time (объявлена
// в заголовке <ctime>) отличается каждую секунду, что дает возможность получать
// совершенно случайные последовательности чисел, при каждом новом вызове
// функции rand.
int** rand_value(int** matrix, int n, int m)
{
    srand(time(NULL));  // запускаем генератор псевдо-случайных чисел
    
// Проходим по всей матрице элемент за элементом при помощи двух вложенных
// циклов for, инициализируя каждый элемент матрицы matrix случайными
// числами в диапазоне от 0 до 20:
    for (int i=0; i<n; i++)
        for (int j=0; j<m; j++)
            matrix[i][j] = rand()%20;   // диапазон значений от 0 до 20
 
    check(matrix, n, m);    // какая-то функция проверки - хз чё за хреновина
    
    return matrix;  // возвращаем matrix
}
 
Текущее время: 22:41. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru