Модераторы: Daevaorn

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Транспонирование матриц, любых размеров. С++ 
:(
    Опции темы
Romikgy
Дата 11.9.2006, 18:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 8
Всего: 146



Код

Input the size of array:2 3
input the elements of array:
1
2
3
4
5
6


Origin matrix
1       2       3
4       5       6


Transpon matrix
1       4
2       5
3       6

Код

int nrow, ncol,i;
      cout<<"Input the size of array:";
      cin>>nrow>>ncol;
      int **a=new int *[nrow];
      for( i=0; i<nrow; i++)
      a[i]=new int [ncol];
      cout<<"input the elements of array:"<<endl;
      for(i=0; i<nrow; i++)
     {
          for(int j=0; j<ncol; j++)
          {
               cin>>a[i][j];
          }
     }
     cout<<"\n\nOrigin matrix\n";
     for(i=0; i<nrow; i++)
     {
          for(int j=0; j<ncol; j++)
          {
               cout<<a[i][j]<<"\t";
          }
          cout<<"\n";
     }
     cout<<"\n\nTranspon matrix\n";
     for(i=0; i<ncol; i++)
     {
          for(int j=0; j<nrow; j++)
          {
               cout<<a[j][i]<<"\t";
          }
          cout<<"\n";
     }
     //////////////
     //int **a=new int *[nrow];
      for(int i=0; i<nrow; i++)
      delete [] a[i];
      delete [] a;



--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
MAKCim
Дата 11.9.2006, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 52
Всего: 207



Цитата

MAKCim, дай пожалуйста ссылку на тему о векторах в С++ ибо я об этом ничего ровным счётом не знаю, посмотрю сам, чтобы тут людей не доставать.

Кроме Страуструпа (16.3) ссылок дать не могу


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
SteN
Дата 12.9.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 7
Регистрация: 4.9.2006
Где: Брянск

Репутация: нет
Всего: нет



А что потом от транспонированной матрици нужно? 
Не проще класс написать с нужными методами и флагом транспонирования? Или надо именно двумерный массив?

PM MAIL ICQ   Вверх
bsa
Дата 12.9.2006, 23:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 63
Всего: 196



Имхо, лучше использовать одномерный массив в данном случае. А при транспонировании не только менять сам массив, но и количество строк и столбцов местами. А позицию вычислять методом умножения: pos = y * col_count + x. Конечно, не самый быстрый алгоритм, но все же.
PM   Вверх
Dov
Дата 15.9.2006, 07:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Имхо, что имхо bsa правильное. В одномерном массиве делать это лучше, но можно и в двухмерном


--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Dov
Дата 18.9.2006, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 15
Всего: 88



Что-нибудь такое, например.
Код
#include <iostream.h>
#include <iomanip.h>

void ShiftArray(int *ar, int first, int last)
{
    // сдвиг части массива
    int temp = ar[first];

    for(int i = first; i < last; i++)
        ar[i] = ar[i + 1];

    ar[last] = temp;
}

void Transposition(int *ar, int row, int col)
{
    // транспонируем матрицу
    int last = col * row - 1;

    if(col > 1)
    {
        for(int i = row - 1; i; i--)
            ShiftArray(ar, col * i - 1, --last);

        Transposition(ar, row, col - 1);
    }
}

void PrintMatrix(int *ar, int height, int width)
{
    // здесь я просто балуюсь
    static bool ok;
    cout << (ok ? "\nAfter:\n" : "Before:\n");
    ok = !ok;
    
    // выводим значения массива построчно, формируя на экране матрицу
    for(int i = 0; i < height; i++)
    {
        for(int j = 0; j < width; j++)
            cout << setw(4) << ar[i * width + j];
        cout << endl;
    }
}

int main()
{
    const int row  = 3;
    const int col  = 5;

    // двухмерный массив для хранения значений матрицы
    int ar[row][col];                     
    for(int i = 0; i < row; i++)
        for(int j = 0; j < col; j++)
            ar[i][j] = i * col + j + 1;
/*
    // но можно использовать и одномерный
    int ar[row * col];            
    for(int i = 0; i < row * col; i++)
        ar[i] = i + 1;
*/    
    PrintMatrix  ((int*)ar, row, col);
    Transposition((int*)ar, row, col);
    PrintMatrix  ((int*)ar, col, row);

    return 0;
}



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0520 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.