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

Переворот массива относительно главной диагонали (транспонирование) - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 69, средняя оценка - 4.68
b1ood
0 / 0 / 0
Регистрация: 26.03.2011
Сообщений: 3
28.09.2011, 10:27     Переворот массива относительно главной диагонали (транспонирование) #1
1) Нужно написать программу которая будет выводить массив

int m[M][N]={...};

Вывести массив на экран и затем переворот массива относительно главной диагонали (транспонирование).

2) Все тоже самое как в первом только значения N и М вводятся с клавиатуры.
3) Все тоже самое как в первом только теперь создать функцию
Void displayMatrix (int**m, int N, int M);

Пожалуйста помогите, в долгу не останусь!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.09.2011, 10:27     Переворот массива относительно главной диагонали (транспонирование)
Посмотрите здесь:

C++ Транспонирование матрицы относительно главной и побочной диагоналей
C++ Функции: поменять элементы относительно главной диагонали
C++ Является ли матрица симметричной относительно главной диагонали (templates)
Отражение двумерного массива относительно главной диагонали C++
C++ Является ли матрица симетричной относительно главной диагонали?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nxnx
Формучанин
361 / 292 / 16
Регистрация: 02.11.2010
Сообщений: 1,226
28.09.2011, 14:00     Переворот массива относительно главной диагонали (транспонирование) #41
-=ЮрА=-, речь не о моём коде. мне интересно знать ответ на мой и
Deviaphan, вопросы.(37 и 38 пост)
Возможно твои ответы прояснят кто прав а кто нет. Возможно в этой теме идёт разговор вобще о разных вещах.

Добавлено через 1 минуту
Вот кстати яркий пример того что я написал выше:
Цитата Сообщение от Deviaphan Посмотреть сообщение
Вот ты не поверишь. Адреса РАЗНЫЕ, как и должно быть. Причём, у тебя код не на Си, а на С++. Нельзя внутри for переменную определять, Сишный компилятор жалуется.
тег то -си++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 14:00     Переворот массива относительно главной диагонали (транспонирование) #42
Цитата Сообщение от nxnx Посмотреть сообщение
Возможно твои ответы прояснят кто прав а кто нет.
Я не хочу на них отвечать. Я надеюсь, что Юра, ответив на эти посты, удалит свой кривой компилятор.
Подсказка, на 37 и 38 посты ответ одинаков.
nxnx
Формучанин
361 / 292 / 16
Регистрация: 02.11.2010
Сообщений: 1,226
28.09.2011, 14:01     Переворот массива относительно главной диагонали (транспонирование) #43
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я не хочу на них отвечать. Я надеюсь, что Юра, ответив на эти посты, удалит свой кривой компилятор.
Подсказка, на 37 и 38 посты ответ одинаков.
я вобщето прошу Юру ответить)
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 14:02     Переворот массива относительно главной диагонали (транспонирование) #44

Не по теме:

Какой я добрый, подсказки даю...



Добавлено через 31 секунду
Цитата Сообщение от nxnx Посмотреть сообщение
я вобщето прошу Юру ответить)
Ой, я не правильно из-за переноса строки фразу понял.) Сорри.)
-=ЮрА=-
Заблокирован
Автор FAQ
28.09.2011, 14:05     Переворот массива относительно главной диагонали (транспонирование) #45
Цитата Сообщение от nxnx Посмотреть сообщение
чей адрес напечатает printf ?
float **arr
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 14:07     Переворот массива относительно главной диагонали (транспонирование) #46
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
float **arr
Что и требовалось доказать. Учи матчасть.
И смени уже компилятор на нормально работающий.
nxnx
Формучанин
361 / 292 / 16
Регистрация: 02.11.2010
Сообщений: 1,226
28.09.2011, 14:09     Переворот массива относительно главной диагонали (транспонирование) #47
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
float **arr
адрес массива arr ?
-=ЮрА=-
28.09.2011, 14:13
  #48

Не по теме:

Цитата Сообщение от Deviaphan Посмотреть сообщение
что arr != &arr[0][0].
твоё утверждение?
Ты это компилировал в Release
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
float ** x=(float **)malloc(10*sizeof(float *));
* * * * for(int i = 0; i < 10; i++)
* * * * {
* * * * * * * * x[i] = (float *)malloc(10*sizeof(float));
* * * * * * * * memset(x[i],1,10*sizeof(float));
* * * * }
* * printf("%p==%p\n",x,&x[0][0]);
return 0;
}
- и огрызаешся, может твой компилятор другие адресы кроме равных выдал, ммм???
Я ни проекта от тебя ни вижу ни помощи ТС только желание показать даже не знаю что, я ушёл из топика до завтра...Не приведёшь свои клиент-сервер - ты binNULL. Весь почти весь код серверов запихну в DLL потому что учить тебя чему то отпало всякое желание...

nxnx
Формучанин
361 / 292 / 16
Регистрация: 02.11.2010
Сообщений: 1,226
28.09.2011, 14:13     Переворот массива относительно главной диагонали (транспонирование) #49
Цитата Сообщение от Deviaphan Посмотреть сообщение
Что и требовалось доказать. Учи матчасть.
И смени уже компилятор на нормально работающий.
я думаю стоит подождать ответа на русском языке, а не на си
bigredcat
364 / 311 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
28.09.2011, 14:15     Переворот массива относительно главной диагонали (транспонирование) #50
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ну тогда уволь меня от своих бессмысленных замечаний
Увольте себя сами от своих неверных утверждений. Или изучите курс математики, глядишь замечания не будут казаться такими уж бессмысленными.
nxnx
Формучанин
361 / 292 / 16
Регистрация: 02.11.2010
Сообщений: 1,226
28.09.2011, 14:15     Переворот массива относительно главной диагонали (транспонирование) #51
ибо я не думаю что юра хотел сказать:
"указатель на указатель на float"
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 14:17     Переворот массива относительно главной диагонали (транспонирование) #52
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
может твой компилятор другие адресы кроме равных выдал, ммм???
Не умею вставлять картинку, поэтому аттачем. Специально на фоне отладчика, чтобы не вызывать излишних подозрений.
Переворот массива относительно главной диагонали (транспонирование)
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 14:18     Переворот массива относительно главной диагонали (транспонирование) #53
Хм. На этот раз нормально вставилось. Я молодец.)
Евгений М.
1033 / 974 / 53
Регистрация: 28.02.2010
Сообщений: 2,817
Завершенные тесты: 2
28.09.2011, 14:23     Переворот массива относительно главной диагонали (транспонирование) #54
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Я не заметил чтобы кто-то говорил про транспонирование прямоугольной матрицы. Соответственно выкладываю про транспонированные матрицы.

Не по теме:

Я думал что споры с Юрой бывают только в научном разделе.

alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
28.09.2011, 14:28     Переворот массива относительно главной диагонали (транспонирование) #55
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- да неужто где вы в прямоугольной матрице видели гдавную диагональ???
грубо говоря транспонирование не имеет отношения к диагонали. пример
вход
1 2 3
4 5 6

выход
1 4
2 5
3 6
-=ЮрА=-
28.09.2011, 14:32
  #56

Не по теме:

Евгений М., а вы сами можите описать матсмысл транспонирования не квадратной матрицы?

bigredcat,

Цитата Сообщение от bigredcat Посмотреть сообщение
Или изучите курс математики
- иди сам его изучи слова внятного не сказал только под...живаешь тут по топику

bigredcat
364 / 311 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
28.09.2011, 14:53     Переворот массива относительно главной диагонали (транспонирование) #57
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
М == N иначе матрицу нельзя транспонировать!
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
Можно поменять строки со столбцами местами но это не поворот относительно гл диагонали (я именно это под транспонированием подразумеваю)
Вам собственно указали на ошибочность ваших утверждений. Ну, ошиблись, и ладно, можно проигнорировать замечание. Но вы по, данному поводу, стали заводить тень на плетень с матсмыслом транспонирования не квадратных матриц и собственным определением траспонирования. Для чего? Это докажет, что вы правы и операция траспонирования для прямоугольных (не квадратных) мариц не определена?

Нервы беречь надо, не принимайте все так близко
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
28.09.2011, 15:03     Переворот массива относительно главной диагонали (транспонирование) #58
задача 1
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
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
 
const int N = 3;
const int M = 5;
 
int main()
{
    srand(time(NULL));
    int i, k, arr[N][M];
 
    for(i = 0; i < N; ++i)
        for(k = 0; k < M; ++k)
            arr[i][k] = rand() % 10;
    
    printf("\nисходная матрица\n");
    for(i = 0; i < N; ++i){
        for(k = 0; k < M; ++k)
            printf(" %d", arr[i][k]);
        printf("\n");
    }
    printf("\nтранспонированная матрица\n");
 
    for(i = 0; i < M; ++i){
        for(k = 0; k < N; ++k)
            printf(" %d", arr[k][i]);
        printf("\n");
    }
    return 0;
}
результат
Код
 8 6 5 9 5
 0 6 0 8 0
 9 5 3 3 4


 8 0 9
 6 6 5
 5 0 3
 9 8 3
 5 0 4
nxnx
Формучанин
361 / 292 / 16
Регистрация: 02.11.2010
Сообщений: 1,226
28.09.2011, 15:15     Переворот массива относительно главной диагонали (транспонирование) #59
-=ЮрА=-,
Код из поста #11
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
int main()
{
        unsigned long i,j,m,n;
        float ** arr, sum;
        do
        {
                srand(time(NULL));
                printf("Enter dimension of array\r\n");
                printf("Num of Rows    : ");scanf("%u",&m);
                printf("Num of Colums : ");scanf("%u",&n);
 
                sum = 0;//Обнуляем сумму макс элементов
                arr = (float **)malloc(m*sizeof(float *));
                printf("pointer to arr : 0x%p\r\n",&arr[0][0]);
                for(i = 0; i < m; i++)
                {
                        arr[i] = (float *)malloc(n*sizeof(float));
                        for(j = 0; j < n; j++)
                        {
                                //Чтобы числа в массиве были не очень большими 
                                //генерируем их в диапазоне 0 - 100
                                printf("%f ",(arr[i][j] = rand()%100));
                        }
                        printf("\r\n");
                }
                for(j = 0; j < n; j++)
                        sum += MaxColVal(m, j, arr);
                printf("Summ max elements in colums : %f\r\n",sum);
                printf("Y - new input\r\n");
        }
        while(toupper(getch()) == 'Y');
        return 0;
}

Вопрос:
Цитата Сообщение от nxnx Посмотреть сообщение
C
1
2
arr = (float **)malloc(m*sizeof(float *));
printf("pointer to arr : 0x%p\r\n",&arr[0][0]);
чей адрес напечатает printf ?
Цитата Сообщение от Deviaphan Посмотреть сообщение
И, как дополнение
C
1
printf("pointer to arr : 0x%p\r\n", arr[0]);
был дан ответ:
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
float **arr
Верно или нет-судите сами, ибо я понятия не имею что означает такой ответ.

Ответ
Неизвестно чей адрес будет напечатан. Память инициализирована мусором, и
printf() может вывести какой угодно адрес.
адреса arr[0] и &arr[0][0] совпадают

Если бы массив указателей по адресу arr был инициализирован:
arr[0] - указатель на [0] массив из float-ов
&arr[0][0] - указатель на [0] элемент(float) [0] массива
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2011, 17:15     Переворот массива относительно главной диагонали (транспонирование)
Еще ссылки по теме:

Квадратная матрица, симметричная относительно главной диагонали, задана верхним треугольником в виде одномерного массива.Восстановить исходную матрицу C++
Массивы. Отобразить матрицу симметрично относительно главной диагонали C++
Зеркально отразить матрицу относительно главной диагонали. C++

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

Или воспользуйтесь поиском по форуму:
alkagolik
 Аватар для alkagolik
1510 / 616 / 79
Регистрация: 15.07.2011
Сообщений: 3,552
28.09.2011, 17:15     Переворот массива относительно главной диагонали (транспонирование) #60
задача 2
единственное что мне не дает покоя, так это то, что строка 18 эквивалентна NULL чего быть не должно кто подскажет в чем дело?
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
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
 
int main()
{
    srand(time(NULL));
    int i, k, **arr, N, M;
 
    printf("введите количество строк\n");
    scanf("%d", &N);
    printf("введите количество столбцов\n");
    scanf("%d", &M);
 
    arr = (int**) malloc(N * sizeof(int*));
 
    for (i = 0; i != N; ++i)
        arr[i] = (int*) malloc(M * sizeof(int));
 
    for (i = 0; i != N; ++i)
        for (k = 0; k != M; ++k)
            arr[i][k] = rand() % 10;
 
    printf("\nисходная матрица\n");
    for(i = 0; i < N; ++i){
        for(k = 0; k < M; ++k)
            printf(" %d", arr[i][k]);
        printf("\n");
    }
    
    printf("\nтранспонированная матрица\n");
    for(i = 0; i < M; ++i){
        for(k = 0; k < N; ++k)
            printf(" %d", arr[k][i]);
        printf("\n");
    }
 
    for(i = 0; i != N; ++i)
        free(arr[i]);
    free(arr);
    return 0;
}
результат работы
Код
введите количество строк
4
введите количество столбцов
5
(null) #errno в условии if ((arr[i] = (int*) malloc(M * sizeof(int))) == NULL)
(null)
(null)
(null)
заполнение матрицы значениями

исходная матрица
 9 3 9 5 0
 5 9 3 5 0
 4 9 8 7 4
 4 6 3 7 9

транспонированная матрица
 9 5 4 4
 3 9 9 6
 9 3 8 3
 5 5 7 7
 0 0 4 9


Добавлено через 1 час 18 минут
nxnx, любой n мерный массив в машине преобразуется в одномерный. это факт. а в данном примере двумерный массив arr[N][M] преобразуется при компиляции в массив arr[N * M] логическое следствие: мнимый (мнимый потому что массив фактически одномерный) &arr[0][0] это &arr[0] , т.е. &arr
или я ошибаюсь?
Yandex
Объявления
28.09.2011, 17:15     Переворот массива относительно главной диагонали (транспонирование)
Закрытая тема Создать тему
Опции темы

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