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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Перестановка столбцов матрицы! 
:(
    Опции темы
Baton2007
Дата 16.12.2010, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Есть матрица 9 на 3 и массив 9 элементов.
В массиве содержатся индексы перестановки
user posted image
Столбцы нужно переместить по индеку 1 на 4, 2 на 8, 3 на 1.......
Мой код что-то не пашет!
Код

// перестановка
  int key=0;
for (int i=0; i<N; i++)
  {

     for(int j=0; j<M; j++)

     {
          newMatrix[KeyArray[key]] [j]=matrixKod[i][j];
          cout<<newMatrix[KeyArray[key]] [j];
     }
     key++;
      cout<<endl;
  }


Это сообщение отредактировал(а) Baton2007 - 16.12.2010, 19:23
PM MAIL   Вверх
Crafty
Дата 16.12.2010, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Используй дополнительную переменную для перестановки.
Код

 int key=0;
 char temp;
for (int i=0; i<N; i++)
  {
     for(int j=0; j<M; j++)
     {
          temp = matrixKod[i][KeyArray[j]];
          matrixKod[i][KeyArray[j]] = matrixKod[i][j];
          matrixKod[i][j] = temp;
     }
     key++;
      cout<<endl;
  }


Это сообщение отредактировал(а) Crafty - 16.12.2010, 20:27
PM MAIL   Вверх
Baton2007
Дата 16.12.2010, 20:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Не помогло !
PM MAIL   Вверх
Crafty
Дата 16.12.2010, 20:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Ты хочешь саму матрицу изменить или новую получить
Если саму то вот так
Код

 int key=0;
 char temp;
for (int i=0; i<N; i++)
  {
     for(int j=0; j<M; j++)
     {
          temp =  matrixKod[i][KeyArray[key]];
          matrixKod[i][KeyArray[key]] = matrixKod[i][j];
          matrixKod[i][j] = temp;
     }
     key++;
      cout<<endl;
  }


Это сообщение отредактировал(а) Crafty - 16.12.2010, 20:09
PM MAIL   Вверх
Baton2007
Дата 16.12.2010, 20:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Мне можно изменить существующую или получить новую это не принципиально! Твой код мне выдает непонятные символы!!
PM MAIL   Вверх
Crafty
Дата 16.12.2010, 20:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Посмотри вот примерно накатал http://liveworkspace.org/code/b710b88e7d2d...505607f558cb700
PM MAIL   Вверх
Baton2007
Дата 16.12.2010, 21:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



почему с char не коректно выводит ??
user posted image

Это сообщение отредактировал(а) Baton2007 - 16.12.2010, 22:15
PM MAIL   Вверх
Crafty
Дата 17.12.2010, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Покажи весь код.
Разницы нету char или int http://liveworkspace.org/code/0932233fd2fa...0f5964c69bc49b8
PM MAIL   Вверх
Baton2007
Дата 17.12.2010, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Crafty огромное спасибо за помощь я все исправил, просто индексы перестановки получал в char формате  , получил их в int и все заработало!!
Может кому пригодится !
Код

#include <iostream>
#include <string>
#include <windows.h>
using namespace std;
// Перегрузка оператора для вывода русских букв
ostream& operator<<(ostream& out, const char* str)
{
    char buf[100];
    if(CharToOem(str, buf))
    {
        for(int i = 0; str[i] != 0; i++)
            out << buf[i];
    }
    return out;
}
int main()
{
const int N=3;
const int M=9;
char KeyArray[9];
char matrixKod[N][M];
char newMatrix[N][M];
int indexArray[9];
cout<<"Введите ключ-9 символов латинского алфавита:"<<endl;
// заполняем ключевым словом массив
    for(int i=0; i<9; i++)
    {     char c= cin.get();
           if (c != '\n')
           {
           KeyArray[i]=c;
           }
           else{break;}


    }
// получаем индексы сдвига по номерам букв
int indexLiter=1;

for(char j='a'; j<'z'; j++)
{

    for(int i=0; i<9; i++)
    {
      if(KeyArray[i]==j)
      {
      indexArray[i]=indexLiter;
          indexLiter++;
      }
      }
    }


    // заполняем матрицу
     char z='a';

        for (int i=0; i<N; i++)
  {
      for(int j=0; j<M; j++)
      {
          matrixKod[i][j]=z;
          z++;
      }
  }
  cout<<endl;
  cout<<"Полученая матрица:"<<endl;
        for (int i=0; i<N; i++)
  {
      for(int j=0; j<M; j++)

      {
          cout<<matrixKod[i][j];
      }
      cout<<endl;
  }
  cout<<endl;
  cout<<"Индексы перестановки:"<<endl;
for(int i=0; i<9; i++)
    {
        cout<<indexArray[i];
    }

    cout<<endl<<endl;

  // перестановка
  char temp;

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

          temp = matrixKod[i][indexArray[j]];
          matrixKod[i][indexArray[j]] = matrixKod[i][j];
          matrixKod[i][j] = temp;

     }
}
cout<<"Шифрованая матрица:"<<endl;
for (int i=0; i<N; i++)
  {
    for(int j=0; j<M; j++)
    {


      std::cout <<matrixKod[i][j] << " ";

    }
    std::cout << std::endl;
  }

      cout<<endl;


    return 0;
}



Это сообщение отредактировал(а) Baton2007 - 17.12.2010, 10:55
PM MAIL   Вверх
Dov
Дата 17.12.2010, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(Baton2007 @  17.12.2010,  08:16 Найти цитируемый пост)
и все заработало!!

что-то не похоже, по-моему, что работает так, как было заявлено в начале...
Цитата(Baton2007 @  16.12.2010,  18:21 Найти цитируемый пост)
Столбцы нужно переместить по индеку 1 на 4, 2 на 8, 3 на 1.......


Добавлено через 4 минуты и 49 секунд
Кроме того, будет выход за пределы массива:
Код

int indexLiter=1;
  ...
 indexArray[i]=indexLiter;
 indexLiter++;


Добавлено через 6 минут и 55 секунд
вот здесь:
Код

 temp = matrixKod[i][indexArray[j]];
 matrixKod[i][indexArray[j]] = matrixKod[i][j];



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


Шустрый
*


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

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



Да действительно переполнение, спасибо исправил!!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


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

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


 




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


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

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