Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++] Преобразование и умножение матриц


Автор: RAMPART 18.11.2006, 19:19
Доброго времени суток.
Прошу помощи по 2-м задачам на матрицы.
Обязательным условием исполения должно являться наличие указателей и массивов. 
Во второй задаче необходимоиспользовать русские символы, где-то так 
Код

char *s="введите что-нибудь";
CharToOem(s,s);
cout<<s;


1 Задача
Реализуйте преобразование двумерной матрицы,где в выходной матрице каждый символ столбцов дублируется по такому примуре: 123->112233. 

2 Задача
Реализовать алгоритм умножения матриц произвольных размеров (KxN и NxM)

Если можно,закомменитруете наиболее сложночитаемые строчки.

Спасибо.

Автор: Alexeis 18.11.2006, 19:46

M
alexeis1
Модератор: Пожалуйста, один топик - один вопрос.

Автор: Rockie 19.11.2006, 17:08
Цитата(RAMPART @  18.11.2006,  19:19 Найти цитируемый пост)
Обязательным условием исполения должно являться наличие указателей и массивов. Во второй задаче необходимоиспользовать русские символы, где-то так 

Во второй задаче http://www.google.md/search?hl=ru&q=C%2B%2B%2C+%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%BD%D0%BE%D0%B6%D0%B5%D0%BD%D0%B8%D0%B5+%D0%BC%D0%B0%D1%82%D1%80%D0%B8%D1%86&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=, в интернете полно материала, к примеруhttp://lectureroom.net/index.php?template=article&ident=80&page=1

Цитата(RAMPART @  18.11.2006,  19:19 Найти цитируемый пост)
1 ЗадачаРеализуйте преобразование двумерной матрицы,где в выходной матрице каждый символ столбцов дублируется по такому примуре: 123->112233. 

"каждый cимвол столбцов"... Программа преобразует все символы двумерного строкового массива:
Код
#include<iostream>
#include<string>


int main(){
  const int N = 3, M = 3;

  std::string words_array[3][3] = { "a", "ab", "c",
                                   "de", "fj", "gij",
                                   "k", "l", "mn" };

 for(int i=0;i<N;i++)      // пробегаемся по массиву слов
   for(int j=0;j<M;j++)
    { std::string temp;    // создаем временнное слово
      int length = words_array[i][j].length();  // узнаем длину слова из массива

      for(int k=0;k<length;k++)          // пробегаемся по самому слову
         for(int l=0;l<2;l++)            // дублируем буквы во временное слово
            temp+= words_array[i][j][k];

      words_array[i][j] = temp;  // в массиве теперь "двойное" слово
      temp.clear();        // очищаем временное
    }


 for(int i=0;i<N;i++)       // распечатываем получившийся массив
  { for(int j=0;j<M;j++)
     std::cout<< words_array[i][j]<< ' ';
     std::cout<<'\n';
  }

 std::cin.get();
 return 0;
}


Автор: RAMPART 23.11.2006, 18:20
Прошу извинений,неправильно изложил условие задачи.
Преобразовываться должны столбцы матрицы. То есть, была матрица
|a b|
|c d| 
а стала 
|a a b b|
|c  c d d|

И главное условие,чтобы использовались массивы и указатели.

Ещё раз заранее спасибо.

Автор: Rockie 23.11.2006, 22:05
Тогда легче создать другой массив, в два раза "шире", и продублировать в него столбцы:
Код
#include<iostream>

using std::cout;
using std::cin;

int main(){
 const int rows = 3, old_cols = 4, cols = old_cols*2;

 char old_array[rows][old_cols] = { 'a','b','c','j', // исходный массив статический
                                    'd','f','g','k',
                                    'h','j','k','l' };

 char** array = new char* [rows];            // выделяем память для строк

 for(int i=0;i<rows;i++)
  array[i] = new char[cols];                 // и в два раза больше для столбцов


 for(int i=0;i<rows;i++)                     // пробегаемся по исходному массиву
 { int counter = 0;
   for(int j=0;j<old_cols;j++)
     { // и дважды записываем каждую букву исходного массива
       array[i][counter] = array[i][counter+1] = old_array[i][j];
       counter+=2;
     }
 }

  for(int i=0;i<rows;i++)                    // выводим на экран
   { for(int j=0;j<cols;j++)
       cout<<array[i][j]<<' ';
     cout<<'\n';
   }

 for(int i=0;i<rows;i++)                     // освобождаем память
   delete [] array[i];
    delete [] array;

 cin.get();
 return 0;
}

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)