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

Функция транспонирования матрицы - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Строка http://www.cyberforum.ru/cpp-beginners/thread249665.html
У меня уже готова программа , но нужно кое-что переделать . Есть идентификатор char name в динамической структуре данных , который должен вводиться с клавиатуры и сохраняться в линейном списке . Но в самой программе можно ввести только 1 символ для name . Помогите плиз задать name как строку символов. Я пробовал , но у меня ничего получилось . Надеюсь на вашу помощь
C++ Упростить код Как упростить вот такой код? Спасибо за внимание. #include <iostream> #include <conio.h> using namespace std; int main() { const int H = 20; // игровое поле H x W, const int W = 50; http://www.cyberforum.ru/cpp-beginners/thread249654.html
C++ Преобразования строки в число
Добрый вечер! Знаю, что подобная проблема здесь уже поднималась, однако решение ее я так и не нашел. Суть задачи: ввести сумму используя стандартный класс string или массив строк и преобразовать в число типа double. Написал код: double mstold(string m); int _tmain(int argc, _TCHAR* argv) { setlocale(LC_ALL, "Russian"); string m1; cout << "Введите денежную сумму (используйте символ $):...
Цыкл C++
Данная последовательность целых чисел, за которой следует 0. Найти максимальный элемент в этой последовательности. Добавлено через 1 час 28 минут уже не нужно
C++ Присвоение типа Char http://www.cyberforum.ru/cpp-beginners/thread249636.html
нид хелп) итак, мне надо, чтобы прога проверяла, является ли переменная а равна значению a, b или c, а потом исполняла ряд команд. если пишу так: if (a="A"), пишет, мол error C2440: =: невозможно преобразовать "const char " в "char" а если так:
C++ Найдите ошибку в программе Не могу исправить ошибку в функции (171-181 строка) все остальное работает #include <iostream> #include <cstdlib> #include <iomanip> #include <ctime> #include <fstream> using namespace std; подробнее

Показать сообщение отдельно
Nameless One
Эксперт С++
5767 / 3416 / 255
Регистрация: 08.02.2010
Сообщений: 7,441
28.02.2011, 14:30     Функция транспонирования матрицы
Alisson, создавать динамический массив внутри функции - не самая лучшая (и очевидная для других) идея. Имхо, лучше просто модифицировать начальную матрицу. Можно сделать примерно вот так:
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>
#include <stdarg.h>
#include <string.h>
 
void showMatrix(const char*, int**, size_t);
void transpose(int**, size_t);
void swap(void*, void*, size_t);
void errExit(size_t, const char*, ...);
 
#define safeFree(PTR) free(PTR), PTR = NULL
#define readMatrix(M, I, J) printf("Input " #M "[%u][%u]: ", I, J), scanf("%d", &M[I][J])
 
int main()
{
    size_t n;
    int** matrix;
    size_t i, j;
    
    fputs("Input n: ", stdout);
    scanf("%u", &n);
 
    if((matrix = (int**) malloc(n * sizeof(int*))) == NULL)
    errExit(1, "Can't allocate memory for %u rows.\n", n);
 
    for(i = 0; i < n; ++i)
    if((matrix[i] = (int*) malloc(n * sizeof(int))) == NULL)
        errExit(2, "Can't allocate memory for #%u row.\n", i);
 
    for(i = 0; i < n; ++i)
    for(j = 0; j < n; ++j)
        readMatrix(matrix, i, j);
 
    showMatrix("Initial matrix", matrix, n);
    
    transpose(matrix, n);
 
    showMatrix("Transposed matrix", matrix, n);
        
    for(i = 0; i < n; ++i)
    safeFree(matrix[i]);
    safeFree(matrix);
    
    exit(0);
}
 
void showMatrix(const char* prompt, int** matrix, size_t n)
{
    size_t i, j;
 
    puts(prompt);
    for(i = 0; i < n; ++i, putchar('\n'))
    for(j = 0; j < n; ++j)
        printf("%-6u", matrix[i][j]);
}
 
void transpose(int** matrix, size_t n)
{
    size_t i, j;
    for(i = 0; i < n; ++i)
    for(j = i + 1; j < n; ++j)
        swap(&matrix[i][j], &matrix[j][i], sizeof(int));
}
 
void swap(void* a, void* b, size_t size)
{
    static void* tmp = NULL;
    if((tmp = malloc(size)) == NULL)
    errExit(3, "Can't allocate memory.\n");
    
    memcpy(tmp, a, size);
    memcpy(a, b, size);
    memcpy(b, tmp, size);
    safeFree(tmp);
}
 
void errExit(size_t code, const char* fmt, ...)
{
    va_list ap;
    va_start(ap, fmt);
    vfprintf(stderr, fmt, ap);
    va_end(ap);
    if(code)
    exit(code);
}
Функции выделения/освобождения памяти в стиле С, но для С++ переделать будет несложно.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru