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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Преобразование и умножение матриц 
:(
    Опции темы
RAMPART
Дата 18.11.2006, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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


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

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

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

Спасибо.
PM   Вверх
Alexeis
Дата 18.11.2006, 19:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Амеба
Group Icon


Профиль
Группа: Админ
Сообщений: 11743
Регистрация: 12.10.2005
Где: Зеленоград

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




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



--------------------
Vit вечная память.

Обсуждение действий администрации форума производятся только в этом форуме

гениальность идеи состоит в том, что ее невозможно придумать
PM ICQ Skype   Вверх
Rockie
Дата 19.11.2006, 17:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

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



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

Во второй задаче перемножение матриц, в интернете полно материала, к примеруздесь описана функция перемножения на Си.

Цитата(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;
}




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
RAMPART
Дата 23.11.2006, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



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

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

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

PM   Вверх
Rockie
Дата 23.11.2006, 22:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

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



Тогда легче создать другой массив, в два раза "шире", и продублировать в него столбцы:
Код
#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;
}



--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

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

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


 




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


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

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