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

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

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 22.05.2015, 11:30   #1
Marianna22
Пользователь
 
Регистрация: 04.05.2012
Сообщений: 24
По умолчанию параллельный просмотр элементов массива

здравствуйте!
Помоги пожалуйста.
Есть задача: Разработайте программу поиска максимального элемента в целочисленном массиве а[1:n] путем параллельного просмотра его четных и нечетных элементов. Докажите, что все процессы свободны от взаимного влияния
Сделала просто поиск элемента. Как сделать так, чтобы поиск элемента был путем параллельного просмотра???
Код:
uses
  SysUtils;

var arr:array[1..20] of integer;
    i,minEven,minOdd,maxEven,maxOdd,max:integer;
    // n: byte;

begin
  randomize;

for i:=1 to 20 do
begin
  arr[i] := random(100);
end;

minEven:=100;
minOdd:=100;
maxEven:=0;
maxOdd:=0;

for i:=1 to 20 do
begin
  if(arr[i] mod 2 = 0) then
    begin
      if(arr[i]>maxEven) then maxEven:=arr[i];
      if(arr[i]<minEven) then minEven:=arr[i];
    end
    else
    begin
      if(arr[i]>maxOdd) then maxOdd:=arr[i];
      if(arr[i]<minOdd) then minOdd:=arr[i];
    end;

end;

if  (maxEven > maxOdd) then max:=maxEven else max:=maxOdd;

for i:=1 to 20 do
begin
   writeln(arr[i]);
end;

writeln('Min chetnoe - ',minEven);
writeln('Max chetnoe - ',maxEven);
writeln('Min nechetnoe - ',minOdd);
writeln('Max nechetnoe - ',maxOdd);
writeln('Max - ',max);
   Readln;
end.

Последний раз редактировалось Marianna22; 22.05.2015 в 11:36.
Marianna22 вне форума Ответить с цитированием
Старый 22.05.2015, 11:40   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Тебе что-нибудь говорит слово TThread?
У вас в методичке что-нибудь есть об этом классе?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 22.05.2015, 17:26   #3
Marianna22
Пользователь
 
Регистрация: 04.05.2012
Сообщений: 24
По умолчанию

А вот это похоже на параллельное программирование?
Код:
program Project1;

{$APPTYPE CONSOLE}

uses
  SysUtils, Classes;

type
  TThread1 = class(TThread)
   private
   protected
     procedure Execute; override;
   end;

  TThread2 = class(TThread)
  private
    protected
    procedure Execute; override;
   end;


var arr:array[1..20] of integer;
    i,minEven,minOdd,maxEven,maxOdd,max:integer;


 procedure TThread1.Execute;
   begin
    for i:=1 to 20 do
      begin
       if(arr[i] mod 2 = 0) then
         begin
           if(arr[i]>maxEven) then maxEven:=arr[i];
           if(arr[i]<minEven) then minEven:=arr[i];
         end;
      end;
  end;


  procedure TThread2.Execute;
  begin
   for i:=1 to 20 do
      begin
       if(arr[i] mod 2 <> 0) then
         begin
          if(arr[i]>maxOdd) then maxOdd:=arr[i];
          if(arr[i]<minOdd) then minOdd:=arr[i];
         end;
      end;
  end;


var
  T1 : TThread1;
  T2 : TThread2;
begin

  randomize;
 {Çàïîëíÿåì çíà÷åíèÿìè}
for i:=1 to 20 do
begin
  arr[i] := random(100);
end;

minEven:=100;
minOdd:=100;
maxEven:=0;
maxOdd:=0;

  T1 := TThread1.Create(True);// ñîçäàåò ýêçåìïëÿð êëàññà
  T2 := TThread2.Create(True);
 
  T1.Resume;//çàïóñê ïîòîêà
  T2.Resume;
 
  T1.WaitFor;;// æäåò çàâåðøåíèÿ ïîòîêà, âîçâðàùàÿ çàòåì êîä åãî çàâåðøåíèÿ
  T2.WaitFor;


if  (maxEven > maxOdd) then max:=maxEven else max:=maxOdd;

for i:=1 to 20 do
begin
   writeln(arr[i]);
end;

writeln('Min chetnoe - ',minEven);
writeln('Max chetnoe - ',maxEven);
writeln('Min nechetnoe - ',minOdd);
writeln('Max nechetnoe - ',maxOdd);
writeln('Max - ',max);
   Readln;
end.
Marianna22 вне форума Ответить с цитированием
Старый 22.05.2015, 18:46   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

О, да. Это уже ближе к истине.
Я бы на твоем месте writeln внес в потоки. Чтоб по окончанию потока выводило, а не в конце программы. А переменные все! кроме массива сделал бы локальными, и поместил бы их в execute потока.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Найти среднее арифметическое целых частей элементов числового массива из 30 элементов noobcplusplus Общие вопросы C/C++ 3 02.02.2015 18:30
Вывод элементов массива.Изменение элементов массива. Vesnushka18 Помощь студентам 6 09.06.2011 13:05
Записать в массив Z подряд семь нулевых элементов массива R,состоящего из N элементов.(Язык QBasic) Лиза) Помощь студентам 0 11.01.2011 16:02
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива HazelHen Общие вопросы C/C++ 2 29.03.2009 15:16