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

Перемножение двух матриц - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Упорядоченный связный список объектов класса http://www.cyberforum.ru/cpp-beginners/thread1548588.html
Добрый вечер, вот уже третий день бьюсь в попытках создания связного списка из объектов класса. Задача: создать таблицу символов, в которой последние должны хранится в виде связного списка (в алфавитном порядке). Когда создаю обычный список все работает, подставляю класс и ожидаемого результата не получаю:( // IdentifierTable.cpp: определяет точку входа для консольного приложения. //...
C++ 6 процессов. Найти среднее время выполнения и среднее время ожидания Дана задача. Есть 6 процессов, продолжительностью (3 1 4 3 5 5) сек каждый. Каждый процесс имеет Т=2 сек, то есть, если 1-й процесс равен 3, то сначала выполнится 2 сек процесса, а потом, когда закончится выполнение 2 секунд каждого их 6 процессов, то начнется выполнение следующих 2 секунд. Нужно найти среднее время выполнения и среднее время ожидания. Среднее время выполнения - это сумма по... http://www.cyberforum.ru/cpp-beginners/thread1548568.html
Ввод переменной посреди строки C++
Есть строка "Enter: " Причем, после вывода этой строки каретка должна переместится в квадратные скобки, и ввод переменной должен быть внутри них. Можно SetConsoleCursorPosition, но при вводе большого числа затирается сам текст. Как реализовать? Можно ли вообще подобное?
Пишу итератор произвольного доступа C++
Пишу итератор произвольного доступа. По минимуму он должен поддерживать несколько операций, но меня смутила операция n+it, где n это целое число, а it это итератор. Для операции it+n всё понятно: там вызов преобразуется к it.operator+(n) А тут по логике должно быть наоборот, но int не класс, а примитивный тип, так что дружественную функцию не напишешь. О стандартных классовых обертках над...
C++ Конструкторы и деструкторы http://www.cyberforum.ru/cpp-beginners/thread1548556.html
Помогите, пожалуйста, исправить программу и закончить ее как надо. Необходимо реализовать класс с двумя полями, имеющими имена first и second. Обязательно должны присутствовать: Для инициализации начальных значений использовать конструктор; Обязательно использовать деструктор для удаления объектов; Вывод на экран Display(); Для проверки программы использовать несколько случайных наборов...
C++ Мусор при записи значений в файл Дорого времени суток господа! Извиняюсь, если где-то уже была создана такая тема и я не поискал ее. При записи букафф в файл вылезая шляпа в виде мусора. Обычным циклом перебираю символы из одного массива и присваиваю другому и данные из другого массива записываю в файл. Вот такой кодесс #include <iostream> #include <fstream> #include <conio.h> #include <cstring> подробнее

Показать сообщение отдельно
tezaurismosis
Супер-модератор
 Аватар для tezaurismosis
6324 / 2952 / 465
Регистрация: 17.04.2012
Сообщений: 7,371
Записей в блоге: 14
Завершенные тесты: 4
10.10.2015, 09:00     Перемножение двух матриц
Как-то с Михаилом (KOPOJI) писали в качестве развлечения, в сишном стиле, правда.
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
#include <stdio.h>
#include <stdlib.h>
 
// Все методы, связанные с матрицами, начинаю с mx_
 
struct _matrix_type
{
    size_t rows;
    size_t columns;
    int** data;
};
 
// АТЕНСЬОН! Не создавайте матрицу простым инстанцированием
// этой структуры или сами выделяйте под неё память.
// Используйте mx_allocate(), ибо нефиг.
typedef struct _matrix_type mx_t;
 
/**
 * Создаёт новую матрицу заданного размера,
 * выделяя под неё память.
 */
mx_t mx_allocate(size_t rows, size_t columns) {
    // выделяем память под строки
    // берём размер *указателя* на int
    int** matrix = (int**)malloc(sizeof(int*) * rows);
    for (int row = 0; row < rows; row++) {
        // выделяем память внутри строк (ячейки)
        matrix[row] = (int*)malloc(sizeof(int) * columns);
    }
    
    mx_t result = {
        .rows = rows,
        .columns = columns,
        .data = matrix
    };
    
    return result;
}
 
/**
 * Заполняет матрицу случайными числами от 0 до 99.
 */
void mx_random_fill(mx_t mx) {
    for (int r = 0; r < mx.rows; r++) {
        for (int c = 0; c < mx.columns; c++) {
            mx.data[r][c] = rand() % 100;
        }
    }
}
 
/**
 * Выводит матрицу в стандартный поток вывода.
 */
void mx_print(mx_t mx) {
    for (int r = 0; r < mx.rows; r++) {
        for (int c = 0; c < mx.columns; c++) {
            printf("%d ", mx.data[r][c]);
        }
        printf("\n");
    }
}
 
/**
 * Перемножает матрицы за O(n^3).
 */
mx_t mx_multiply(mx_t left, mx_t right) {
    // TODO: Проверка размеров матриц
    mx_t result = mx_allocate(left.rows, right.columns);
    for (int r = 0; r < left.rows; r++) {
        for (int c = 0; c < right.columns; c++) {
            for (int n = 0; n < left.columns; n++) {
                result.data[r][c] += left.data[r][n] * right.data[n][c];
            }
        }
    }
    
    return result;
}
 
/**
 * Освобождает память, отведённую под матрицу.
 */
void mx_free(mx_t matrix) {
    free(matrix.data);
}
 
Текущее время: 00:44. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru