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

Переставить блоки матрицы размера n*n крест накрест. - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.80
Kotowed
0 / 0 / 0
Регистрация: 11.07.2011
Сообщений: 12
11.07.2011, 18:33     Переставить блоки матрицы размера n*n крест накрест. #1
Дана действительная квадратная матрица порядка 2n. Получить новую матрицу,переставляя её блоки размера n*n крест накрест на языке Си.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
absokolov
29 / 29 / 1
Регистрация: 10.05.2011
Сообщений: 120
11.07.2011, 18:35     Переставить блоки матрицы размера n*n крест накрест. #2
Цитата Сообщение от Kotowed Посмотреть сообщение
Дана действительная квадратная матрица порядка 2n. Получить новую матрицу,переставляя её блоки размера n*n крест накрест на языке Си.
Помог бы, но не совсем понял задание )))))))
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
11.07.2011, 18:39     Переставить блоки матрицы размера n*n крест накрест. #3
Kotowed, отсюда пример немного переделайте...
Kotowed
0 / 0 / 0
Регистрация: 11.07.2011
Сообщений: 12
11.07.2011, 18:45  [ТС]     Переставить блоки матрицы размера n*n крест накрест. #4
Цитата Сообщение от absokolov Посмотреть сообщение
Помог бы, но не совсем понял задание )))))))
Дана действительная квадратная матрица порядка 2n. Получить новую матрицу, переставляя её блоки размера N x N :
Изображения
 
Kotowed
0 / 0 / 0
Регистрация: 11.07.2011
Сообщений: 12
11.07.2011, 19:59  [ТС]     Переставить блоки матрицы размера n*n крест накрест. #5
Цитата Сообщение от easybudda Посмотреть сообщение
Kotowed, отсюда пример немного переделайте...
как я понимаю вот в этом блоке надо переделать?


C
1
2
3
4
5
6
7
8
9
10
11
12
13
 
        for ( i = 0; i < N; ++i )
                for ( j = 0; j < N; ++j )
                        matrix[i][j] = 1;
        for ( i = 0; i < N; ++i )
                for ( j = N; j < DVA_N; ++j )
                        matrix[i][j] = 2;
        for ( i = N; i < DVA_N; ++i )
                for ( j = N; j < DVA_N; ++j )
                        matrix[i][j] = 3;
        for ( i = N; i < DVA_N; ++i )
                for ( j = 0; j < N; ++j )
                        matrix[i][j] = 4;
Paporotnik
383 / 227 / 7
Регистрация: 06.07.2011
Сообщений: 512
11.07.2011, 20:07     Переставить блоки матрицы размера n*n крест накрест. #6
нет, не в этом. еще попытка?
Kotowed
0 / 0 / 0
Регистрация: 11.07.2011
Сообщений: 12
11.07.2011, 20:15  [ТС]     Переставить блоки матрицы размера n*n крест накрест. #7
Цитата Сообщение от Paporotnik Посмотреть сообщение
нет, не в этом. еще попытка?
Тогда тут?

C
1
2
3
4
5
6
    for ( i = 0; i < N; ++i ){
                memcpy(buf, &matrix[i][0], sizeof(int) * N);
                memcpy(&matrix[i][0], &matrix[N + i][0], sizeof(int) * N);
                memcpy(&matrix[N + i][0], &matrix[N + i][N], sizeof(int) * N);
                memcpy(&matrix[N + i][N], &matrix[i][N], sizeof(int) * N);
                memcpy(&matrix[i][N], buf, sizeof(int) * N);
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.07.2011, 20:19     Переставить блоки матрицы размера n*n крест накрест. #8
Цитата Сообщение от Kotowed Посмотреть сообщение
Тогда тут?
да, именно тут
Kotowed
0 / 0 / 0
Регистрация: 11.07.2011
Сообщений: 12
11.07.2011, 20:27  [ТС]     Переставить блоки матрицы размера n*n крест накрест. #9
Цитата Сообщение от Maxwe11 Посмотреть сообщение
да, именно тут
Теперь бы понять что именно :cofee2:
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.07.2011, 20:30     Переставить блоки матрицы размера n*n крест накрест. #10
Цитата Сообщение от Kotowed Посмотреть сообщение
Теперь бы понять что именно :cofee2:
гугл вам в помощь, посмотрите что такое memcpy, подумайте подходит вам или нет, если нет, то значит надо найти другую функцию по работе с памятью

подсказка префикc названий функций по работе с памятью - mem*
Kotowed
0 / 0 / 0
Регистрация: 11.07.2011
Сообщений: 12
11.07.2011, 20:33  [ТС]     Переставить блоки матрицы размера n*n крест накрест. #11
Цитата Сообщение от Maxwe11 Посмотреть сообщение
гугл вам в помощь, посмотрите что такое memcpy, подумайте подходит вам или нет, если нет, то значит надо найти другую функцию по работе с памятью

подсказка префикc названий функций по работе с памятью - mem*
А вы не могли бы помочь? Просто было бы прекрасно, а то ещё задания имеются, над которыми приходится голову ломать
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
11.07.2011, 20:35     Переставить блоки матрицы размера n*n крест накрест. #12
вы испугались слова "подумайте" или слова "гугл"? так в армии нет ни того ни другого
Kotowed
0 / 0 / 0
Регистрация: 11.07.2011
Сообщений: 12
11.07.2011, 20:38  [ТС]     Переставить блоки матрицы размера n*n крест накрест. #13
Цитата Сообщение от Maxwe11 Посмотреть сообщение
вы испугались слова "подумайте" или слова "гугл"? так в армии нет ни того ни другого
До армии ещё далеко и рановато.
easybudda
Модератор
Эксперт С++
 Аватар для easybudda
9373 / 5423 / 914
Регистрация: 25.07.2009
Сообщений: 10,423
11.07.2011, 20:42     Переставить блоки матрицы размера n*n крест накрест. #14
Kotowed, "найди 7 отличий"
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
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
 
#define N 4
#define DVA_N (N * 2)
 
int main(void){
        int matrix[DVA_N][DVA_N], i, j;
        int buf[N];
        
        for ( i = 0; i < N; ++i )
                for ( j = 0; j < N; ++j )
                        matrix[i][j] = 1;
        for ( i = 0; i < N; ++i )
                for ( j = N; j < DVA_N; ++j )
                        matrix[i][j] = 2;
        for ( i = N; i < DVA_N; ++i )
                for ( j = N; j < DVA_N; ++j )
                        matrix[i][j] = 3;
        for ( i = N; i < DVA_N; ++i )
                for ( j = 0; j < N; ++j )
                        matrix[i][j] = 4;
        
        printf("Before:\n");
        for ( i = 0; i < DVA_N; ++i )
                for ( j = 0; j < DVA_N; ++j )
                        printf("%2d%c", matrix[i][j], ( j < DVA_N - 1 ) ? ' ' : '\n');
        
        for ( i = 0; i < N; ++i ){
                memcpy(buf, &matrix[i][0], sizeof(int) * N);
                memcpy(&matrix[i][0], &matrix[N + i][N], sizeof(int) * N);
                memcpy(&matrix[N + i][N], buf, sizeof(int) * N);
                memcpy(buf, &matrix[i][N], sizeof(int) * N);
                memcpy(&matrix[i][N], &matrix[N + i][0], sizeof(int) * N);
                memcpy(&matrix[N + i][0], buf, sizeof(int) * N);
        }
        
        printf("After:\n");
        for ( i = 0; i < DVA_N; ++i )
                for ( j = 0; j < DVA_N; ++j )
                        printf("%2d%c", matrix[i][j], ( j < DVA_N - 1 ) ? ' ' : '\n');
        
        exit(0);
}
Ну и grizlik78 там верно заметил - это я что-то странное написал...
kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
11.07.2011, 21:27     Переставить блоки матрицы размера n*n крест накрест. #15
Для того, чтобы работа с матрицами была эффективной и приятной, необходимо скачать у меня класс mymatrix, который распространяется по лицензии GPL. Тогда, в частности, эта задача сведётся к такому коду:
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
#include <mymatrix.h>
#include <algorithm>
#define dlina_storoni 10 
using namespace std;
 
int main () {
 
 //Кропаем матрицу и инициализируем её
 matrix<double> matritsa (dlina_storoni, dlina_storoni);
 matritsa.init_rand (0, 99);
 
 //смотрим матрицу
 matritsa.vivod ();
 printf ("\n\n\n");
 
 
 //пошёл обмен
 for (int i= 0; i< dlina_storoni; i++)
  for (int j= 0; j< dlina_storoni/2;j++)
   swap(matritsa[i][j], matritsa[i][j+ dlina_storoni/2]);
 
 //И ещё раз:
 for (int j= 0; j< dlina_storoni; j++)
  for (int i= 0; i< dlina_storoni/2; i++)
   swap(matritsa[i][j], matritsa[i+ dlina_storoni/2][j]);
 
 //и ещё смотрим, чё получилось
 matritsa.vivod ();
 
 getchar ();
 return 0;
}
Миниатюры
Переставить блоки матрицы размера n*n крест накрест.  
Jupiter
11.07.2011, 22:10
  #16

Не по теме:

Цитата Сообщение от kravam Посмотреть сообщение
Для того, чтобы работа с матрицами была эффективной и приятной, необходимо скачать у меня класс mymatrix
kravam, где скачать?а документация есть?)

kravam
быдлокодер
 Аватар для kravam
1512 / 872 / 44
Регистрация: 04.06.2008
Сообщений: 5,271
11.07.2011, 22:18     Переставить блоки матрицы размера n*n крест накрест. #17
Скачать у меня, этот класс мой, вся документация на русском языке присутствует.
asics
11.07.2011, 22:23
  #18

Не по теме:

Цитата Сообщение от kravam Посмотреть сообщение
Скачать у меня, этот класс мой, вся документация на русском языке присутствует.
ну клоун...

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.07.2011, 22:24     Переставить блоки матрицы размера n*n крест накрест.
Еще ссылки по теме:

C++ Разработать алгоритм и написать по нему программу умножения матрицы А размера m × n на матрицу В размера n × p. Значение величин m, n, р выбрать из та
Дан массив размера 10. Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами C++

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

Или воспользуйтесь поиском по форуму:
Jupiter
11.07.2011, 22:24     Переставить блоки матрицы размера n*n крест накрест.
  #19

Не по теме:

Цитата Сообщение от kravam Посмотреть сообщение
Скачать у меня, этот класс мой, вся документация на русском языке присутствует.
ну дык кинь ссылку в личку)

Yandex
Объявления
11.07.2011, 22:24     Переставить блоки матрицы размера n*n крест накрест.
Ответ Создать тему
Опции темы

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