Форум программистов, компьютерный форум 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++ Является ли матрица симетричной относительно главной диагонали?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
-=ЮрА=-
Заблокирован
Автор 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;
}
bigredcat
364 / 311 / 3
Регистрация: 24.02.2011
Сообщений: 1,512
Записей в блоге: 1
28.09.2011, 11:06     Переворот массива относительно главной диагонали (транспонирование) #3
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
М == N иначе матрицу нельзя транспонировать
Т.е. вы разрешаете транспонировать только квадратные матрицы, а не квадратные запрещаете?
nxnx
Формучанин
361 / 292 / 16
Регистрация: 02.11.2010
Сообщений: 1,226
28.09.2011, 11:15     Переворот массива относительно главной диагонали (транспонирование) #4
-=ЮрА=-,
C
1
arr[i] = new double[m];
Язык точно си?

Добавлено через 2 минуты
C
1
for(int i = 0,j; i < m; i++)
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 11:16     Переворот массива относительно главной диагонали (транспонирование) #5
И очистка ресурсов не помешает.
Thinker
Эксперт C++
 Аватар для Thinker
4215 / 2189 / 150
Регистрация: 26.08.2011
Сообщений: 3,802
Записей в блоге: 5
28.09.2011, 11:23     Переворот массива относительно главной диагонали (транспонирование) #6
Цитата Сообщение от bigredcat Посмотреть сообщение
Т.е. вы разрешаете транспонировать только квадратные матрицы, а не квадратные запрещаете?
Операция транспонирования определена для любых матриц.
-=ЮрА=-
Заблокирован
Автор 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 всё время в одном месте кучи работать будет, так что очищать думаю целесообразно лишь перед выходом из маин и то можно этого не делать ОС тоже может порабоать за нас
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 11:36     Переворот массива относительно главной диагонали (транспонирование) #8
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
На мой взгляд double **arr имеет константный по отношению к циклу адрес
Ты точно malloc и realloc не путаешь?
-=ЮрА=-
Заблокирован
Автор FAQ
28.09.2011, 11:37     Переворот массива относительно главной диагонали (транспонирование) #9
Цитата Сообщение от Thinker Посмотреть сообщение
Т.е. вы разрешаете транспонировать только квадратные матрицы, а не квадратные запрещаете?
Операция транспонирования определена для любых матриц.
- да неужто где вы в прямоугольной матрице видели гдавную диагональ???Можно поменять строки со столбцами местами но это не поворот относительно гл диагонали (я именно это под транспонированием подразумеваю). Болле того смена столбцов со строками прямоугольной матрицы в математике лишена какой-либо логики, не мне вам об этом рассказывать...
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 11:37     Переворот массива относительно главной диагонали (транспонирование) #10
Там же потенциально бесконечный цикл в первом варианте.
-=ЮрА=-
Заблокирован
Автор 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;
}
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 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], это же не статический массив.)
-=ЮрА=-
Заблокирован
Автор FAQ
28.09.2011, 11:56     Переворот массива относительно главной диагонали (транспонирование) #13
Deviaphan, хорошо твоё видение динамического выделения памяти...
Deviaphan
28.09.2011, 12:02
  #14

Не по теме:

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

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

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

Не по теме:

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



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

Не по теме:

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

Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 12:27     Переворот массива относительно главной диагонали (транспонирование) #17

Не по теме:

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



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

Не по теме:

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

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

Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
bigredcat, я жду или тогда не пиши если не знаешь о чём пишешь
Я уж, сударь, как-нибудь сам разберусь что мне делать, без ваших запретов/разрешений.
-=ЮрА=-
Заблокирован
Автор FAQ
28.09.2011, 12:43     Переворот массива относительно главной диагонали (транспонирование) #19
Цитата Сообщение от Deviaphan Посмотреть сообщение
Я не могу написать сервак ТСIP.
- я говорил о симпл TCIP свезке сервер и клиент без RFC хочешь померяться, но лучше давай SMPT коннект например к mail.ru???Если нет будь добр уважать тех кто с тобой на форуме, или тогда
напиши что то круче чем тот кого ты обгадить пытаешся....
Цитата Сообщение от bigredcat Посмотреть сообщение
Я уж, сударь, как-нибудь сам разберусь что мне делать, без ваших запретов/разрешений.
- ну тогда уволь меня от своих бессмысленных замечаний...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.09.2011, 12:46     Переворот массива относительно главной диагонали (транспонирование)
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
Deviaphan
Делаю внезапно и красиво
Эксперт C++
 Аватар для Deviaphan
1283 / 1217 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
28.09.2011, 12:46     Переворот массива относительно главной диагонали (транспонирование) #20
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
напиши что то круче чем тот кого ты обгадить пытаешся....
Покажи, где я тебя обгадить пытаюсь? Я тебе указываю на ОШИБКУ, а ты переходишь на личности.
А почему сразу smpt? Я вообще ни разу для сети ничего не писал, только ftp загрузчик... оК, щас поМСДНю.
Ни разу TCIP аббревиатуры не встречал. Видимо это то же, что-то из недокументированного...
Yandex
Объявления
28.09.2011, 12:46     Переворот массива относительно главной диагонали (транспонирование)
Закрытая тема Создать тему
Опции темы

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