Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.89/106: Рейтинг темы: голосов - 106, средняя оценка - 4.89
0 / 0 / 0
Регистрация: 26.03.2011
Сообщений: 3

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

28.09.2011, 10:27. Показов 22661. Ответов 83
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
1) Нужно написать программу которая будет выводить массив

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

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

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

Пожалуйста помогите, в долгу не останусь!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
28.09.2011, 10:27
Ответы с готовыми решениями:

Отражение двумерного массива относительно главной диагонали
Помогите пожалуйста, надо отразить заданный двумерный массив относительно главной диагонали.

Транспонирование матрицы относительно побочной диагонали
Здравствуйте уважаемые знатоки. У меня есть код матрицы в С++ #include <stdafx.h> #include <iostream> #include...

Транспонирование матрицы относительно главной и побочной диагоналей
Подскажите как, транспонировать значения квадратной матрицы, относительно главной и побочной диагоналей.

83
Формучанин
364 / 296 / 42
Регистрация: 02.11.2010
Сообщений: 1,245
28.09.2011, 14:00
Студворк — интернет-сервис помощи студентам
-=ЮрА=-, речь не о моём коде. мне интересно знать ответ на мой и
Deviaphan, вопросы.(37 и 38 пост)
Возможно твои ответы прояснят кто прав а кто нет. Возможно в этой теме идёт разговор вобще о разных вещах.

Добавлено через 1 минуту
Вот кстати яркий пример того что я написал выше:
Цитата Сообщение от Deviaphan Посмотреть сообщение
Вот ты не поверишь. Адреса РАЗНЫЕ, как и должно быть. Причём, у тебя код не на Си, а на С++. Нельзя внутри for переменную определять, Сишный компилятор жалуется.
тег то -си++
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 14:00
Цитата Сообщение от nxnx Посмотреть сообщение
Возможно твои ответы прояснят кто прав а кто нет.
Я не хочу на них отвечать. Я надеюсь, что Юра, ответив на эти посты, удалит свой кривой компилятор.
Подсказка, на 37 и 38 посты ответ одинаков.
0
Формучанин
364 / 296 / 42
Регистрация: 02.11.2010
Сообщений: 1,245
28.09.2011, 14:01
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я не хочу на них отвечать. Я надеюсь, что Юра, ответив на эти посты, удалит свой кривой компилятор.
Подсказка, на 37 и 38 посты ответ одинаков.
я вобщето прошу Юру ответить)
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 14:02

Не по теме:

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



Добавлено через 31 секунду
Цитата Сообщение от nxnx Посмотреть сообщение
я вобщето прошу Юру ответить)
Ой, я не правильно из-за переноса строки фразу понял.) Сорри.)
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
28.09.2011, 14:05
Цитата Сообщение от nxnx Посмотреть сообщение
чей адрес напечатает printf ?
float **arr
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 14:07
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
float **arr
Что и требовалось доказать. Учи матчасть.
И смени уже компилятор на нормально работающий.
0
Формучанин
364 / 296 / 42
Регистрация: 02.11.2010
Сообщений: 1,245
28.09.2011, 14:09
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
float **arr
адрес массива arr ?
0
28.09.2011, 14:13

Не по теме:

Цитата Сообщение от 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 потому что учить тебя чему то отпало всякое желание...

0
Формучанин
364 / 296 / 42
Регистрация: 02.11.2010
Сообщений: 1,245
28.09.2011, 14:13
Цитата Сообщение от Deviaphan Посмотреть сообщение
Что и требовалось доказать. Учи матчасть.
И смени уже компилятор на нормально работающий.
я думаю стоит подождать ответа на русском языке, а не на си
0
375 / 322 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
28.09.2011, 14:15
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ну тогда уволь меня от своих бессмысленных замечаний
Увольте себя сами от своих неверных утверждений. Или изучите курс математики, глядишь замечания не будут казаться такими уж бессмысленными.
0
Формучанин
364 / 296 / 42
Регистрация: 02.11.2010
Сообщений: 1,245
28.09.2011, 14:15
ибо я не думаю что юра хотел сказать:
"указатель на указатель на float"
0
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 14:17
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
может твой компилятор другие адресы кроме равных выдал, ммм???
Не умею вставлять картинку, поэтому аттачем. Специально на фоне отладчика, чтобы не вызывать излишних подозрений.
1
Делаю внезапно и красиво
Эксперт С++
 Аватар для Deviaphan
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 14:18
Хм. На этот раз нормально вставилось. Я молодец.)
0
1080 / 1007 / 107
Регистрация: 28.02.2010
Сообщений: 2,889
28.09.2011, 14:23
Лучший ответ Сообщение было отмечено как решение

Решение

Я не заметил чтобы кто-то говорил про транспонирование прямоугольной матрицы. Соответственно выкладываю про транспонированные матрицы.

Не по теме:

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

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

выход
1 4
2 5
3 6
0
28.09.2011, 14:32

Не по теме:

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

bigredcat,

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

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

Нервы беречь надо, не принимайте все так близко
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
28.09.2011, 15:03
задача 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;
}
результат
Code
1
2
3
4
5
6
7
8
9
10
 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
0
Формучанин
364 / 296 / 42
Регистрация: 02.11.2010
Сообщений: 1,245
28.09.2011, 15:15
-=ЮрА=-,
Код из поста #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] массива
0
 Аватар для alkagolik
1599 / 622 / 113
Регистрация: 15.07.2011
Сообщений: 3,548
28.09.2011, 17:15
задача 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;
}
результат работы
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
введите количество строк
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
или я ошибаюсь?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.09.2011, 17:15
Помогаю со студенческими работами здесь

Квадратная матрица, симметричная относительно главной диагонали задана верхним треугольником в виде одномерного массива
квадратная матрица симметричная относительно главной диагонали задана верхним треугольником в виде одномерного массива . Восстановить...

Квадратная матрица, симметричная относительно главной диагонали, задана верхним треугольником в виде одномерного массива.Восстановить исходную матрицу
Квадратная матрица, симметричная относительно главной диагонали, задана верхним треугольником в виде одномерного массива. Восстановить...

Проверка на симметричность относительно главной диагонали
Дан массив целых чисел размера n x n, элементами которого являются 0 и 1. Проверить, является ли массив симметричным относительно главной...

Дана квадратная матрица. Произвести транспонирование (переворот) матрицы относительно ее главной диагонали
Дана квадратная матрица. Произвести транспонирование (переворот) матрицы относительно ее главной диагонали Sub Макрос1() Dim a As...

Произвести переворот матрицы относительно ее побочной диагонали
Дана квадратная матрица. Произвести переворот матрицы относительно ее побочной диагонали ....кто знает как это сделать ...хэлп.... в...


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

Или воспользуйтесь поиском по форуму:
60
Закрытая тема Создать тему
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru