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

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

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

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

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

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

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

Пожалуйста помогите, в долгу не останусь!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.09.2011, 10:27
Ответы с готовыми решениями:

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

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

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

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

83
Заблокирован
Автор FAQ
28.09.2011, 11:05 2
b1ood, компилятор?(билдер, студия и т.д.)Язык Си или С++?

Добавлено через 10 минут
Вот на Си 1-й пункт
Добавлено через 11 минут
Упс не тот код вначале выложил (верней топики спутал) - теперь всё ок!
Код Си 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
32
33
34
35
36
37
38
39
40
41
42
43
int main()
{
    unsigned long i,j,m;
    double ** arr,buf;
    do
    {
        srand(time(NULL));
        printf("Enter dimension of array : ");scanf("%u",&m);
 
        arr = new double *[m];
        for(i = 0; i < m; i++)
        {
            arr[i] = new double[m];
            for(j = 0; j < m; j++)
            {
                //Чтобы числа в массиве были не очень большими 
                //генерируем их в диапазоне 0 - 100
                printf("%.f ",(arr[i][j] = rand()%100));
            }
            printf("\r\n");
        }
        printf("\tTransponed array\r\n");
        //Транспонирование
        for(i = 0; i < m; i++)
        {
            for(j = 0; j < m; j++)
            {
                if(i < m/2)
                {
                    buf = arr[i][j];
                    arr[i][j] = arr[j][i];
                    arr[j][i] = buf;
                }
                printf("%.f ",arr[i][j]);
            }
            printf("\r\n");
        }
 
        printf("Y - new input\r\n");
    }
    while(toupper(getch()) == 'Y');
    return 0;
}

Enter dimension of array : 5
95 90 69 92 68
Продолжение вывода
89 26 20 21 59
80 41 13 37 42
18 83 40 78 30
52 4 20 15 0
Transponed array
95 89 80 18 52
89 26 41 83 4
69 20 13 37 42
92 21 40 78 30
68 59 20 15 0
Y - new input


Добавлено через 7 минут
Цитата Сообщение от b1ood Посмотреть сообщение
Все тоже самое как в первом только значения N и М вводятся с клавиатуры.
М == N иначе матрицу нельзя транспонировать!Мой 1-й пост объяединяет в себе 1-е и 2-е задание (вводим М - сгенерированными случайными числами заполняется массив МхМ), затем транспонируется...
Сейчас будет 3-й пункт

Добавлено через 4 минуты
Вот так выглядит 3-й пункт
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
#include <stdio.h>//i/o
#include <stdlib.h> //srand
#include <conio.h> //getch()
#include <ctype.h> //toupper
#include <time.h>  //time()
 
void Transpon(int m, double **arr)
{
    double buf;
    for(int i = 0,j; i < m; i++)
    {
        for(j = 0; j < m; j++)
        {
            if(i < m/2)
            {
                buf = arr[i][j];
                arr[i][j] = arr[j][i];
                arr[j][i] = buf;
            }
        }
    }
}
 
int main()
{
    unsigned long i,j,m;
    double ** arr;
    do
    {
        srand(time(NULL));
        printf("Enter dimension of array : ");scanf("%u",&m);
 
        arr = new double *[m];
        for(i = 0; i < m; i++)
        {
            arr[i] = new double[m];
            for(j = 0; j < m; j++)
            {
                //Чтобы числа в массиве были не очень большими 
                //генерируем их в диапазоне 0 - 100
                printf("%.f ",(arr[i][j] = rand()%100));
            }
            printf("\r\n");
        }
        printf("\tTransponed array\r\n");
        //Транспонирование
        Transpon(m, arr);
        //Выводим массив на экран
        for(i = 0; i < m; i++,printf("\r\n"))
        for(j = 0; j < m; j++)
            printf("%.f ",(arr[i][j] = rand()%100));
        printf("Y - new input\r\n");
    }
    while(toupper(getch()) == 'Y');
    return 0;
}
1
374 / 321 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
28.09.2011, 11:06 3
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
М == N иначе матрицу нельзя транспонировать
Т.е. вы разрешаете транспонировать только квадратные матрицы, а не квадратные запрещаете?
0
Формучанин
364 / 294 / 42
Регистрация: 02.11.2010
Сообщений: 1,242
28.09.2011, 11:15 4
-=ЮрА=-,
C
1
arr[i] = new double[m];
Язык точно си?

Добавлено через 2 минуты
C
1
for(int i = 0,j; i < m; i++)
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 11:16 5
И очистка ресурсов не помешает.
0
Эксперт С++
4267 / 2241 / 203
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.09.2011, 11:23 6
Цитата Сообщение от bigredcat Посмотреть сообщение
Т.е. вы разрешаете транспонировать только квадратные матрицы, а не квадратные запрещаете?
Операция транспонирования определена для любых матриц.
0
Заблокирован
Автор FAQ
28.09.2011, 11:34 7
Цитата Сообщение от nxnx Посмотреть сообщение
Язык точно си?
- ах да пербивал с другого топика там на плючах нужно было
C
1
2
3
4
5
6
7
8
9
10
11
12
arr = (double **)malloc(m*sizeof(float *));
        for(i = 0; i < m; i++)
        {
            arr[i] = (double *)malloc(n*sizeof(float));
            for(j = 0; j < n; j++)
            {
                //Чтобы числа в массиве были не очень большими 
                //генерируем их в диапазоне 0 - 100
                printf("%f ",(arr[i][j] = rand()%100));
            }
            printf("\r\n");
        }
Цитата Сообщение от Deviaphan Посмотреть сообщение
И очистка ресурсов не помешает.
На мой взгляд double **arr имеет константный по отношению к циклу адрес, т.е (double **)malloc всё время в одном месте кучи работать будет, так что очищать думаю целесообразно лишь перед выходом из маин и то можно этого не делать ОС тоже может порабоать за нас
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 11:36 8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
На мой взгляд double **arr имеет константный по отношению к циклу адрес
Ты точно malloc и realloc не путаешь?
0
Заблокирован
Автор FAQ
28.09.2011, 11:37 9
Цитата Сообщение от Thinker Посмотреть сообщение
Т.е. вы разрешаете транспонировать только квадратные матрицы, а не квадратные запрещаете?
Операция транспонирования определена для любых матриц.
- да неужто где вы в прямоугольной матрице видели гдавную диагональ???Можно поменять строки со столбцами местами но это не поворот относительно гл диагонали (я именно это под транспонированием подразумеваю). Болле того смена столбцов со строками прямоугольной матрицы в математике лишена какой-либо логики, не мне вам об этом рассказывать...
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 11:37 10
Там же потенциально бесконечный цикл в первом варианте.
0
Заблокирован
Автор FAQ
28.09.2011, 11:41 11
Цитата Сообщение от Deviaphan Посмотреть сообщение
Ты точно malloc и realloc не путаешь?
- сейчас прогоню (я как раз о новом выделении памяти пишу не изменении существующего блока)

Добавлено через 2 минуты
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
сейчас прогоню (я как раз о новом выделении памяти пишу не изменении существующего блока)
- вот в подтверждение
Enter dimension of array
Num of Rows : 3
Num of Colums : 2
pointer to arr : 0xCDCDCDCD
9.000000 10.000000
50.000000 71.000000
39.000000 78.000000
Summ max elements in colums : 128.000000
Y - new input
Enter dimension of array
Num of Rows : 4
Num of Colums : 6
pointer to arr : 0xCDCDCDCD
22.000000 36.000000 71.000000 21.000000 30.000000 85.000000
91.000000 66.000000 41.000000 59.000000 36.000000 19.000000
62.000000 54.000000 9.000000 30.000000 43.000000 24.000000
19.000000 70.000000 25.000000 53.000000 62.000000 40.000000
Summ max elements in colums : 438.000000
Y - new input

Код на Си
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;
}
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 11:53 12
Я просто в шоке! Во первых, что такой красивый адрес (0xCDCDCDCD), больше похожий на отладочный DEADBEEF и что malloc выделяет память по одному и тому же адресу.
Т.е., если бы хотелось хранить "историю", то код вида:
C++
1
2
3
4
5
6
float ** arrх[XXX];
...
arr[xxx] = (float **)malloc(m*sizeof(float *));
...
// А теперь после цикла заглянем в "историю"
arr[2] ...;
Был бы ошибочным.

Добавлено через 1 минуту
Кстати
0xCDCDCDCD is a debugging value that comes from the bowels of the C runtime library. When you allocate a block of memory in a debug build, it's initialized to this spurious value in the hope of catching bugs. 0xCDCDCDCD is non-NULL and is never a valid memory pointer.
Добавлено через 2 минуты

Не по теме:

Перепутал 0xDEADBEEF и 0xBAADF00D.



Добавлено через 2 минуты
А вообще класс!
C++
1
2
                arr = (float **)malloc(m*sizeof(float *));
                printf("pointer to arr : 0x%p\r\n",&arr[0][0]);
Адресс arr не равен адресу arr[0][0], это же не статический массив.)
0
Заблокирован
Автор FAQ
28.09.2011, 11:56 13
Deviaphan, хорошо твоё видение динамического выделения памяти...
0
Deviaphan
28.09.2011, 12:02
  #14

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
хорошо твоё видение динамического выделения памяти...
Не-не-не, ты меня и по MFC, а теперь и просто в С уделал. Мне тебя учить нечему. Пойду повешусь пару раз, что ли...

0
374 / 321 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
28.09.2011, 12:03 15
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
- да неужто где вы в прямоугольной матрице видели гдавную диагональ???Можно поменять строки со столбцами местами но это не поворот относительно гл диагонали (я именно это под транспонированием подразумеваю). Болле того смена столбцов со строками прямоугольной матрицы в математике лишена какой-либо логики, не мне вам об этом рассказывать...
В данном случае вы в основном не правы.
0
Заблокирован
Автор FAQ
28.09.2011, 12:16 16
Цитата Сообщение от bigredcat Посмотреть сообщение
В данном случае вы в основном не правы.
- без оснований больше замечаний не принимаю, каков математический смысл переворота прямоугольной матрицы???!

Добавлено через 10 минут

Не по теме:

Цитата Сообщение от Deviaphan Посмотреть сообщение
Не-не-не, ты меня и по MFC, а теперь и просто в С уделал. Мне тебя учить нечему. Пойду повешусь пару раз, что ли...
- чувак повтори вот это и попоробуй повтори Хотите работать программистом удаленно?, а потом уже пости что ты эксперт в MFC, слабо батл со мной???Например отправка смпт почты или сервак ТСIP, давай уж раз ты такой эксперт, а то только постишь из за кустов:rtfm: Мне не нужно от тебя примеров я и так знаю как realloc использовать, ты отпиши чтобы все видели как ты динамикой Си владеешь а я сейчас выложу код без потери памяти!
Я тебя вызвал (потому что достал как муха лезешь) - так что будь добр ответить хотябы достойным проектом чтобы дальше с тобой вообще говорил!!!



Добавлено через 54 секунды

Не по теме:

bigredcat, я жду или тогда не пиши если не знаешь о чём пишешь!:rtfm:

0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 12:27 17

Не по теме:

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
ты отпиши чтобы все видели как ты динамикой Си владеешь
Юра, не переходя на личности. Для динамических массивов arr == &arr[0], но arr != &arr[0][0]. Если ты этого так и не понимаешь, то я не вижу смысла спорить по этому поводу.



Добавлено через 2 минуты

Не по теме:

Я не могу написать сервак ТСIP. Думаю, никто не может. Разве что если свой стандарт изобрести...

0
374 / 321 / 32
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
28.09.2011, 12:36 18
-=ЮрА=-, что писать-то? Основания? Вы же позволяете себе делать безосновательные и просто неверные утверждения. Почему от других требуете другого?

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
bigredcat, я жду или тогда не пиши если не знаешь о чём пишешь
Я уж, сударь, как-нибудь сам разберусь что мне делать, без ваших запретов/разрешений.
2
Заблокирован
Автор FAQ
28.09.2011, 12:43 19
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я не могу написать сервак ТСIP.
- я говорил о симпл TCIP свезке сервер и клиент без RFC хочешь померяться, но лучше давай SMPT коннект например к mail.ru???Если нет будь добр уважать тех кто с тобой на форуме, или тогда
напиши что то круче чем тот кого ты обгадить пытаешся....
Цитата Сообщение от bigredcat Посмотреть сообщение
Я уж, сударь, как-нибудь сам разберусь что мне делать, без ваших запретов/разрешений.
- ну тогда уволь меня от своих бессмысленных замечаний...
0
Делаю внезапно и красиво
Эксперт С++
1313 / 1228 / 72
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 12:46 20
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
напиши что то круче чем тот кого ты обгадить пытаешся....
Покажи, где я тебя обгадить пытаюсь? Я тебе указываю на ОШИБКУ, а ты переходишь на личности.
А почему сразу smpt? Я вообще ни разу для сети ничего не писал, только ftp загрузчик... оК, щас поМСДНю.
Ни разу TCIP аббревиатуры не встречал. Видимо это то же, что-то из недокументированного...
0
28.09.2011, 12:46
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.09.2011, 12:46
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Закрытая тема Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru