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

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

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

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 08.05.2011, 20:45   #1
Ворожея
 
Аватар для Ворожея
 
Регистрация: 22.02.2011
Сообщений: 5
По умолчанию С++. Поворот против часовой.

Доброе время суток
помогите, пожалуйста, справиться с заданием.

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

Я честно пыталась сделать это сама и честно смотрела подобные темы на вашем форуме. Но у меня не получилось. вот что у меня вышло последним, то всё равно не поворачивает, а делает вообще что-то хитрое.

Код:
#include <iostream.h>
#include <conio.h>
#include <iomanip.h>

void main()
{
clrscr();
const int M=6;
int a[M][M];
int t, i, j;

for (i=0;i<M;i++)
for (int j=0;j<M;j++)
 {
  cout<<"Vvedite element "<<i<<" stroki "<<j<<" stolbca ";
  cin>>a[i][j];
 }

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

  for (int j=0;j<M;j++)
  cout<<setw(9)<<a[i][j];
  cout<<endl;
 }

 cout<<endl;

for (i=2;i>0;i--)
for (int j=i;j<M-i-2;j++)
  {
    t=a[i][j];
    a[i][j]=a[j][M-i-1];
    a[j][M-i-1]=a[M-i-1][M-j-1];
    a[M-i-1][M-j-1]=a[M-j-1][i];
    a[M-j-1][i]=t;
  }

for (i=0;i<M;i++)
  {
   for (j=0;j<M;j++)
   cout<<setw(9)<<a[i][j];
   cout<<endl;
  }

  getch();
}
я буду вам очень-очень благодарна, если вы мне поможете
Ворожея вне форума Ответить с цитированием
Старый 08.05.2011, 21:49   #2
rustx88
Пользователь
 
Регистрация: 08.05.2011
Сообщений: 42
По умолчанию

это будет обычное транспонирование матрицы

пардон, правильно, это не обычное транспонирование

Код:
#include <iostream>
#include <iomanip>

using namespace std;

void transMatrix(int ** pMatrix, const unsigned r) {

  int
    tmp = 0;

  if (!pMatrix || !r) {
    cout << "\n\tfunction transMatrix return Error!\n";
    return;
  }

  for (unsigned i = 1; i <= (r - 1) / 2; i++) {
    for (unsigned j = i; j < r - 1 - i; j++) {
      tmp = pMatrix[j][i];
      pMatrix[j][i] = pMatrix[i][r - j - 1];
      pMatrix[i][r - j - 1] = pMatrix[r - j - 1][r - i - 1];
      pMatrix[r - j - 1][r - i - 1] = pMatrix[r - i - 1][j];
      pMatrix[r - i - 1][j] = tmp;
    }
  }
}

void printMatrix(int ** pMatrix, const unsigned r) {

  if (!pMatrix || !r) {
    cout << "\n\tfunction printMatrix return Error!\n";
    return;
  }
  cout << "\n***printMatrix***\n";
  for (unsigned i = 0; i < r; i++) {
    for (unsigned j = 0; j < r; j++)
      cout << setw(3) << pMatrix[i][j] << " ";
    cout << endl;
  }
  cout << "*******\n";
}

void inputMatrix(int ** pMatrix, const unsigned r) {
  if (!pMatrix || !r) {
    cout << "\n\tfunction inputMatrix return Error!\n";
    return;
  }
  cout << "\n***inputMatrix***\n";
  for (unsigned i = 0; i < r; i++)
    for (unsigned j = 0; j < r; j++)
      cin >> pMatrix[i][j];
  cout << "\n*******\n";
}

void fillMatrix(int ** pMatrix, const unsigned r) {
  unsigned char
    k = 1;

  if (!pMatrix || !r) {
    cout << "\n\tfunction fillMatrix return Error!\n";
    return;
  }
  for (unsigned i = 0; i < r; i++)
    for (unsigned j = 0; j < r; j++)
      pMatrix[i][j] = k++;
}

int main(void) {
  const unsigned
    N = 5;
  unsigned
    i;
  int
    ** matrix;

  matrix = new int * [N];
  for (i = 0; i < N; i++)
    matrix[i] = new int [N];
  
  //inputMatrix(matrix, N);
  fillMatrix(matrix, N);
  printMatrix(matrix, N);
  transMatrix(matrix, N);
  printMatrix(matrix, N);
  
  for (i = 0; i < N; i++)
    if (matrix[i])
      delete [] matrix[i];
  if (matrix)
    delete [] matrix;

  //---
  cout << "\n\n\tpress [Enter] for exit...";
  flushall();
  getchar();
  return 0;
};

Последний раз редактировалось rustx88; 08.05.2011 в 23:51.
rustx88 вне форума Ответить с цитированием
Старый 08.05.2011, 22:22   #3
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Это не будет обычное транспонирование матрицы!
...
Транспонируйте подматрицу, а потом - "переверните" её вокруг "горизонтальной оси" (поменяйте первую строку (в терминах исходной матрицы и С-шной индексации с нуля) с (n-2)-й, вторую - с (n-3)-й и т.д., не трогая, разумеется, 0-й и (n-1)-й столбцы).
Дубовато, но работает.
Vago вне форума Ответить с цитированием
Старый 08.05.2011, 22:26   #4
N1KeL
Пользователь
 
Аватар для N1KeL
 
Регистрация: 20.04.2009
Сообщений: 58
По умолчанию

Эту строку
Код:
for (int j=i;j<M-i-2;j++)
замените на
Код:
for (int j=i;j<=M-i-2;j++)
N1KeL вне форума Ответить с цитированием
Старый 08.05.2011, 23:01   #5
Ворожея
 
Аватар для Ворожея
 
Регистрация: 22.02.2011
Сообщений: 5
По умолчанию

Ура!!!! спасибо огромное! прям большущее-пребольшущее))))
Ворожея вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поворот изображения на форме (либо поворот файла с картинкой) mystiql Microsoft Office Access 2 21.06.2011 22:03
Часовой циферблат! tat'yana Паскаль, Turbo Pascal, PascalABC.NET 0 25.01.2011 11:32
Время,часовой пояс на сайте. SergeyGavrolov PHP 1 16.11.2010 21:50
Поворот на 90 градусов против часовой стрелки Lindemann Общие вопросы .NET 1 04.01.2010 19:30
Как расположить вершины многоугольника против часовой стрелки ? Вадим Буренков Помощь студентам 7 21.08.2009 10:42