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

дана матрица прямоугольная нужно ее транспонировать - C++

Восстановить пароль Регистрация
 
Chiko94
1 / 1 / 0
Регистрация: 21.11.2011
Сообщений: 23
05.12.2011, 22:31     дана матрица прямоугольная нужно ее транспонировать #1
дана матрица прямоугольная нужно ее транспонировать(желательно на языке си)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
05.12.2011, 23:37     дана матрица прямоугольная нужно ее транспонировать #2
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
#include <stdio.h>
#include <stdlib.h>
 
#define size 4 // порядок матрицы
 
// функция обмена значений
void swap( int* x, int* y ) {
    *x += *y;
    *y = *x - *y;
    *x -= *y;
}
 
int main( void ) {
    int i, j;
    //дана матрица
    int matrix[ size ][ size ] = { { 3, 8, 7, 5 },
                                   { 9, 0, 4, 1 },
                                   { 6, 8, 5, 9 },
                                   { 7, 0, 3, 2 } };
 
    // транспонируем матрицу
    for ( i = 0; i < size; ++i )
        for ( j = i + 1; j < size; ++j )
            swap( &matrix[ i ][ j ], &matrix[ j ][ i ] );
 
    // выводим на экран
    for ( i = 0; i < size; ++i ){
        for ( j = 0; j < size; ++j )
            printf("%d  ", matrix[ i ][ j ]);
        printf("\n");
    }
 
    return EXIT_SUCCESS;
}
Chiko94
1 / 1 / 0
Регистрация: 21.11.2011
Сообщений: 23
05.12.2011, 23:45  [ТС]     дана матрица прямоугольная нужно ее транспонировать #3
Цитата Сообщение от Roof Посмотреть сообщение
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
#include <stdio.h>
#include <stdlib.h>
 
#define size 4 // порядок матрицы
 
// функция обмена значений
void swap( int* x, int* y ) {
    *x += *y;
    *y = *x - *y;
    *x -= *y;
}
 
int main( void ) {
    int i, j;
    //дана матрица
    int matrix[ size ][ size ] = { { 3, 8, 7, 5 },
                                   { 9, 0, 4, 1 },
                                   { 6, 8, 5, 9 },
                                   { 7, 0, 3, 2 } };
 
    // транспонируем матрицу
    for ( i = 0; i < size; ++i )
        for ( j = i + 1; j < size; ++j )
            swap( &matrix[ i ][ j ], &matrix[ j ][ i ] );
 
    // выводим на экран
    for ( i = 0; i < size; ++i ){
        for ( j = 0; j < size; ++j )
            printf("%d  ", matrix[ i ][ j ]);
        printf("\n");
    }
 
    return EXIT_SUCCESS;
}


А без подпрограммы можно? а вроде Swap в ansi c нету(
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
06.12.2011, 00:01     дана матрица прямоугольная нужно ее транспонировать #4
swap - это функция, которая написана мной, я мог ее назвать и foo или func.
Если хочешь без подпрограммы, то удали полностью функцию swap и измени участок кода:
C
1
2
3
4
5
6
7
    // транспонируем матрицу
    for ( i = 0; i < size; ++i )
        for ( j = i + 1; j < size; ++j ){
            matrix[ i ][ j ] += matrix[ j ][ i ];
            matrix[ j ][ i ] = matrix[ i ][ j ] - matrix[ j ][ i ];
            matrix[ i ][ j ] -= matrix[ j ][ i ];
        }
Chiko94
1 / 1 / 0
Регистрация: 21.11.2011
Сообщений: 23
06.12.2011, 00:36  [ТС]     дана матрица прямоугольная нужно ее транспонировать #5
еще пару вопросов: что такое size(если число то ведь матрица прямоугольная , то что писать в строки и столбцы? ведь при разных матрицах разные столбцы и строки)(например из a[2][3] в матрицу a[3][2])

Добавлено через 1 минуту
{ { 3, 8, 7, 5 },
{ 9, 0, 4, 1 },
{ 6, 8, 5, 9 },
{ 7, 0, 3, 2 } }; - это уже ввод переменных? если да, то - вдруг у меня матрица 7 на 9 мне что все писать так?)

Добавлено через 9 минут
j = i + 1 а почему тут так...а не просто j=0

Добавлено через 12 минут
что то не пашит прога(
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
06.12.2011, 01:46     дана матрица прямоугольная нужно ее транспонировать #6
Roof, молодец, но это лишняя работа. можно просто индексами поиграться
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
#include <stdio.h>
#include <stdlib.h>
 
#define size 4 // порядок матрицы
 
int main( void )
{
    int i, j;
    //дана матрица
    int matrix[ size ][ size ] =
    {
        { 3, 8, 7, 5 },
        { 9, 0, 4, 1 },
        { 6, 8, 5, 9 },
        { 7, 0, 3, 2 }
    };
 
    //исходная матрица
    for ( i = 0; i < size; ++i )
    {
        puts("");
        for ( j = 0; j < size; ++j )
            printf("%d  ", matrix[ i ][ j ]);
    }
    puts("");
    // транспонированная
    for ( i = 0; i < size; ++i )
    {
        puts("");
        for ( j = 0; j < size; ++j )
            printf("%d  ", matrix[ j ][ i ]);
    }
    puts("");
 
    return EXIT_SUCCESS;
}
Chiko94
1 / 1 / 0
Регистрация: 21.11.2011
Сообщений: 23
06.12.2011, 09:55  [ТС]     дана матрица прямоугольная нужно ее транспонировать #7
так я тоже делал...мне препод сказал что я тупо обманываю прогу....она не распознает что матрица транспонированная
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
06.12.2011, 11:13     дана матрица прямоугольная нужно ее транспонировать #8
2 alkagolik - тоже вариант, но в моем понимании матрица остается нетранспонированной, а просто вывод матрицы в другом порядке. Нну это мое мнение субъективное.

2 Chiko94

что то не пашит прога(
Моя программа работает как нужно.
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
#include <stdio.h>
#include <stdlib.h>
 
#define size 4 // порядок матрицы
 
int main( void ) {
    int i, j;
    //дана матрица
    int matrix[ size ][ size ] = { { 3, 8, 7, 5 },
                                   { 9, 0, 4, 1 },
                                   { 6, 8, 5, 9 },
                                   { 7, 0, 3, 2 } };
 
    // транспонируем матрицу
    for ( i = 0; i < size; ++i )
        for ( j = i + 1; j < size; ++j ){
            matrix[ i ][ j ] += matrix[ j ][ i ];
            matrix[ j ][ i ] = matrix[ i ][ j ] - matrix[ j ][ i ];
            matrix[ i ][ j ] -= matrix[ j ][ i ];
        }
 
    // выводим на экран
    for ( i = 0; i < size; ++i ){
        for ( j = 0; j < size; ++j )
            printf("%d  ", matrix[ i ][ j ]);
        printf("\n");
    }
 
    return EXIT_SUCCESS;
}
Вот вывод у меня в консоле:
Код
3  9  6  7  
8  0  8  0  
7  4  5  3  
5  1  9  2
Про size.
C
1
...size 4 // порядок матрицы
j = i + 1 а почему тут так...а не просто j=0
Потому что разбирай внимательней алгоритм.
Попробуй заменить на j = 0 и погляди результат.

Ты писал:
дана матрица прямоугольная
В связи с этим я не понимаю причем тут матрица 7 на 9

это уже ввод переменных?
- это не ввод переменных, а инициализация массива. Ведь по условию задачи матрица дана.

Добавлено через 9 минут
В связи с этим я не понимаю причем тут матрица 7 на 9
Извиняюсь, насчет прямоугольной и квадратной это я уже перепутал.
У меня для квадратной матрицы, переделать для прямоугольной очень просто.
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
06.12.2011, 11:16     дана матрица прямоугольная нужно ее транспонировать #9
Цитата Сообщение от Chiko94 Посмотреть сообщение
дана матрица прямоугольная
Все такие квадратная или прямоугольная?
Chiko94
1 / 1 / 0
Регистрация: 21.11.2011
Сообщений: 23
06.12.2011, 11:51  [ТС]     дана матрица прямоугольная нужно ее транспонировать #10
прямоугольная

Добавлено через 59 секунд
а у тебя тут { 3, 8, 7, 5 }, квадратная матирица
{ 9, 0, 4, 1 },
{ 6, 8, 5, 9 },
{ 7, 0, 3, 2 } }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
06.12.2011, 12:50     дана матрица прямоугольная нужно ее транспонировать
Еще ссылки по теме:

C++ Дана целочисленная прямоугольная матрица
C++ Дана целочисленная прямоугольная матрица
Дана целочисленная прямоугольная матрица C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Roof
 Аватар для Roof
154 / 154 / 10
Регистрация: 03.11.2010
Сообщений: 393
06.12.2011, 12:50     дана матрица прямоугольная нужно ее транспонировать #11
Квадрат - ведь частный случай прямоугольника.
На примере матрицы 4 x 5:
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
#include <stdio.h>
#include <stdlib.h>
 
#define size_i 4 // количество строк
#define size_j 5 // количество столбцов
int main( void ) {
    int i, j;
    //дана матрица ( размер заведомо больше - 5 на 5, так как нужно место чтобы транспонировать )
    int matrix[ size_j ][ size_j ] = { { 3, 8, 7, 5, 7 },
                                       { 9, 0, 4, 1, 6 },
                                       { 6, 8, 5, 9, 0 },
                                       { 7, 0, 3, 2, 1 }};
 
    // транспонируем матрицу
    for ( i = 0; i < size_i; ++i )
        for ( j = i + 1; j < size_j; ++j ) {
            matrix[ i ][ j ] += matrix[ j ][ i ];
            matrix[ j ][ i ] = matrix[ i ][ j ] - matrix[ j ][ i ];
            matrix[ i ][ j ] -= matrix[ j ][ i ];
        }
 
    // выводим на экран
    for ( i = 0; i < size_j; ++i ) {
        for ( j = 0; j < size_i; ++j )
            printf( "%d  ", matrix[ i ][ j ] );
        printf( "\n" );
    }
 
    return EXIT_SUCCESS;
}
Yandex
Объявления
06.12.2011, 12:50     дана матрица прямоугольная нужно ее транспонировать
Ответ Создать тему
Опции темы

Текущее время: 21:10. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru