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

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

Вернуться   Форум программистов > Работа для программиста > Фриланс
Регистрация

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2009, 18:37   #1
MaxDDT
Пользователь
 
Регистрация: 08.12.2009
Сообщений: 10
По умолчанию Распаралелить программу

Здравствуйте уважаемые форумчане!

Нужно распаралелить программу которая меняет местами столбцы 2-х мерного массива. Массив размером 10*10
Количество потоков - 5.
ОС- WindowsXP
IDE - MS Visual Studio 2008 C++

Вот я сделал её, но не приложу ума как распаралелить.

Код:


#include <iostream>
#include <windows.h>
using namespace std;

int main()
{
SetConsoleOutputCP (1251);

int mas[10][10];
int i,j,n=10,stolbec_a,stolbec_b,buf;

cout << "Массив случайных чисел 10*10\n";
cout << endl;


/*-----------------------------Ввод массива------------------------------------*/
for (i=0; i<n; i++) //строки
for (j=0; j<n; j++) //столбцы
{mas[i][j]=rand()%50;}


/*--------------------------Вывод массива на экран-------------------------------*/
for (i=0; i<n; i++) //строки
{
for (j=0; j<n; j++) //столбцы
{cout << "a[" << i <<j << "]= " << mas[i][j] << "\t";}
cout << endl;
}

/*------------------------Выбор столбцов для перемещения------------------------*/
cout << "\nВведите номер столбца 'A' который вы хотите поменять местами с столбцом В\n";
cin >> stolbec_a;
cout << "Введите номер столбца 'B' (на место которого вы хотите поставить столбец А)\n";
cin >> stolbec_b;
if (stolbec_a >n && stolbec_b >n)
{
cout << "Вы ввели недопустимые значения \n";
}
cout << "Вы хотите поменять местами столбец номер " << stolbec_a <<" с столбцом номер " << stolbec_b << endl;


/*------------------------Перемещиние столбцов------------------------*/
for (i=0; i<n; i++)
{
buf = mas[i][stolbec_a];
mas[i][stolbec_a] = mas[i][stolbec_b];
mas[i][stolbec_b] = buf;
}

/*--------------------------Вывод результата на экран-------------------------------*/
for (i=0; i<n; i++) //строки
{
for (j=0; j<n; j++) //столбцы
{cout << "a[" << i <<j << "]= " << mas[i][j] << "\t";}
cout << endl;
}


cin.get();
cin.get();
}

Сколько это будет стоить?

Последний раз редактировалось MaxDDT; 11.12.2009 в 18:39.
MaxDDT вне форума Ответить с цитированием
Старый 11.12.2009, 20:21   #2
Фенрир
fenryrroa@mail.ru
Пользователь
 
Регистрация: 20.01.2009
Сообщений: 10
По умолчанию

могу
рублей 200
icq 399722458
Фенрир вне форума Ответить с цитированием
Старый 11.12.2009, 20:43   #3
Фенрир
fenryrroa@mail.ru
Пользователь
 
Регистрация: 20.01.2009
Сообщений: 10
По умолчанию

вообще сделай лучше сам, если начал!
доделай до конца!
я думаю пусть 1й поток меняет столбцы в строках 0 и 1
поток 2 в строкаъ 2 и 3
поток 3 в строках 4 и 5
и так далее...

чтото в этом роде
Код:
   struct tdata
  {
       int sa, sb ;
       int** mass;
      tdata (int** m, int a , int b ) : mass (m) , sa (a), sb (b) {}    
   };


   int WINAPI ThreadFunc (VOID* param)
     {
          tdata * data = (tdata*) param ;
        int  buf = data ->mas[0][sdata->sa];
        data ->mas[0][data->sa] = data -> mas[0][data->sb];
        data -> mas[0][data->sb] = buf; 
          buf = data ->mas[1][sdata->sa];
        data ->mas[1][data->sa] = data -> mas[1][data->sb];
        data -> mas[1][data->sb] = buf; 
       return 0;
      }

      int main ()
     {
          int** mass = new int* [10];
         for (int i = 0 ; i <10; i++)
         mass[i] = new int [10];
            DWOED dwId;
            int a = 3;
            int b = 6; 
               // поток меняет столбцы на строках 0 и 1
              // для 2 и 3 передавай &mass[2]
                HANDLE hThread = CreateThread (
                                                                     NULL,
						  0,
                                                                     ThreadFunc ,
		    (VOID*) new tdata (&mass[0] , a , b) ,
                                                                     0,
						  &dwId
		               );


                                                    

      }
Фенрир вне форума Ответить с цитированием
Старый 11.12.2009, 21:13   #4
MaxDDT
Пользователь
 
Регистрация: 08.12.2009
Сообщений: 10
По умолчанию

2Фенрир

Спасибо, попробую. Просто есть некоторые неясности, поэтому начал вдаваться в крайности. Спасибо за помощь.
MaxDDT вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Распаралелить программу MaxDDT Общие вопросы C/C++ 13 18.12.2009 03:17
Подскажите программу Progs1024 Софт 0 01.12.2009 20:09
Написал программу, помогите натянуть Шейдеры или как нибудь модифицировать программу WMLite Паскаль, Turbo Pascal, PascalABC.NET 0 16.06.2009 13:57
Изменить программу HECTOR.A. Помощь студентам 0 05.06.2009 00:06
Напишу программу alex-v Фриланс 3 05.09.2007 14:10