Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 18.05.2010, 15:57   #1
Purr
Пользователь
 
Аватар для Purr
 
Регистрация: 18.05.2010
Сообщений: 21
Восклицание Повернуть матрицу относительно побочной диагонали

Компилятор Borland C++ 3.1

Сразу предупрежу, что я правда только новичок...только 1 семестр у нас программирование пока что идет...вот)
Никак не получается...
Вообщем задача такая: Имеется квадратная матрица (не менее, чем 6х6). Ввести элементы,распечатать. Повернуть относительно побочной диагонали, за исключением элементов, расположенных в первых и последних строках и столбцах. Дополнительных массивов не создавать. Распечатать результирующий массив.

Я матрицу ввожу 6х6. Она у меня такая, чтобы видеть, перевернулась или нет:

1 1 1 1 1 1
2 2 2 2 2 2
3 3 3 3 3 3
4 4 4 4 4 4
5 5 5 5 5 5
6 6 6 6 6 6

сам текст программы:

#include <iostream.h>
#include <conio.h>
#include <iomanip.h>

void main()
{
clrscr();

float ** a;
int M, N, i, j;

cout << "Vvedite kol-vo strok i stolbcov matrici" << endl;
cin >> M >> N;
a=new float* [M];

for(i=0;i<M;i++)
{
a[i]=new float[N];
}
//=================================== =============================

for(i=0;i<M;i++)
for(j=0;j<N;j++)
{
cout << "Vvedite elementi stroki: " << i << " i stolbca: " << j << endl;
cin >> a[i][j];
}
//=================================== ==============

for(i=0;i<M;i++)
{
cout << endl;

for(j=0;j<N;j++)
cout << setw(8) << a[i][j];
}
cout << endl;
//=================================== ==============
int t;

for(i=M-i;i<M-j-1;i++)
for(j=N-j;j<N-i-1;j++)
{
if(a[M-i][N-j]<a[M-j-1][N-i-1])
{
t=a[i][j];
a[i][j]=a[M-j][N-i];
a[M-j][N-i]=t;
}
}
//=================================== ==============

cout << endl;
cout << "Novii massiv" << endl;

for (i=0;i<M;i++)
{
cout << endl;
for (j=0;j<N;j++)
cout << setw(8) << a[i][j];
}
cout << endl;
cout << "Nagmite lubuy klavishu" << endl;

getch();
}

Там, где выделено красным, там проблемы...
— Марвин, ты спас нам жизнь!
— Кошмар, правда?
(с) The Hitchhiker's Guide to the Galaxy

Последний раз редактировалось Purr; 18.05.2010 в 16:11.
Purr вне форума Ответить с цитированием
Старый 18.05.2010, 16:16   #2
Purr
Пользователь
 
Аватар для Purr
 
Регистрация: 18.05.2010
Сообщений: 21
По умолчанию

Или всё-таки сначала нужно ввести элементы первой половины матрицы до диагонали и отразить их?
— Марвин, ты спас нам жизнь!
— Кошмар, правда?
(с) The Hitchhiker's Guide to the Galaxy
Purr вне форума Ответить с цитированием
Старый 18.05.2010, 17:04   #3
Ol'ga_new
Форумчанин
 
Регистрация: 12.05.2010
Сообщений: 125
По умолчанию

А я думаю можно так:
-цикл по строкам (всем)
-цикл по столбцам (всем)
-- проверка чтобы индексы i<> 1 и j<>1, а также i<> N и j<>N (таким образом исключаем крайние строки и столбцы)
-- проверка чтобы сумма i+j<N (так проходим по всем элментам левой половины относительно матрицы побочной диагонали)
-- меняем местами с помощью доп. переменной в которую заносим значение a[i][j], а значение a[i][j] изменится на a[n+1-j][n+1-i], ну а a[n+1-j][n+1-i] на значение хранящиеся в переменной (т.е. a[4][2] в матрице размером n=6 поменяется значением с а[6+1-2][6+1-4], т.е.а[5][3] )
дерзай...!
Ol'ga_new вне форума Ответить с цитированием
Старый 18.05.2010, 17:54   #4
Purr
Пользователь
 
Аватар для Purr
 
Регистрация: 18.05.2010
Сообщений: 21
По умолчанию

Попробовала. Он мне меняет только левую часть на какие-то страшные цифры с экспонентами...
— Марвин, ты спас нам жизнь!
— Кошмар, правда?
(с) The Hitchhiker's Guide to the Galaxy
Purr вне форума Ответить с цитированием
Старый 18.05.2010, 18:46   #5
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Соревнование "Кто придумает самый запутанный алгоритм решения элементарной задачи?"...
Код:
...
for (int row = 1; row < n-2; row++ ) {
    for (int col = 1; col < n-row-1; col++ ) {
        t = a[row][col];
        a[row][col] = a[n-col-1][n-row-1];
        a[n-col-1][n-row-1] = t;
    }
}
...
Vago вне форума Ответить с цитированием
Старый 18.05.2010, 18:56   #6
Purr
Пользователь
 
Аватар для Purr
 
Регистрация: 18.05.2010
Сообщений: 21
Хорошо

Спасибо огромное!!!
Всё отлично!!!..
— Марвин, ты спас нам жизнь!
— Кошмар, правда?
(с) The Hitchhiker's Guide to the Galaxy

Последний раз редактировалось Purr; 18.05.2010 в 18:58.
Purr вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Транспонирование матрицы относительно побочной диагонали CodeExpert Помощь студентам 2 18.01.2010 10:28
Максимальный элемент побочной диагонали матрицы Mariya0202 Помощь студентам 8 16.10.2009 09:05
подсчитывать сумму главной и побочной диагонали Fantazerishka Помощь студентам 2 14.10.2009 21:55
Сортировка побочной диагонали Pascal Erges Паскаль, Turbo Pascal, PascalABC.NET 3 10.09.2009 12:15
Найти отношения суммы элементов главной диагонали и суммы элементов побочной диагонали квадратной матрицы Elmander Помощь студентам 2 21.06.2007 07:15