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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 11.12.2010, 21:53   #1
ice_venom
 
Регистрация: 18.12.2009
Сообщений: 4
По умолчанию Паралельное решение системы n линейных уравнений на паскале

На турбо паскале 7 под дос требуется реализовать параллельное решение системы n линейных уравнений методом гауса. Должна быть псевдопараллельность, а в комментариях к коду указано, что
этот кусочек может выполняться на 1 процессоре, другой - на (n+1) процессоре параллельно с 1-м и т.д.
Разумеется, программа выполняется на одном процессоре и пишется только с использованием доступных команд.

Как пример почти того что нужно http://www.viva64.com/ru/a/0032/#ID0E6SIM

Это кошмар какой-то. Что хочет препод? Я никак понять не могу. Помогите пожалуйста.
ice_venom вне форума Ответить с цитированием
Старый 11.12.2010, 22:10   #2
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от ice_venom Посмотреть сообщение
На турбо паскале 7 под дос требуется реализовать параллельное решение системы n линейных уравнений методом гауса. Должна быть псевдопараллельность, а в комментариях к коду указано, что
этот кусочек может выполняться на 1 процессоре, другой - на (n+1) процессоре параллельно с 1-м и т.д.
Разумеется, программа выполняется на одном процессоре и пишется только с использованием доступных команд.

Как пример почти того что нужно http://www.viva64.com/ru/a/0032/#ID0E6SIM

Это кошмар какой-то. Что хочет препод? Я никак понять не могу. Помогите пожалуйста.
А почему бы не спросить самого препода
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 11.12.2010, 22:20   #3
ice_venom
 
Регистрация: 18.12.2009
Сообщений: 4
По умолчанию

Цитата:
А почему бы не спросить самого препода
Написал полноценный, рабочий код без параллельности. Препод сказал, что это бред и кинул ссыль, которую вы можете наблюдать в предыдущем посте, говорит, что все ответы там.
ice_venom вне форума Ответить с цитированием
Старый 11.12.2010, 22:29   #4
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от ice_venom Посмотреть сообщение
Написал полноценный, рабочий код без параллельности. Препод сказал, что это бред и кинул ссыль, которую вы можете наблюдать в предыдущем посте, говорит, что все ответы там.
Как я понял , он хочет что бы ты использовал Thread Process in Pascal , вот только я понятия не имею как это сделать на Паскале , но идея вроде в этом
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 11.12.2010, 22:36   #5
ice_venom
 
Регистрация: 18.12.2009
Сообщений: 4
По умолчанию

Он хочет не Thread Process, а псевдо Thread Process, ибо дос.
А вот как такое реализовать... За этим я собственно сюда и обратился
ice_venom вне форума Ответить с цитированием
Старый 11.12.2010, 22:41   #6
andrewpalkin
Форумчанин
 
Аватар для andrewpalkin
 
Регистрация: 23.11.2010
Сообщений: 458
По умолчанию

Цитата:
Сообщение от ice_venom Посмотреть сообщение
Он хочет не Thread Process, а псевдо Thread Process, ибо дос.
А вот как такое реализовать... За этим я собственно сюда и обратился
Тогда как я понял , разбей решение свой задачи на разные функции , что бы не одна решала , а несколько ... Если твой решение смогут делать несколько разных функций , то это все равно , что несколько процессоров смогут делать это параллельно . Но это только мое мнение , но я бы так и сделал
--- Если я вам помог , то помогите и вы мне . Не просто просите решить задачу , а пробуйте ее сами решить ! Я не пишу программы с нуля , я помогаю поправить код ! ---
andrewpalkin вне форума Ответить с цитированием
Старый 12.12.2010, 19:17   #7
ice_venom
 
Регистрация: 18.12.2009
Сообщений: 4
По умолчанию

Вообщем надо разбить код на небольшие процедуры/функции, которые смогут выполняться одновременно. Как это сделать? Свой код привел ниже.
Код:
program asd;


uses
  crt;
const
  e=0.000001;{поскольку числа вещественные, при проверке точно не сойдется, поэтому вводим погрешность расчетов}
  al = ['A'..'Z','a'..'z'];
var a:array[1..20,1..21] of real;{масив коэфф. и св. членов }
    b:array[1..20] of real;{массив свободных членов  }
    x:array[1..20] of real;  {массив корней уравнения    }
    n,i,j,k:integer;
    r,g:real;


begin
  //clrscr;
  randomize;
  n:=4;
  {Ввод матрицы}
  writeln('Vvedite koeficenti i svobodnie chleni');
  for i:=1 to n do
    for j:=1 to n+1 do
    begin
      write('vvedite a[',i,',',j,'] ');
      read(A[i,j]);
      {a[i,j]:=random(5);  }
    end;
  readln;
  //clrscr;
  {Выводим матрицу пользователю}
  writeln('Matrica koeficentov i svobodnih chlenov');
  for i:=1 to n do
    begin
      for j:=1 to n+1 do
        write(A[i,j]:6:2);
      writeln;
    end;
  readln;
  for i:=1 to n do  { запоминаем свободные члены   }
    b[i]:=a[i,n+1];
  for k:=1 to n do {прямой ход Гаусса, приведение матрицы коэффициентов к треугольному виду}
       begin
         for j:=k+1 to n do
            begin
              if a[k,k]<>0 then
                begin
                  r:=a[j,k]/a[k,k];
                  for i:=k to n do
                     begin
                       a[j,i]:=a[j,i]-r*a[k,i];
                     end;
                   b[j]:=b[j]-r*b[k];
                 end;
             end;
        end;
  writeln('Preobrazovanaya  matrica');
  for i:=1 to n do
    begin
      for j:=1 to n do
        write(A[i,j]:6:2);
        write(b[i]:6:2);
      writeln;
    end;
          readln;

  for k:=n downto 1 do {обратный ход Гаусса, вычисление корней}
       begin
         r:=0;
         for j:=k+1 to n do
           begin
             g:=a[k,j]*x[j];
             r:=r+g;
           end;
		 {Учитываем деление на 0}
        if a[k,k]<>0 then
           x[k]:=(b[k]-r)/a[k,k];
       end;
  {Выводим получившийся ответ}
  writeln('Korni sistemi:');
  for i:=1 to n do
    write('x[',i,']=',x[i]:0:2,'   ');
  writeln;
  readln;


end.
ice_venom вне форума Ответить с цитированием
Старый 12.12.2010, 19:55   #8
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Если я не ошибаюсь распараллелить тут не получится, потому что последующие действия должны работать на основе предидущих.
Сначала нужно получить a[j,i] а только после его наполнения g
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Решение системы линейных уравнений методом Гаусса. maliyusha Помощь студентам 16 18.02.2013 15:44
Решение системы линейных уравнений. методы Крамера и Гаусса Lumos Помощь студентам 3 05.12.2010 12:22
решение системы линейных алгебраических уравнений LediDashuta Помощь студентам 0 23.05.2010 18:40